umask 命令的用途是什么?

umask 命令的用途是什么?

umask*nix 操作系统中命令的实际用途是什么?
其工作机制和用途如何?例如

$ umask 022

之前非常感谢

答案1

umask是大多数 shell 的内置命令,它只是系统调用的接口umask(),您可以在 shell 的文档中找到它的描述(注意man umask可能会指向umask()系统调用的文档或umaskshell 的内置命令的文档)除了你的以外)。

用户掩码是进程的一个属性(从父进程继承到子进程并在命令执行时保留),用于确定创建文件时默认自动授予文件的权限。

umask实用程序允许您设置 shell 进程的用户掩码,以控制 shell 会话中运行的任何命令创建的文件的权限。

所有 shell的 都umask将掩码视为八进制数,而在某些 shell(包括所有 POSIX shell)上,它也可以以符号形式指定,例如 for chmod

掩码决定了权限的哪些位应该是清除当文件被创建时。例如umask 777,其中 0777 是 511 或 0b111_111_111 将导致在没有权限的情况下创建文件,因为 Unix 文件权限的所有 91 位(3(r读取、w写入、执行x用户, 3 为团体, 3 为其他)将被清除。

符号形式指定哪些位应该不是被清除。也会umask 777如此umask u=,g=,o=

一般来说,您至少希望 umask 包含w其他位,o因为您不希望您创建的文件是全局可写的(umask 002umask u=rwx,g=rwx,o=rx)。

您可能希望至少在用户的主要组不是个人组(与其他用户共享)的系统上也设置w组位:或。gumask 022umask u=rwx,g=rx,o=rx

Aumask 077umask u=rwx,g=,o=确保您创建的所有文件都是您私有的(其他任何人都无法访问)。您经常在创建临时文件的脚本中看到这一点,有时在子 shell 中,如下所示:

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

设置umask服务器位u可能会导致问题,因为您最终可能会创建甚至无法打开的文件。

请注意,应用了用户掩码在上面open()应用程序或creat()文件所请求的权限。如果他们在is ( )creat("file", 0666)时这样做,则权限最终将为( )。应用程序仍然可以调用或之后根据需要更改权限(并且 umask 在那里不起作用)。umask022u=rwx,g=rx,o=rx0644u=rw,g=r,o=rfchmod()chmod()

umask不带参数以八进制形式报告当前用户掩码。umask -S在某些 shell 中以符号形式报告它。umask -p或输出 shell 代码bashfish该代码一旦解释就会设置相同的用户掩码。

修改后可用于恢复之前的 umask:

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

1 从技术上讲,有 12 位权限,其中 3 个额外的权限是特殊位,根据文件类型用于各种目的,有时与其他权限位结合使用(例如用于可执行文件的 setuid、setgid 位、t用于目录的位.. .)。在某些系统上,当在open()/中请求时,这些位会被忽略creat(),无论如何,当它们由应用程序设置时(通常是通过chmod()之后),这是有充分理由的,因此将它们包含在 / 中通常没有用,umask并且umask()系统调用将忽略它们反正。

相关内容