Текущие права доступа к файлам выглядят следующим образом:
$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
Теперь я пытаюсь дать права на запись с помощью chmod
:
$ chmod +x+r+w file
После этого права доступа к файлам по-прежнему будут выглядеть так:
$ ls -l file
-rwxrwxr-x 1 chiranjitd chiranjitd 0 Oct 30 14:52 file
Разрешение на запись не дано остальным. Почему это происходит?
решение1
Когда ты бежишь chmod +x+r+w file
,все биты установлены, за исключением тех, которые замаскированы вашимumask
. Вы, umask
по-видимому, маскируете (по крайней мере) бит записи других пользователей, поэтому эта +w
часть в конечном итоге игнорируется для них.
Таким образом, для типичного umask
случая 022 любая chmod
команда, в которой не указано, для кого должны быть установлены разрешения, в конечном итоге игнорирует любые указанные изменения битов записи группы и других пользователей.
Чтобы установить все биты, игнорируя umask
, нужно указатьВОЗВы хотите установить их для:
chmod a+rwx file
или более конкретно,
chmod ugo+rwx file
(или любое подмножество ugo
, в зависимости от ситуации, для пользователя, группы и/или других).
Также можно указать числовые разрешения вместо символьных; см.Понимание разрешений и типов файлов UNIXдля получения подробной информации.
Обратите внимание, что umask
маскирующее поведение также применяется, когдаочисткабиты, что может привести к неожиданным результатам: chmod -w file
очистит только биты записи, которые были бы установлены chmod +w file
! Продолжая с типичным значением umask
022, это означает, что chmod -w
не будет трогать биты записи группы или других, оставляя их установленными, если они уже установлены. (GNU coreutils
' chmod
любезно предупреждает об этом.)