1 umask
由给定 shell 设置的文件创建掩码umask
通常是操作系统独有的还是仅对给定 shell是唯一的?
例如,如果我在 Bash 中更改文件创建掩码(umask 的掩码/位掩码),它是否仅对 Bash 或我的操作系统中可能的其他现有 shell(如 Dash、ksh、zsh 等)发生变化?(“一个案例是一个外壳影响其他人”)。
要了解 umask,首先需要了解 Unix/Linux 中的进程结构。也就是说,它们形成了一个树状结构。每个进程都需要有一个父进程,它是产生它的进程。(第一个过程除外,init
)。每个进程可能会也可能不会产生更多的进程,称为子进程。
每个进程都有一个掩码属性。这是使用 umask 命令查询或设置的内容。
进程继承其父进程的掩码。然后他们可以更换自己的面具。例如,有一个umask()
C 函数可以更改您正在编写的程序的掩码,而无需umask
从 shell调用。
子进程不能影响其父进程的掩码。因此,更改进程的掩码不会影响整个系统。它只会影响任何未来的子进程。
由于外壳程序的目的是能够创建和控制其他进程,因此umask
大多数外壳程序都内置了命令。这不是 shell 所必需的,可以编写一个没有umask
功能的基本 shell 。但是这样的外壳不会被认为是用于登录和管理系统的通用外壳。
你可以自己测试我所说的,使用像 Bash 这样的 shell 可以产生其他 Bash shell(或任何你喜欢的其他 shell)的事实:
umask
命令查询当前值bash
(或其他)以生成子 shellumask
以检查孩子的掩码值umask 0000
umask
再次跑去检查孩子的口罩exit
或按Ctrl-d
)umask
以检查其掩码有用的参考:
man 1 umask
man 2 umask
(这里给出了umask()
C 函数的参考)man bash
(并搜索umask
)