Относительно разрешений на промежуточные папки, созданные с помощью «mkdir -pm 764 a/b/c»

Относительно разрешений на промежуточные папки, созданные с помощью «mkdir -pm 764 a/b/c»

Когда я использую 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

Связанный контент