八、文件權限和目錄權限chmod;更改所有者和所屬組chown;umask;隱藏權限
(一)文件權限和目錄權限chmod
為了方便更改文件的權限,Linux使用數字代替rwx,具體規則:r=4,w=2,x=1,-=0。例如rwxrwx---用數字表示就是770,其具體算法為:rwx=4+2+1=7,rwx=4+2+1=7,---+0+0+0=0。
r:可讀
w:可寫
x:可執行
-:不可操作
-rw-r--r--. 1 root root 0 1月 30 19:10 1.txt
除第一列的-顯示文件類型外,後面的九位,
分成三段:rw-,r--,r--,和文件的所有者和所屬組有關系,
一個文件有三個權限位,
第一段代表文件所有者的權限,
第二段代表文件所屬組的權限,
第三段代表文件其他用戶的權限。
最後一個“.”,有這個點意味著這個文件受制於SELinux,若SELinux開啟了,創建的文件的最後一位就會有這個點。
第一個root代表所有者,第二個root代表所屬組。
例如:rw-r--r--=644
chmod命令(change mode):用於改變用戶對文件/目錄的讀寫執行文件權限。
格式為:chmod [-R] xyz文件名(此處xyz表示數字)
舉例:chmod 700 1.txt
舉例:chmod u=rwx,g=r,o=r dir3 //完整寫法。u(user)g(group)o(other),不可以加減號。
舉例:chmod a+(-)x dir3 //給該目錄全部權限增加(減少)x的權限;或者u+x,g+x,o+x都可以。
其中,-R選項的作用等同於chown命令的-R選項,這個-R選項只適用於目錄,作用是級聯更改,即不僅更改當前目錄,連目錄裏的目錄或者文件也全部更改。
(二)更改所有者和所屬組chown
chown命令(change owner):可以更改文件的所有者。
格式為:chown [-R] 賬戶名 文件名或者chown [-R] 賬戶名:組名 文件名。
示例命令:
# mkdir dir3
# useradd user1 //創建用戶user1
# touch dir3/test3 //dir3目錄下創建test3文件
# chown user1 dir3
# ls -ld dir3 //dir3目錄所有者已經由root改為user1
drwxr-xr-x. 2 user1 root 19 1月 30 18:46 dir3
增加一個組叫testgroup。
groupadd testgroup
chown -R user 1:testgroup dir3
上例中,chown -R user1:testgroup會把dir3目錄及該目錄下的文件都修改成所有者為user1,所屬組為testgroup。
chgrp命令(change group):更改文件的所屬組。
groupadd命令:增加一個用戶組。
chgrp命令用法:# chgrp user1 dir3
將後面的文件或者目錄改到前面的組。
chown命令用法:chown username:group filename。可以加上-R選項。
# chown user1:dir3 先用戶,再組,中間用冒號分開。
# chown :user1 /tmp/test3 省略用戶,直接組,將後面的文件加入到設定user1組。
(三)umask
默認情況下,目錄權限值為755,普通文件的權限值為644。
umask命令:用於改變文件的默認權限。
格式:umask xxx(xxx代表3個數字)。若要查看umask的值,輸入命令umask,再回車即可。如下:
# umask
0022
此處umask的預設值是0022,。
umask規則:
a)若用戶建立普通文件,則預設沒有可執行權限,只有r、w兩個權限,最大值為666(-rw-rw-rw-)。
b)若用戶建立目錄,則預設所有權限均開放,即777(drwxrwxrwx)。
umask值代表的含義為兩條規則中的默認值(文件為666,目錄為777)需要減掉的權限,所以:
目錄權限為rwxrwxrwx - ----w--w- =rwxr-xr-x(777-022=755)
普通文件的權限為rw-rw-rw- - ----w--w- =rw-r--r--(666-022=644)
umask數值可以自定義設置,比如設定umask為002,你在創建目錄或文件時,默認權限分別為:
目錄權限:rwxrwxrwx - -------w- = rwxrwxr-x
文件權限:rw-rw-rw- - -------w- = rw-rw-r--
示例命令:
# umask 002
# mkdir dir4
# ls -ld dir4
drwxrwxr-x. 2 root root 6 1月 30 22:08 dir4
# touch test4
# ls -l test4
-rw-rw-r--. 1 root root 0 1月 30 22:09 test4
可以看到創建的目錄的默認權限變為775,文件的默認權限變為664。
若要把umask改回來,具體操作方法如下:
# umask 022
# touch test5
# ls -l test5
-rw-r--r--. 1 root root 0 1月 30 22:12 test5
不要將計算方法換算成數字去做減法。看起來沒問題,但有時會出錯。比如當umask值為033時,文件的默認權限則為666-033=633,
但實際權限應為rw-rw-rw- - ----wx-wx=rw-r--r--=644
umask可以在/etc/bashrc裏面更改,默認情況下,root的umask值為022,而一般使用則為002。可寫權限非常重要,因此預設會去掉可寫權限。
(四)隱藏權限lsattr/chattr
1.lsattr命令(list attribute):用於讀取文件或目錄的特殊權限。
格式:lsattr [-aR] [文件/目錄名]。
-a:類似於ls -a的選項,即連同隱藏文件一同列出。
-R:連同子目錄的數據一同列出。
2.chattr命令(change attribute)
格式:chattr [+-=] [文件或目錄名],其中,+-和=分別表示增加、減少和設定。
選項:
A:增加該屬性後,表示文件或目錄的atime將不可修改。
s:增加該屬性後,會將數據同步寫入磁盤中。
a:增加該屬性後,表示只能追加不能刪除,非root用戶不能設定該屬性。
c:增加該屬性後,表示自動壓縮該文件,讀取時會自動解壓。
i:增加該屬性後,表示文件不能刪除,重命名,設定鏈接,寫入以及新增數據。
常用選項為a和i兩個選項。
隱藏權限ls看不到。
八、文件權限和目錄權限chmod;更改所有者和所屬組chown;umask;隱藏權限