Чому chmod + w не дає дозволу на запис іншим (o)


18

Коли я запускаю, chmod +w filenameвін не дає дозволу на запис other, він просто дає дозвіл на запис userта group.

Після виконання цієї команди

chmod +w testfile.txt

запущені ls -l testfile.txtпринти

-rw-rw-r-- 1 ravi ravi 20 Mar 10 18:09 testfile.txt

але у випадку +rі +xце працює належним чином.

Я не хочу використовувати chmod ugo+w filename.



1
Якщо ви не хочете користуватися ugo, використовуйте a.
муру

так, але я просто хочу знати, чому +wне працює.
Раві Севта

Тому я залишив два коментарі.
муру

@muru. Ви у своїй askubuntuвідповіді стверджуєте, що вище зазначаєте, що "Ця поведінка призначена POSIX, а значить, не помилка". Будь ласка, майте на увазі, що текст користування додатком POSIX є ненормативним і тому POSIX не надає обов'язкових зобов'язань.
fpmurphy

Відповіді:


26

Ваша конкретна ситуація

У вашій конкретній ситуації ми можемо здогадатися, що ваш струм umaskє 002(це звичайне значення за замовчуванням), і це пояснює ваш сюрприз.

У тій конкретній ситуації, коли umaskзначення дорівнює 002 (усі числа вісімкові).

  • +rозначає, ugo+rщо 002 & 444є 000, що дозволяє встановлювати всі біти
  • +xозначає, ugo+xщо 002 & 111є 000, що дозволяє встановлювати всі біти
  • але +wозначає, ug+wтому що 002 & 222є 002, що заважає встановити біт "o".

Інші приклади

  • З umask 022 +wозначало б u+w.
  • З umask 007 +rwxозначало б ug+rwx.
  • З umask 077 +rwxозначало б u+rwx.

Що б відповідало вашим очікуванням

Коли ви перейдете umaskна 000, виконавши

umask 000

то у своєму терміналі

chmod +w file

встановить дозволи для ugo + w.

Бічна примітка

Як запропонував ilkkachu, зверніть увагу, що umask 000це не означає, що всі можуть читати та писати всі ваші файли.

Але umask 000означає, що кожен, хто має певний доступ до будь-якого облікового запису користувача на вашій машині (який може включати програми, що працюють із серверними службами ofc), може читати і записувати всі файли, які ви створюєте за допомогою цієї маски, активними і не змінюватись (якщо ланцюжок містить каталоги до кореня також дозволяють їх).


4
umask 000 означає, що кожен, хто має певний доступ до облікового запису користувача на вашій машині (який може включати в себе програми, що працюють із серверними службами ofc), може читати і записувати всі файли, які ви робите за допомогою цієї маски, активними і не змінюватися, щоб бути зрозумілим
StarWeaver

4
"+ r означає ugo = r" - ні, це не так, це означає встановити rбіт для тих сторін, де umask дозволяє. Це чітко зазначено в посібниках, наприклад, GNU chmod і FreeBSD chmod, а також у стандарті. Те саме для +x. Для +wвас право, в разі цього конкретного UMASK.
ilkkachu

4
Крім того, встановлення umask 0 не означає, що кожен може читати та записувати всі ваші файли, оскільки багато програм створюють файли, які є особливо приватними в режимі 0600, тобто група та інші не отримують доступу, незалежно від umask.
ilkkachu

@ilkkachu + r означає ugo = r, це було пов'язано із ситуацією, описаною у питанні. Це не було загальним.
Prvt_Yadav

2
@Debian_yadav, саме в цьому і umaskполягає: важлива частина +rповедінки, а не сторонній знак. Крім того, навіть якщо вважати, що умаск 002, chmod +rце не означає chmod ugo=r, це означаєchmod ugo+r
ilkkachu

24

З:

chmod +<perms>

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

Якщо ви хочете додати perms для користувача , груп та інших, незалежно від umask, використовуйте

chmod a+<perms>

чого коротко

chmod ugo+<perms>

Це означає, що + x і a + x не рівні.
Prvt_Yadav

1
Мені подобається мати посилання: man7.org/linux/man-pages/man1/chmod.1.html „Якщо нічого з цього не вказано, ефект такий, як якщо б (а) було надано, але біти, які встановлені в umask не зачіпаються ".
tehnicaorg

0

Вам потрібно вказати, кому ви надаєте дозволи, наприклад other, використовуючиchmod o+w testfile.txt


1
так, але я думаю, що +wдає дозвіл усім (користувачеві, групі та іншим).
Раві Севта

Щоб надати дозволи всім користувачам, використовуйте chmod a+w testfile.txt. Використовувати uдля користувача, gдля групи, oдля інших та aдля всіх.
Jaken551

якщо chmod a+w filename, chmod +w filenameі chmod ugo+w filenameальтернативні один до одного , то чому б просто не використовувати+w
Ravi Sevta
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.