Зачем использовать `chmod 644` вместо` chmod u = rw, go = r,… `?

38

Я работаю над * nix уже несколько лет, и одна из вещей, к которой я просто не могу привыкнуть, это восьмеричные разрешения в коде. Есть ли какая -либо другая причина , чем длина линии предпочитает chmod 644 ...более chmod u=rw,go=r ...?

PS: я не ищу объяснения восьмеричных разрешений. Я знаю, как они работают, и это хорошо объяснено в руководстве. Я спрашиваю, почему восьмеричное кажется более предпочтительным по сравнению с более читабельной формой.

l0b0
источник

Ответы:

40

Использование восьмеричных кодов имеет два преимущества, о которых я могу думать, ни одно из которых не является таким огромным:

  1. Они короче, их легче набирать.
  2. Некоторые вещи только понимают их, и если вы будете регулярно их использовать, вы не почесываете голову (или работаете с документацией), когда сталкиваетесь с ней. Например, вы должны использовать восьмеричное chmodв Perl или C.

Иногда действительно простые утилиты не справляются с «дружественными» версиями; особенно в не-GNU пользователях.

Далее некоторые утилиты выплевывают восьмеричные. Например, если вы побежите umaskпосмотреть, какой у вас текущий umask, он выложит его в восьмеричном виде (хотя в bash umask -Sэто символически).

Итак, короче говоря, я бы сказал, что единственная причина, по которой они предпочитаются, состоит в том, чтобы вводить меньше символов, но даже если вы решите не использовать их, вы должны знать, как они отображаются, чтобы вы могли выяснить восьмеричный код, если вы запустите в одну из вещей, которая делает только восьмеричное. Но вам не нужно сразу знать, что 5 карт rx, вам нужно только уметь это выяснить.

derobert
источник
1
Сказать, что chmodв Perl или C нужно использовать восьмеричное представление, на самом деле не является преимуществом, поскольку представление уже существовало в первую очередь.
n0pe
@MaxMackie: это преимущество для вас, используя их. Я уточню.
Дероберт
18

Похоже, я слишком долго использовал восьмеричное.

7 - это rwx (сделайте с ним что-нибудь), 5 - это rx (нужно прочитать его, чтобы выполнить), 6 - это wr (любой файл данных, который вам нужно изменить), 4 - это r (мы дадим вам на это посмотреть), и 0 - (извините, здесь нечего видеть). И заказ - Я, Мы, Все. Это основные комбинации.

755 Я могу изменить и запустить его, все остальные могут запустить его.

644 Я могу это изменить, все остальные могут это прочитать.

444 Читайте только для всех, мы здесь.

500 Я могу выполнить это, не хочу, чтобы это изменилось, все остальные прочь.

Для меня это коротко, к делу. 9 символов и файл спецификации и двигаться дальше.

Fiasco Labs
источник
Ну, восьмеричное (основание-8), а не шестнадцатеричное (основание-16).
Дероберт
Да, тот, половина гексагона. <ухмылка>
Fiasco Labs
То же самое здесь, я считаю, что восьмеричное легче читать, чем текстовая версия ...
Брайан Ноблаух
13

Мне никогда не нравилось восьмеричное представление, я всегда обращался к прямой rwxr-xr-xнотации, поскольку мне это кажется проще. Тем не менее, насколько я понимаю, восьмеричное представление существует для того, чтобы нам было легче его запомнить (я не понимаю, как это работает).

Единственное другое возможное преимущество, которое я вижу в восьмеричном представлении, - это отсутствие двусмысленности. 8 различных конфигураций битов разрешений представлены одним отдельным номером, который, я уверен, помогает некоторым людям случайно поставить то, что wим не следовало бы.

К сожалению, я запомнил эту таблицу:

#  r  w  x
0  0  0  0
1  0  0  1
2  0  1  0
3  0  1  1
4  1  0  0
5  1  0  1
6  1  1  0
7  1  1  1
n0pe
источник
8
Я узнал, что он использует двоичный код для каждого набора из 3. Таким образом, rw ------- будет (110) (000) (000), то есть (6) (0) (0). RWXR-XR-X будет (111) (101) (101), поэтому (7) (5) (5).
Роб
4
Основная причина восьмеричное представление существует, потому что , как запрограммирована оригинальная система разрешения Unix, от С. 4 восьмеричных цифр (вспомните специальные, как 1777 для /tmp, в том числе липкий бит) занимает 12 бит, удобный размер на ПРП, особенно PDP-8. Если бы они использовали шестнадцатеричный код, для естественного отображения одного набора разрешений на шестнадцатеричную цифру потребовался бы 16-разрядный + текстовый компьютер, что было не во всех PDP. Было бы также потратить впустую 3 бита или потребовать, чтобы они изобрели использование для этих битов, что, вероятно, усложнило бы перманент Unix без реальной выгоды.
Уоррен Янг
⁺¹ идет к @Rob кстати. Действительно, после этого вычисление фактического числа из двоичного представления является базовой комбинаторикой, и вам даже не нужно помнить о наличии «восьмеричного», потому что максимальное число (т.е. 111b) не будет превышать 7.
Привет-Ангел,
Эта таблица очень понятна. Замечательно!!!
Литл-Ройс
6

Я думаю, что причина снова - история. Сначала восьмеричные значения были единственными. Символические пришли позже.

Я предпочитаю символические. Особенно, если вы хотите изменить существующие значения, не касаясь других частей.

Как chmod -R u=rwx,g-w+X,o=-сделать это в восьмеричном ...

Nils
источник
3

Обратите внимание, что восьмеричные режимы могут удалять биты setuid и setgid в некоторых системах.

Fedora 16:

$ mkdir dir
$ chmod 2775 dir
$ stat -c %a dir
2775
$ chmod 770 dir
$ stat -c %a dir
2770

( 2сохраняется)

FreeBSD 9:

$ mkdir dir
$ chmod 2775 dir
$ stat -f %Mp%Lp dir
2775
$ chmod 770 dir
$ stat -f %Mp%Lp dir
0770

( 2стал 0)

Если вы хотите изменить права доступа к файлу или каталогу, может быть лучше просто указать биты, которые вы хотите изменить (например, chmod o= dirили chmod o-rwx dirв приведенном выше примере).

Mikel
источник
2

История объясняет, почему существуют восьмеричные формы , но я думаю, что функциональность является причиной существования мнемонической формы. И все пункты о других инструментах, использующих исключительно восьмеричные режимы, совершенно верны, и я думаю, что вы должны изучить и знать их. Тем не менее я считаю, что консервативные администраторы не видят истинную полезность, которая исходит от мнемонической формы.

Восьмеричная форма, особенно при рекурсивном использовании, заставляет администраторов делать глупости. Или скорее добавленная небрежность приводит к тому, что это оказалось глупым. Всякий раз, когда вы сталкиваетесь с какой-то папкой с большим количеством текстовых файлов и xбитами, у вас есть доказательства.

Зачем кому-то ставить xбит так? Потому что это трудно сделать, если вы не используете мнемоническую форму для режимов. Учтите, что вы хотите сбросить разрешения /var/wwwи не запускаете CGI старого стиля, поэтому xбит следует удалить. Однако этот xбит служит другой цели для каталогов. Таким образом, вы в конечном итоге сделать что-то (как root), как:

chmod -R 666 /var/www
find /var/www -type d -exec chmod 777 {} \;

Однако, если вы использовали мнемоническую форму, вы могли бы дать ей «рецепт»:

chmod -R a=rwX /var/www

которая является краткой формой chmod -R ugo=rwX /var/www(достижение того же, но другого пути:) chmod -R a-x,a+rwX /var/www.

Но есть еще одна вещь, которая является более тривиальной, чего нельзя достичь с помощью восьмеричных мод. Вы не можете настроить userили groupили otherмаску индивидуально с восьмеричной формой.

Вкратце: это все равно что сравнивать скальпель (мнемонический) и острый кухонный нож (восьмеричный) ... но вам все равно нужно знать биты восьмеричного режима по другим причинам :)

Я думаю, что причина того, что восьмеричные моды все еще предпочтительны , заключается не в типизации, связанной с мнемонической формой, а в чрезмерно консервативных администраторах. И да, в 2013 году эти чрезмерно консервативные администраторы все еще существуют и останутся здесь на некоторое время.

0xC0000022L
источник
0

Когда вы должны изменить права доступа к файлам все время , Вы цените 3 -х символов. Большую часть времени я использую версии +или -для изменения разрешений.

Например, я создаю новый PHP, Python или другой скрипт в моей папке apache. chmod a+xэто все, что я делаю, так что это может быть запущено. Я читаю это как «все плюс выполнить». Теперь я знаю, что это сработает, и мне нужно было всего 3 символа.

В других случаях я использую 644 и 755 автоматически. Я просто думаю о нем как 644о файле, 755о сценарии.

разбойник
источник
0

Он хорошо подходит для настроек umask, которые обычно даются в восьмеричной записи (в pamили fstab).

Никодемус РИП
источник
0

Я полагаю, что одной важной причиной является то, что восьмеричное представление близко соответствует тому, что вы видите ls -l(или, скорее, оно происходит, когда вы мысленно конвертируете между восьмеричным и двоичным).

Конор О'Нил
источник