
Quando estou usando mkdir -pm 764 a/b/c
, só c
obtive a permissão 764, embora a
tenha b
permissão padrão. Por que isso acontece? Por que nem todos os diretórios recebem permissão 764?
Responder1
O mkdir
utilitário cria um único diretório. Quando usado com -m
ele, cria o diretório e efetivamente executa chmod
nele com as permissões fornecidas (embora isso não aconteça em duas etapas, o que pode ser importante em algumas circunstâncias).
Com -p
, quaisquer diretórios intermediários que ainda não existam serão criados. O modo fornecido -m
ainda se aplica apenas ao sobrenome no nome do caminho, já que esse é o diretório que você deseja criar (os diretórios intermediários são criados para permitir a criação desse diretório com o modo determinado).
OPadrão POSIX paramkdir
diga que cada diretório intermediário deve ser criado com o modo (S_IWUSR|S_IXUSR|~filemask)&0777
onde filemask
está o valor umask do seu shell.
Na seção "Uso do aplicativo", diz
[...] Para componentes de nome de caminho intermediário criados por
mkdir
, o modo é o padrão modificado poru+ wx
para que os subdiretórios sempre possam ser criados independentemente da máscara de criação do modo de arquivo; se forem desejadas permissões finais diferentes para os diretórios intermediários, elas poderão ser alteradas posteriormente comchmod
.
Isso significa que o modo para os diretórios intermediários está definido para permitir a criação de um diretório que potencialmente não possui permissões de gravação ou execução do usuário. Se os diretórios intermediários também não recebessem permissões de execução e/ou gravação, os últimos componentes do caminho do diretório não poderiam ser criados.
No seu caso específico, use
mkdir -p -m 764 a/b/c
chmod 764 a/b
chmod 764 a
Se você tiver certeza de que nenhum dos diretórios existia anteriormente, use
mkdir -p -m 764 a/b/c
chmod -R 764 a