Недавно коллега попросил меня использовать chmod
буквы вместо цифр. Помимо очевидного преимущества в читаемости, есть ли какая-то особая причина использовать буквы вместо цифр?
решение1
Символьная chmod
запись более детализирована по сравнению с восьмеричной записью и позволяет изменять определенные биты режима, оставляя другие биты режима нетронутыми.
Символическое обозначение состоит из трех компонентов:
chmod [references][operator][modes] file
Состоит references
из комбинации букв ugoa
, которые указывают, какой доступ пользователя к file
будет изменен: пользователя, которому он принадлежит ( u
), других пользователей в группе файла ( g
), других пользователей, не входящих в группу файла ( o
), или всех пользователей ( a
). Если references
компонент опущен, он по умолчанию применяется ко всем пользователям, но umask
изменяются только разрешения, разрешенные .
Заставляет +
operator
указанные биты режима файла добавляться к существующим битам режима файла каждого файла; -
удалять их; =
добавлять их и удалять неуказанные биты, за исключением setuid
битов, setgid
установленных для каталогов, если явно не указано иное.
Состоит mode
из комбинации букв rwxXst
, которые соответствуют чтению ( r
), записи ( w
), выполнению (или поиску каталогов) ( x
), выполнению/поиску только если файл является каталогом или уже имеет разрешение на выполнение для какого-либо пользователя ( X
), setuid
или setgid
(в зависимости от указанных ссылок) ( s
) и ограниченному флагу удаления или липкому биту ( t
). В качестве альтернативы mode
может состоять из одной из букв ugo
, в этом случае case mode
соответствует разрешениям, предоставленным в данный момент владельцу ( u
), членам группы файла ( g
) или разрешениям пользователей ни в одной из предыдущих категорий ( o
).
Примеры
Предположим, что разрешение установлено file
для0764/-rwxrw-r--
Удалить разрешение у других пользователей, не входящих в группу файла:
Восьмеричное:
chmod 760 file
Обратите внимание, что существующие разрешения, оставленные без изменений, должны быть повторены при использовании восьмеричной записи.
Символично:
chmod o-rwx file
При символической записи существующие права доступа к файлам не имеют значения.
Набор setuid
:
Восьмеричное:
chmod 4764 file
Символично:
chmod u+s file
Набор setgid
:
- Восьмеричное:
chmod 2764 file
- Символический
chmod g+s file
решение2
Использование букв позволяет включать и выключать отдельные биты, не изменяя другие биты.
Предположим, у меня есть следующий каталог:
drwxrwsr-x 6 f261-01a g261-01a 4096 Sep 12 17:51 /home/teams/261/f261-01a
Если я хочу отключить разрешение на чтение для других и хочу использовать числа, я могу просто быстро сделать chmod 751
. За исключением того, что я только что отключил бит setgid для каталога. Упс.
Однако если я использую chmod o-r
, я только отключаю нужный мне бит чтения, а бит setgid для каталога остается установленным.
Это также полезно, если вы хотите включить биты setuid, setgid или sticky для файла или каталога. Особенно, если вы делаете это так редко, что у вас возникают проблемы с запоминанием того, какой бит какой в 4-м октете.
Итак, это зависит от того, что вы делаете. Я все еще предпочитаю использовать числа, когда просто устанавливаю разрешения и мне все равно, что там изначально. Но если вы переключаете отдельные биты, то буквенная нотация намного проще.