
Когда я использую mkdir -pm 764 a/b/c
then, то c
получаю только это разрешение 764, в то время как a
и b
имеют разрешение по умолчанию. Почему так? Почему не все каталоги получают разрешение 764?
решение1
Утилита mkdir
создает один каталог. При использовании с -m
ним создается каталог и фактически запускается chmod
в нем с заданными разрешениями (хотя это не происходит в два этапа, что может быть важно при некоторых обстоятельствах).
С -p
, создаются любые промежуточные каталоги, которые еще не существуют. Режим, заданный для, -m
по-прежнему применяется только к последнему имени в имени пути, поскольку это каталог, который вы хотите создать (промежуточные каталоги создаются, чтобы разрешить создание этого каталога с заданным режимом).
TheСтандарт POSIX дляmkdir
скажем, каждый промежуточный каталог должен быть создан с режимом, (S_IWUSR|S_IXUSR|~filemask)&0777
где filemask
— значение umask вашей оболочки.
В разделе «Использование приложения» написано:
[...] Для промежуточных компонентов имени пути, созданных с помощью
mkdir
, режим по умолчанию изменяется с помощью ,u+ wx
так что подкаталоги всегда могут быть созданы независимо от маски создания режима файла; если для промежуточных каталогов требуются другие окончательные разрешения, их можно изменить впоследствии с помощьюchmod
.
Это означает, что режим для промежуточных каталогов установлен так, чтобы позволить вам создать каталог, который потенциально не имеет прав пользователя на запись или выполнение. Если бы промежуточным каталогам также не были предоставлены права на выполнение и/или запись, последние компоненты пути каталога не могли бы быть созданы.
В вашем конкретном случае используйте
mkdir -p -m 764 a/b/c
chmod 764 a/b
chmod 764 a
Если вы точно знаете, что ни один из каталогов ранее не существовал, используйте
mkdir -p -m 764 a/b/c
chmod -R 764 a