-6 utilities
umask*nix 操作系统中命令的实际用途是什么?
其工作机制和用途如何?例如
$ umask 022
Run Code Online (Sandbox Code Playgroud)
之前非常感谢
umask是大多数 shell 的内置命令,它只是umask()系统调用的接口,您可以在 shell 的文档中找到它的描述(注意man umask可能会指向umask()系统调用的文档,而不是系统调用的文档)umaskshell 的内置命令)除了你的以外)。
用户掩码是进程的一个属性(从父进程继承到子进程并在命令执行时保留),用于确定创建文件时默认自动授予文件的权限。
\n该umask实用程序允许您设置 shell 进程的用户掩码,以控制 shell 会话中运行的任何命令创建的文件的权限。
所有umaskshell 的 都将掩码视为八进制数,而在某些 shell(包括所有 POSIX shell)上,它也可以以符号形式指定,例如 for chmod。
掩码确定创建文件时应清除哪些权限位。例如umask 777,其中 0777 是 511 或 0b111_111_111 将导致在没有权限的情况下创建文件,因为 Unix 文件权限的所有 9\xc2\xb9 位(3(r读取、w写入、x执行)用于用户,3 用于组,3 用于其他)将被清除。
符号形式指定不应清除哪些位。umask 777也会如此umask u=,g=,o=。
一般来说,您至少希望 umask 包含w其他位o,因为您不希望您创建的文件是全局可写的(umask 002或umask u=rwx,g=rwx,o=rx)。
您可能希望至少在用户的主要组不是个人组(与其他用户共享)的系统上也设置组位w:或。gumask 022umask u=rwx,g=rx,o=rx
Aumask 077或umask u=rwx,g=,o=确保您创建的所有文件都是您私有的(其他任何人都无法访问)。您经常在创建临时文件的脚本中看到这一点,有时在子 shell 中,如下所示:
(umask 077; echo test > "$tmpfile")\nRun Code Online (Sandbox Code Playgroud)\n设置umask服务器位u可能会导致问题,因为您最终可能会创建甚至无法打开的文件。
请注意,用户掩码应用于应用程序或文件所请求的权限之上。如果他们在is ( )时这样做,则权限最终将为( )。应用程序仍然可以调用或之后根据需要更改权限(并且 umask 在那里不起作用)。open()creat()creat("file", 0666)umask022u=rwx,g=rx,o=rx0644u=rw,g=r,o=rfchmod()chmod()
umask不带参数以八进制形式报告当前用户掩码。umask -S在某些 shell 中以符号形式报告它。umask -p或输出 shell 代码bash,fish该代码一旦解释就会设置相同的用户掩码。
修改后可用于恢复之前的 umask:
\nprevious_umask=$(umask)\numask 077\n# create some private files\numask "$previous_umask"\nRun Code Online (Sandbox Code Playgroud)\n\xc2\xb9 从技术上讲,有 12 位权限,其中 3 个额外的权限是特殊位,根据文件类型用于各种目的,有时与其他权限位结合使用(例如可执行文件的 setuid、setgid 位t、目录...)。open()在某些系统上,当在/中请求时,这些位会被忽略,creat()无论如何,当它们由应用程序设置时(通常是通过chmod()之后),这是有充分理由的,因此将它们包含在 / 中通常没有用,umask并且umask()系统调用将忽略它们反正。