8

Я полностью запутался между umask и chmod. Оба используются, чтобы дать разрешения файлам. Но где именно разница и когда их использовать.

Я прочитал онлайн-документацию, но оба они выглядят одинаково для меня.

umask: umask используется для установки прав доступа к файлам по умолчанию. Эти разрешения будут использоваться для всех последующих файлов при их создании. chmod: используется для изменения прав доступа к файлам и каталогам.

Насколько я понимаю, если, например, создан файл test.doc.

По умолчанию unix выдает файлу 022 код umask.

Теперь, когда я изменяю его на chmod 666 test.doc, я могу изменить уровень разрешений этого файла.

А что если я использую umask 666 для того же файла?

Какая разница, когда я использую CHMOD 666 и Umask 666

2 ответа2

8

Разница в том, что umask влечет за собой только новые файлы. Как вы сказали, umask устанавливает разрешения по умолчанию, которые будут иметь файл / каталог во время создания, но впоследствии umask больше не будет их затрагивать.

Однако для запуска chmod необходимо создать файл.

Поэтому, если вы запустите umask , это никак не повлияет на существующие файлы.

2

umask очень сильно отличается от chmod .

  1. Важное отличие еще не было упомянуто: chmod устанавливает, но umask очищает (ограничивает) биты прав доступа. Вот почему это называется "маска" (как в "битовой маске").

  2. Как писал Дэвид, umask - это параметр конфигурации (на уровне процесса), поэтому он не применяется ни к каким конкретным файлам (в отличие от chmod).

  3. Что подводит нас к другому важному моменту: umask не ограничивается файлами. Это также применяется при создании каталогов. (См. Также, например, этот ответ.)

  4. Также важно, что на саму команду chmod не влияет текущий настроенный umask .

Теперь, к вашему примеру, что бы сделал umask 666 :

Он сообщит текущему процессу (например, вашей оболочке), что любые новые объекты файловой системы должны быть созданы с удаленными битами R+ W (4 + 2 = 6) (из любых разрешений, явно или явно запрошенных при создании). (Таким образом, значение 666 не очень практично, поскольку позволяет устанавливать только биты X (execute), но для нечитаемых файлов ...)

Например:

$ touch foo; ls -la foo
-rw-r--r-- ... foo   <-- default permissions

$ umask 666
$ touch bar; ls -la bar
---------- ... bar   <-- perms. after the new umask (restriction) is set
$ mkdir foodir; ls -la | grep foodir
d--x--x--x ... dir   <-- not very practical for dirs, either

$ chmod 777 bar; ls -la bar
-rwxrwxrwx .... bar* <-- chmod happily ignores the current umask

$ umask 022
$ touch bong; ls -la bong
-rw-r--r-- ... bong  <-- (so, it seems this was the default umask)

$ chmod 666 bong; ls -la bong
-rw-rw-rw- ... bong  <-- no surprise of any kind here

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .