2012-07-02 105 views
11

在大多數地方,權限被定義爲格式爲0777的八進制數。但在我的理解中,UNIX的umask命令(因此os.umask())需要0o000來產生0o7770o022的權限位等於0o755爲什麼os.umask()的參數是倒置的? (umask 0o000使chmod 0o777)

我聽說UNIX的umask由於某種原因被顛倒過來,我不明白它背後的原因。有人可以解釋這種不一致嗎?

+2

這是一個「面具」 - 這是這個詞在這方面意味着什麼;這些東西只允許未設置的位通過(考慮用於繪畫,芯片製造等的掩模)。如果它不這樣操作,它會被稱爲別的東西。 –

回答

11

沒有真正的不一致,因爲umaskchmod之間的關係可以純粹用方程式寫下來。顯然,umask設置爲chmod的對立面,它在過去是這樣創建的。

示例:022(默認通常爲umask)創建755。它的工作原理是這樣的:

  • 7 - 0 = 7變爲第一字節
  • 7 - 2 = 5變爲第二和第三字節

使用這個例子中,umask 777創建具有chmod 000一個文件,umask 112將等於chmod 664。據我所知,發生這種情況的原因是umask命令最初創建的目的是爲了說明在文件創建後(因此反轉)文件將具有不是的權限位。

雖然它可能很煩人,但實踐起來並不難。只要想想你會如何chmod你的文件,並從7減去你想要的字節,你會得到umask值。或者,在IDE中編寫代碼時,請勿使用umask,而應創建該文件(當然,默認爲umask),然後在Python中使用os.chmod()

+0

「據我所知,發生這種情況是因爲umask命令最初創建時指示文件在創建後不會具有什麼權限位(因此是反轉)。」精彩的回答!現在我可以安居樂業了! :) – ddinchev

+0

「面具」是你「掩蓋」或「刪除」的東西。這就是爲什麼我們使用按位AND(C中的「&」)來「掩蓋」事物。 – Fixee