Що робить chmod -u?


19

Я випадково біг, chmod -u filenameі це видалило всі дозволи, які я мав на себе filename.

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

Отже, що це робить саме?


Мій висновок вище неправильний. Зараз я думаю, що те, що він робить, - це видалити дозволи, які має власник, з усіх категорій.


Я вважаю , що поведінка аналогічно a=u, тільки -замість того , =і aможе бути відкинута як він може з, наприклад, a+x.


6
For1 для того, щоб задати основне запитання, яке відсутнє на сторінці людини.

1
«Формат символьного режиму [ugoa...][[-+=][perms...]...], де perms є або нуль або більше літери з набору rwxXst, або однієї літери з наборуugo » (GNU CHMOD людини сторінка); POSIX досить незрозумілий, але визначає виробництво "пермкопії" для того ж ефекту.
Майкл Гомер

1
@MichaelHomer Це не говорить про те, що він робить.
y_wc

1
@y_wc "Замість одного або декількох цих листів ви можете вказати саме одну з букв ugo : дозволи, надані користувачеві, якому належить файл ( u), дозволи, надані іншим користувачам, які входять до групи файлу ( g) , і дозволи, надані користувачам, які не належать ні до двох попередніх категорій ( o). "
Майкл Гомер

1
Так, я це прочитав. Я не бачу, щоб він згадував, що робить. Там сказано, що я можу вказати один із цих листів. Вказуючи, наприклад u, я вкажу дозволи, надані користувачеві, якому належить файл. Але це не говорить про те, що це робить. Що означає навіть значення?
y_wc

Відповіді:


19

Це не варіант, а стандартний (але рідкісний) спосіб визначення дозволів. Це означає , що для видалення ( -) дозволів , пов'язані з власником файлу ( u) для всіх користувачів (без попередніх u, gабо o). Це буде описано в довідковій сторінці.

Чоловіча сторінка GNU chmod документує це як:

Формат символьної режиму [ugoa...][[-+=][perms...]...], де permsє або нуль або більше букв з набору rwxXst, або одна буква з безлічі Ugo

і пізніше

Замість одного або декількох цих листів ви можете вказати саме один із букв ugo: дозволи, надані користувачеві, якому належить файл ( u), дозволи, надані іншим користувачам, які є членами групи файлів ( g), і дозволи, надані користувачам, які не належать ні до двох попередніх категорій ( o)

Таким чином, -uозначає видалити ( -) будь-які дозволи на даний момент для власника ( u) увімкнено для всіх (рівнозначно a-u, за винятком вшанування поточного umask). Незважаючи на те, що це не часто буде дуже корисним, наприклад, аналогічним chmod +uбуде, наприклад, копіювання дозволів від власника іншим під час рекурсивної роботи, наприклад.


Це також задокументовано в POSIX , але більш чітко визначено: специфікація дозволу є широкою who[+-=]perms(або числом), а ефект цих даних уточнюється далі:

У permcopy символи u, gі oпредставляють поточні дозволу , пов'язані з користувачем, групою, і інші частини біт режиму файлу, відповідно. У решті цього розділу permстосується нетерміналів permта permcopyграматики.

і потім

-

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


Спасибі, Майкл. Документація POSIX переконлива. Однак GNU ... Будь ласка, дивіться цей коментар у мене. Я не бачу, як випливає те, що відбувається після "Так" із того, що було раніше. permsможе бути u, що я отримав. Так, uвказує дозволи або власника. Але як це випливає, що -uвидаляє дозволи всіх власників (модуль umask) у всіх користувачів?
y_wc

Тому що це -завжди робиться: він видаляє вказані дозволи з вказаного класу користувачів. -uточно аналогічний -wабо (ближче) до ugo-u.
Майкл Гомер

Я збирався сказати, що не прийшов сюди, щоб обговорити документацію, і що я радий просто зрозуміти, що відбувається, але документи просто натиснули. Спасибі.
y_wc

Чи можу я порушити вас з іншим chmodпитанням документації? Повідомте мене, якщо ви вважаєте, що це заслуговує окремого питання. "і = спричиняє їх додавання і видаляє невідомі біти, за винятком того, що невказані біти ідентифікатора встановленого користувача та групи каталогів не зачіпаються". chmod u=rx directoryзалишить дозволи власника як rwx. Але це не відбувається, натомість вони стають очікуваним r-x. Я неправильно трактую щось?
y_wc

Це говорить про те, що sбіти setuid / setgid ( ) залишаються в спокої, якщо ви їх не згадуєте, а все інше, що ви не вказали, видаляється.
Майкл Гомер

2

Відповідь трохи схожа на /unix//a/429424/255251 .

chmod -u file_name

не видаляє весь дозвіл, але вважає umaskцінністю.

umask
0022
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file
chmod -u file
chmod: file: new permissions are ----w--w-, not ---------
ls -l file
-----w--w- 1 user user 4 Feb 25 15:17 file

Тепер змінити значення umask

umask 777
chmod 777 file
chmod -u file
chmod: file: new permissions are rwxrwxrwx, not ---------
ls -l file
-rwxrwxrwx 1 user user 4 Feb 25 15:17 file

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