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()系統呼叫將忽略它們反正。

相關內容