2011-03-01 132 views
3

我正在使用python腳本創建linux文件系統的副本。我在創建的/ tmp目錄上遇到了許多問題。在/ tmp目錄下應該有1777組的權限,即:python創建tmp目錄權限

ls -l/
drwxrwxrwt 17 root  root 16384 2011-03-01 09:50 tmp 

當我這樣做,

os.mkdir('/mnt/tmp',1777) 

我得到了奇怪的權限:

ls -l/
d-wxr----t 2 root root 4096 2011-03-01 09:53 tmp 

然後,我想知道的umask和chmod ,所以我試過這個:

os.mkdir('/mnt/tmp') 
old_mask=os.umask(0000) 
os.chmod('/mnt/tmp',1777) 
os.umask(old_mask) 

個但我仍然得到意想不到的權限:

ls -l/
d-wxrwS--t 2 root root 4096 2011-03-01 09:57 tmp 

然而,是什麼給我創建目錄的正確的權限如下:

os.mkdir('/mnt/tmp') 
os.system("chmod 1777 /mnt/tmp") 

我要指出,我通過運行此腳本sudo,但沒有提及/ etc/sudoers中的任何umask設置。以實際的root用戶身份運行它沒有任何區別。作爲一個普通用戶來運行它是不可能的,因爲我正在製作一個FS副本,其中必須包含只能在root下訪問的文件。

這裏的任何想法?任何幫助將不勝感激。

回答

9

您應該提供權限爲八進制數。在Python 2.x中,只需使用01777而不是1777。在Python 3.x中,使用0o1777

+0

令人驚歎!謝謝你的提示。爲了記錄,我必須這樣做: os.umask(00000) os.mkdir('/ mnt/tmp',01777) 讓它正常工作。再次感謝! – 2011-03-01 15:14:39

1

您的許可應該是八進制的(877中的777是十進制的511)。

在Python中,與C中一樣,0555在基數8(八進制)中爲555。 如果您需要八進制1777,請在代碼中使用01777。

相關問題