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 ):
... definir modo de arquivo (como em chmod), não a = rwx - umask
... nenhum erro se existente, crie diretórios pais conforme necessário
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 executar mkdir yodirectory
em uma determinada pasta (digamos, mahome) e stat
ela, obtenho uma saída semelhante a esta:
755 richard:richard /mahome/yodirectory
# permissions user:group what I just made (yodirectory),
# (owner,group,others--in that order) where I made it (i.e. in mahome)
#
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:
mkdir -m 777 -p yodirectory/yostuff/mastuffinyostuff
# OR (you can swap 777 for 0777 if you so desire, outcome will be the same)
install -d -m 777 -p yodirectory/yostuff/mastuffinyostuff
Vou obter permanentes 755
para ambos yodirectory
e yostuff
, com apenas 777
permanentes para mastuffinyostuff
. Portanto, parece que umask
é tudo o que foi aplicado yodirectory
e yostuff
... para contornar isso, podemos usar uma subcamada:
( umask 000 && mkdir -p yodirectory/yostuff/mastuffinyostuff )
e é isso. 777 permanentes para yostuff, mastuffinyostuff e yodirectory.
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?