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