umask命令操作演示
說起來umask是個很常見的命令,用在創建文件或目錄時設置權限掩碼,通常是0022:
shell> umask 0022
注:0022等價于022,0022中第一個0用于sticky-bit,本文不做討論,有興趣的請自查。
為了稍后演示的方便性,先在Windows上用7-zip創建兩個文件:
foo.zip(包括:目錄foo_dir,文件foo_file) bar.tar(包括:目錄bar_dir,文件bar_file)
當然,你可以不用Windows,我之所以這樣做,只是為了稍后抖個包袱而已。
把這兩個文件上傳到Linux上,然后讓我學著導演的口吻喊一嗓子:Action!
操作foo.zip
shell> unzip foo.zip
此時查看目錄和文件的權限,分別是:
foo_dir:755(drwxr-xr-x) foo_file:644(-rw-r–r–)
這是因為目錄的基準權限是777,文件的基準權限是666,由于umask缺省是022,所以:
目錄:777 – 022 = 755 文件:666 – 022 = 644
注:權限計算實際上是二進制位的與操作,參考All About the umask and Permissions。
操作bar.tar
shell> tar xf bar.tar
這次有點不同,我們要運行兩次tar命令。
第一次:以root身份運行tar命令,然后查看目錄和文件的權限,分別是:
bar_dir:777(drwxrwxrwx) bar_file:777(-rwxrwxrwx)
第二次:以非root身份運行tar命令,然后查看目錄和文件的權限,分別是:
bar_dir:755(drwxr-xr-x) bar_file:755(-rwxr-xr-x)
注意:每次運行tar命令前,記得刪除上次運行tar命令產生的目錄及文件,以免受影響。
兩次的結果有些差異,在man tar中能查到一些有用的描述信息:
-p, –same-permissions, –preserve-permissions extract all protection information –no-same-permissions apply user’s umask when extracting files instead of recorded permissions
使用tar命令時,對于root而言,缺省:extract all protection information,對于非root而言,缺省:apply user’s umask when extracting files instead of recorded permissions。
我們先前使用Windows創建文件,然后上傳到了Linux上,所以文件和目錄的初始權限即為777,當我們使用root身份運行tar命令時,就保留了這個權限。而當我們以非root身份運行tar命令時,雖然會應用umask,但tar有點特殊,它使用目錄和文件本身的權限作為基準權限,而不是777(目錄)和666(文件),所以最終的權限變成了755(777 – 022)。
順便再介紹一下如何方便的修改目錄或文件的權限:
shell> find /path -type d | xargs chmod 755 shell> find /path -type f | xargs chmod 644
本次補習班下課!
原文:http://huoding.com/2010/12/11/26
【編輯推薦】