- 背景:
有時候需要在linux上從其他人的目錄里copy文件過來。
最近遇上的事情很麻煩,就是copy的時候發現很多文件copy不過來,copy一個文件夾時,當前文件把權限修改了,結果子目錄的中的還沒有自動繼承過來,導致子目錄中的文件copy不過來。
- 原因
umask的默認值改變了
- umask 簡介
umask命令設定創建文件的缺省模式。對應每一類用戶(文件屬主、同組用戶、其他用戶)存在一個相應的u m a s k值中的數字。對於文件來說,這一數字的最大值分別是6。系統不允許你在創建一個文本文件時就賦予它執行權限,必須在創建后用c h m o d命令增加這一權限。目錄則允許設置執行權限,這樣針對目錄來說, u m a s k中各個數字最大可以到7。
- umask 計算
umask跟chmod命令正好相反,所以我們只要記住u m a s k是從權限中“拿走”相應的位即可。
例如,對於u m a s k值0 0 2,相應的文件和目錄缺省創建權限是什么呢?
第一步,我們首先寫下具有全部權限的模式,即7 7 7 (所有用戶都具有讀、寫和執行權限)。
第二步,在下面一行按照u m a s k值寫下相應的位,在本例中是0 0 2。
第三步,在接下來的一行中記下上面兩行中沒有匹配的位。這就是目錄的缺省創建權限。
稍加練習就能夠記住這種方法。
第四步,對於文件來說,在創建時不能具有執行權限,只要拿掉相應的執行權限比特即
可。
這就是上面的例子,其中u m a s k值為0 0 2:
1) 文件的最大權限rwx rwx rwx (777)
2) umask值為0 0 2 - - - - - - -w-
3) 目錄權限rwx rwx r-x (775) 這就是目錄創建缺省權限
4) 文件權限rw- rw- r-- (664) 這就是文件創建缺省權限
其實就用最大權限減掉umask值即可,如文件的最大權限是666,那么umask 值為002的文件默認權限是666-002 =664。 目錄的最大權限是777,那么umask值為002的目錄的默認權限是777-002=775
- umask 修改
最初登錄時,umask確定了用戶創建文件的缺省模式。
登錄之后可以使用umask命令查看當前的umask值,也使用umask命令改變文件創建的缺省模式。如
m0145216@c408eag:~> umask 0027 m0145216@c408eag:~> umask 0022 m0145216@c408eag:~> umask 0022 m0145216@c408eag:~>
按照以上方式改變的umask值在shell退出之前或者使用新的umask命令之前一直有效,如果想永久改變umask值,需要修改自己$ H O M E目錄下的. p r o f i l e或. b a s h _ p r o f i l e文件中,如:
m0145216@c408eag:~> umask 0027 m0145216@c408eag:~> vim .bash_profile m0145216@c408eag:~> cat .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH umask 022 m0145216@c408eag:~> source .bash_profile m0145216@c408eag:~> umask 0022
即使重新打開一個新的終端,umask值依然是0022.
- 參考文獻:
http://blog.csdn.net/gxh9314/article/details/3441983
https://www.cnblogs.com/wish123/p/7073114.html
