Для чего нужна команда umask?

Для чего нужна команда umask?

Для чего на самом деле umaskнужна команда в *nix OS?
Каков ее рабочий механизм и полезность? Например

$ umask 022

Спасибо большое, прежде чем

решение1

umask— это встроенная команда большинства оболочек, которая является просто интерфейсом к системному umask()вызову, и вы найдете ее описание в документации вашей оболочки (будьте осторожны, man umaskона может направить вас к документации системного umask()вызова вместо umaskвстроенной команды оболочки, отличной от вашей).

Маска пользователя — это атрибут процесса (наследуемый от родителя к дочерним процессам и сохраняющийся при выполнении команды), который определяет, какие разрешения автоматически предоставляются файлам по умолчанию при их создании.

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

Все umaskоболочки принимают маску как восьмеричное число, в то время как в некоторых оболочках, включая все оболочки POSIX, ее также можно указать в символической форме, например, для chmod.

Маска определяет, какие биты разрешений должны бытьочищенокогда файл создан. Например umask 777, где 0777 - это 511 или 0b111_111_111 приведет к созданию файлов без разрешения, так как все 9¹ бит разрешений на файлы Unix (3 ( rread, write, e xexcute) дляпользователь, 3 длягруппа, 3 длядругой) будет очищен.

Символическая форма определяет, какие биты должнынетбыть очищен. Так же umask 777будет umask u=,g=,o=.

Как правило, вам нужно, чтобы по крайней мере umask включал бит wдля others, поскольку вы не хотите, чтобы создаваемые вами файлы были доступны для записи всем ( umask 002или umask u=rwx,g=rwx,o=rx).

Вероятно, вам также понадобится установить wбит для group, по крайней мере, в системах, где основная группа пользователя не является личной (она общая для других пользователей): umask 022или umask u=rwx,g=rx,o=rx.

Или гарантирует umask 077, umask u=rwx,g=,o=что все создаваемые вами файлы будут приватными для вас (недоступными для кого-либо еще). Вы часто видите это в скриптах, которые создают временные файлы, иногда в подоболочке, как в:

(umask 077; echo test > "$tmpfile")

Установка umaskбитов для user может вызвать проблемы, так как в итоге вы можете создать файлы, которые даже вы не сможете открыть.

Обратите внимание, что применена маска пользователянаверхуразрешений, запрашиваемых приложениями, когда они open()или creat()файл. Если они делают это, creat("file", 0666)пока umaskесть 022( u=rwx,g=rx,o=rx), разрешения в конечном итоге будут 0644( u=rw,g=r,o=r). Приложения по-прежнему могут вызывать fchmod()или chmod()впоследствии, чтобы изменить разрешения по своему усмотрению (и umask не имеет никакого эффекта там).

umaskбез аргументов выводит текущую маску пользователя в восьмеричной форме. umask -Sв некоторых оболочках выводит ее в символьной форме. umask -pв bashили fishвыводит код оболочки, который после интерпретации установит ту же маску пользователя.

Это можно использовать для восстановления предыдущего umask после его изменения:

previous_umask=$(umask)
umask 077
# create some private files
umask "$previous_umask"

¹ Технически, существует 12 бит разрешений, из которых 3 дополнительных — это специальные биты, используемые для различных целей в зависимости от типа файла и иногда в сочетании с другими битами разрешений (например, битами setuid, setgid для исполняемых файлов, tбитом для каталогов...). В некоторых системах эти биты игнорируются при запросе в open()/ creat()и в любом случае, когда они устанавливаются приложениями (обычно скорее через chmod()впоследствии), на это есть веская причина, поэтому обычно нецелесообразно включать их в , umaskи umask()системный вызов все равно их проигнорирует.

Связанный контент