Навіщо використовувати `chmod 644` замість` chmod u = rw, go = r,… `?


38

Я працюю над * nix вже кілька років, і одна з речей, до яких я просто не можу звикнути, - це восьмеричні дозволи в коді. Чи є якась -небудь інша причина , ніж довжина лінії воліє chmod 644 ...більш chmod u=rw,go=r ...?

PS: Я не шукаю пояснення восьмеричних дозволів. Я знаю, як вони працюють, і це добре пояснено в посібнику. Я запитую, чому вісімковість здається перевагою перед більш читаною людиною формою.

Відповіді:


40

Використання восьмеричних кодів має два переваги, які я не можу придумати, і жодне з них не таке величезне:

  1. Вони коротші, їх легше набирати.
  2. Кілька речей їх лише розумієш, і якщо ти їх регулярно використовуєш, ти не будеш чухати голову (або бігти до документації), коли наштовхнешся на одну. Наприклад, ви повинні використовувати восьмерику chmodв Perl або C.

Іноді по-справжньому прості утиліти не обробляють "дружні" версії; особливо в країнах, що не належать до GNU.

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

Отже, коротше, я б сказав, що єдиною причиною віддати перевагу є введення меншої кількості символів, але навіть якщо ви не вирішите їх використовувати, ви повинні знати, як вони відображаються, щоб ви могли розібрати восьмеричний код, якщо запустити в одну з речей, яка робить лише восьмеричну. Але вам не потрібно відразу знати, що 5 карт rx, потрібно лише вміти це розібратися.


1
Скажімо, що chmodв Perl або C потрібно використовувати восьмеричне подання, насправді не є перевагою, оскільки представлення вже існувало в першу чергу.
n0pe

@MaxMackie: це перевага перед вами їх використанням. Я уточню.
derobert

18

Здається, я занадто довго використовую восьмерику.

7 - rwx (будь-що з ним робити), 5 - rx (треба прочитати його, щоб виконати його), 6 - wr (будь-який файл даних, який потрібно змінити), 4 - r (ми дамо тобі подивитися), і 0 є - (вибачте, тут нічого не бачити). І наказ - Я, Нас, Кожен. Це основні комбінації.

755 Я можу його змінити і запустити, всі інші можуть це запустити.

644 Я можу це змінити, усі інші можуть його прочитати.

444 Читайте лише для всіх, ми вже тут.

500 Я можу його виконати, не хочу, щоб він мінявся, всі інші здають руки.

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


Ну вось восьмілочок (основа-8), а не шістнадцятковий (основа-16).
derobert

Так, той, півкрок. <grin>
Лабораторії Фіаско

Тут же я вважаю восьмерику легшою для читання, ніж текстову версію ...
Брайан Ноблеуч

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

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 btw. Дійсно, після цього розрахунку фактичного числа з двійкового подання є одним з основних комбінаторика, і вам навіть не потрібно пам'ятати про те , «восьмеричний» , так як максимальна кількість (тобто 111b) не перевищуватиме 7.
Привіт-Angel

Ця таблиця робить це дуже зрозумілим. Це чудово!!!
Little Roys

6

Думаю, причина знову - історія. Спочатку восьмеричні значення були єдиними. Символічні з’явились пізніше.

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

Як chmod -R u=rwx,g-w+X,o=-це роблять у восьмеричному ...


3

Зауважте, що восьмеричні режими можуть видаляти встановлені та встановлені жорсткі біти в деяких системах.

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став a 0)

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


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 рік, ці надмірно консервативні адміністратори все ще існують і знаходяться тут, щоб залишитися на деякий час.


0

Коли вам доведеться весь час змінювати дозволи файлів , ви оцінюєте 3 символи. Багато часу я використовую версії +або -для зміни дозволів.

Наприклад, я створюю новий PHP, Python або інший скрипт у своїй папці apache. chmod a+xце все, що я роблю, щоб це можна було запустити. Я читаю це як "все плюс виконати". Тепер я знаю, що це спрацює, і мені були потрібні лише 3 символи.

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


0

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


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.