Umask

由給定 shell 的 umask 設置的文件創建遮罩通常是完全對作業系統唯一的還是僅對給定的 shell 唯一?

  • November 12, 2018

由給定 shell 設置的文件創建遮罩umask通常是完全對作業系統唯一的還是僅對給定 shell 唯一?

例如,如果我在 Bash 中更改文件創建遮罩(umask 的遮罩/位遮罩),它是否會僅針對 Bash 或我的作業系統中可能存在的其他 shell(如 Dash、ksh、zsh 等)更改?(“一個案例是一個外殼影響其他人”)。

要了解 umask,首先需要了解 Unix/Linux 中的程序結構。也就是說,它們形成了一個樹狀結構。每個程序都需要有一個父程序,這是產生它的程序。(除了第一個過程,init)。每個程序可能會或可能不會產生更多程序,稱為子程序。

每個程序都有一個遮罩屬性。這是使用 umask 命令查詢或設置的內容。

程序繼承其父程序的遮罩。然後他們可以更換自己的面具。例如,有一個umask()C 函式可以更改您正在編寫的程序的遮罩,而無需umask從 shell 呼叫。

子程序不能影響其父程序的遮罩。因此,改變一個程序的遮罩不會影響整個系統。它只會影響任何未來的子程序。

由於 shell 的目的是能夠創建和控制其他程序,umask因此大多數 shell 都內置了一個命令。這不是 shell 所必需的,可以編寫一個沒有umask功能的基本 shell。但是這樣的 shell 不會被認為是用於登錄和管理系統的通用 shell。

您可以使用像 Bash 這樣的 shell 可以生成其他 Bash shell(或您喜歡的任何其他 shell)的事實來測試我自己所說的內容:

  1. 打開終端
  2. 執行umask命令查詢目前值
  3. 執行bash(或其他)以生成子外殼
  4. 執行umask檢查孩子麵具的價值
  5. 將孩子的面具設置為其他東西,例如執行umask 0000
  6. 再次跑去umask檢查孩子的口罩
  7. 從子 shell 退出(執行exit或按Ctrl-d
  8. 您現在又回到了父 shell 中。執行umask檢查它的遮罩

有用的參考資料:

引用自:https://unix.stackexchange.com/questions/481146