Como criar um diretório e dar permissão em comando único no Linux?
Tenho que criar várias pastas com permissão total 777
.
Comandos
mkdir path/foldername
chmod 777 path/foldername
Não gosto de criar e dar permissão em dois comandos. Posso fazer isso em um único comando?
mkdir temp; chmod 777 temp
é uma linha. Você pode tornar 'temp' uma variável e salvá-la como um comando bash. É isso que você está procurando fazer?Respostas:
De acordo com a página de manual de mkdir ...
fonte
-p
@DisplayName já mencionado acima, há também outro. O-m
será aplicado apenas se um diretório for realmente criado. Se já existir, seu modo não será alterado. Dependendo do seu contexto, isso pode ser bom ou ruim.deve dar a você o que você deseja. Esteja ciente de que todo usuário tem o direito de adicionar e excluir arquivos nesse diretório.
fonte
three
, com as permissões padrão sendo suficientes para o caminho para ele.Quando o diretório já existe:
Quando o diretório não existe e você deseja criar os diretórios pais:
fonte
find /your/dirs -type d -exec chmod 755 {} \;
IMO, é melhor usar o
install
comando nessas situações. Eu estava tentando tornarsystemd-journald
persistente nas reinicializações.fonte
Você pode escrever um script de shell simples, por exemplo:
Depois de salvo e com o sinalizador de executável habilitado, você pode executá-lo em vez de mkdir e chmod:
No entanto, a resposta de alex é muito melhor porque gera um processo em vez de três. Eu não sabia sobre a
-m
opção.fonte
Apenas para expandir e melhorar algumas das respostas acima:
Primeiro, verificarei a página de manual mkdir do GNU Coreutils 8.26 - ela nos dá esta informação sobre a opção '-m' e '-p' (também pode ser fornecida como --mode = MODE e --parents, respectivamente ):
As declarações são vagas e confusas na minha opinião. Mas basicamente, ele diz que você pode fazer o diretório com as permissões especificadas por "notação numérica chmod" (octais) ou você pode ir "para o outro lado" e usar um / seu umask.
Observação lateral: digo "o outro lado", pois o valor de umask é exatamente o que parece - uma máscara , ocultando / removendo permissões em vez de "concedê-las" como na notação octal numérica de chmod.
Você pode executar o comando embutido em shell
umask
para ver qual é o seu umask de 3 dígitos; para mim, é022
. Isso significa que quando eu executarmkdir yodirectory
em uma determinada pasta (digamos, mahome) estat
ela, obtenho uma saída semelhante a esta:Agora, para adicionar um pouco mais sobre essas permissões octais. Quando você faz um diretório, "seu sistema" pega seu diretório padrão perms '[que se aplica a novos diretórios (seu valor deve ser 777)] e coloca sua máscara de yo (u), efetivamente escondendo alguns desses perms'. Meu umask é 022 - Agora, se "subtrair" 022 de 777 (tecnicamente subtraindo é um reducionismo e nem sempre correta - na verdade estamos desligando perms ou mascarar ing-los) ... temos 755 como indicado (ou "statted" ) antes.
Podemos omitir o '0' na frente dos octais de 3 dígitos (para que não precisem ser de 4 dígitos), pois em nosso caso não queríamos (ou melhor, não mencionamos) nenhum stickybits, setuids ou setgids (você pode querer olhar para eles, aliás, eles podem ser úteis já que você está indo para o 777). Em outras palavras, 0777 implica (ou é equivalente a) 777 (mas 777 não é necessariamente equivalente a 0777 - já que 777 especifica apenas as permissões, não os setuids, setgids, etc.)
Agora, para aplicar isso à sua pergunta em um sentido mais amplo - você (já) tem algumas opções. Todas as respostas acima funcionam (pelo menos de acordo com meus coreutils). Mas você pode (ou é provável que tenha) problemas com as soluções acima quando quiser criar subdiretórios (diretórios aninhados) com 777 permissões de uma só vez. Especificamente, se eu fizer o seguinte em mahome com um umask de 022:
Vou obter permanentes
755
para ambosyodirectory
eyostuff
, com apenas777
permanentes paramastuffinyostuff
. Portanto, parece queumask
é tudo o que foi aplicadoyodirectory
eyostuff
... para contornar isso, podemos usar uma subcamada:( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
e é isso. 777 permanentes para yostuff, mastuffinyostuff e yodirectory.
fonte
você pode usar o seguinte comando para criar diretório e dar permissões ao mesmo tempo
fonte
Não faça:
mkdir -m 777 -p a/b/c
já que isso só definirá a permissão777
no último diretório, c; a e b serão criados com a permissão padrão de seu umask.Em vez de criar novos diretórios com permissão
777
, executemkdir -p
em um subshell em que você substitui o umask:Observe que isso não mudará as permissões se algum de a, bec já existir.
fonte