同樣,用戶對文件的權限分為了讀、寫、執行三種,其中文件和文件夾對於這三種理解不同,重點的是所謂權限,其實是對內容操作的權限,而不是文件自身。
文件夾嵌套的情況下,權限如何發揮作用?
1. 用戶和文件有什么關系
1.1 用戶和文件之間的關系
張三創建了某個文件,如 touch 111.txt,那么張三就是這個文件的所有者,對這個文件來說,馬雲就是其他人。
用ll命令列出某目錄下的文件如下
-rw-r--r-- 1 root root 0 Aug 17 10:19 111.txt -rw-r--r-- 1 root root 0 Aug 17 10:19 222.txt drwxr-xr-x 2 root root 4096 Aug 17 10:19 test
可見,root是文件111.txt和222.txt的所有者,對它的權限rw-就是讀寫權限。如果是馬雲,那就是r--,就是只讀,不能寫和執行。
1.2.讀、寫、執行對文件和文件夾分別意味着什么?
初學的時候,望文生義,很容易搞不清楚讀、寫、執行是對什么起作用。
比如,文件夾test里面有文件111.txt,在文件夾test上權限給滿,111.txt設置為只讀,那普通用戶還能刪掉這個文件嗎?
一實驗,發現可以刪掉,怎么111.txt設置為只讀文件,普通用戶也可以刪掉它?一頭霧水。
首先要清楚的是,用戶root是超級管理員,不受這些限制。
其次要理解,這些權限是對其內容而言的設置。
用戶馬雲,在111.txt身上算是其他人,如果沒有讀權限,則打不開111.txt,就是cat 111.txt會出現權限拒絕。如果沒有寫權限,則不能編輯111.txt(但是用vi有點問題,系統bug,111.txt有內容,馬雲沒權限寫,結果一樣可以打開,但是打開的是無內容的顯示,然后馬雲可以鍵入新的文本,強制保存,原來111.txt內容會被覆蓋了),如果沒有執行權限,則不能執行。
用戶馬雲,在文件夾test上算是其他人,如果沒有讀權限,則用ls列出目錄中有哪些文件時會被禁止,沒有寫權限,則不能在文件夾中創建和刪除文件,只能改一改現有的文件,沒有執行權限,則不能進入該目錄。
111.txt算是文件夾test的內容,可以刪掉是因為文件夾test的權限給滿了,而不看111.txt自身的權限。111.txt自身的權限設置,管理的是它里面的內容的權限。
文件 | 文件夾 | |||
r | 4 | 讀 | 查看文件內容 cat/more/head/tail/less |
列出目錄中的內容 ls/ |
w | 2 | 寫 | 修改文件內容 vim |
在目錄中創建、刪除文件 touch/mkdir/rmdir/rm |
x | 1 | 執行 | 執行文件 (腳本或命令) |
可以進入目錄 cd |
父目錄權限和子目錄權限的影響是怎么樣的?
假設某文件夾路徑是這樣的:
/ study / english / 111.txt
用戶馬雲對於這些文件都是其他人的身份。
問,當文件夾 study 對馬雲的權限只讀,文件夾 english 對馬雲的權限是讀寫執行,文件 111.txt 對馬雲的權限是讀寫執行,那么馬雲可以查看111.txt的內容嗎?
答:不可以,權限要從最外層的文件夾開始進入,因為study不具備執行權限,進入不了,雖然english和111.txt有權限,也查看不了。
如果把study改為只有執行權限,沒有讀權限呢?
可以看到,進入study可以,列出study下內容就不行
但是查看文件夾english和文件111.txt都是正常的。
在文件夾study下新建文件不行,但是在english下新建文件可以。
也就是說,文件夾的權限並不具有繼承性,當我在文件夾english下新建文件時,沒有因為父級文件夾沒有權限而不能操作。
父級文件夾只要有x權限,那么子級文件夾就不受父級文件夾的影響了。父級文件夾沒有x權限,其下的文件和文件夾在操作時會受到影響。
有點類似大院子嵌套小院子,大院子沒有x權限(沒有鑰匙),就進入不了大院子,那你們的小院子,你有鑰匙也沒有用。
這時study沒有了執行權限,進不了study目錄,則執行新建文件如下:
可以看出,沒有執行權限的文件夾,其下的文件夾和文件在操作時受到了影響。
1.3.怎么更改文件和文件夾的權限
1.首先要問哪些用戶能更改文件權限?
答:超級管理員和文件所有者可以修改,其他人修改不了。
2.怎么修改?
答:
命令名稱:chmod
命令英文原意:change the permissions mode of a file
命令所在路徑:/bin/chmod
執行權限:所有用戶
選項:-R遞歸修改
功能描述:改變文件或目錄權限
方法1 | 方法2 |
chmod [{ugoa}{+-=}{rwx}][文件或目錄] | chmod [mode=421][文件或目錄] |
這種方法是直接修改文件的某些用戶的權限位,不用管其他用戶的情況。 u代表所有者、g代表所屬組,o代表其他人,a代表全部。 |
讀權限是4 寫權限是2 執行權限是1 其實就是二進制位置不同。 rwx,r是二進制100,w是二進制10,x是二進制1。 |
chmod u+x English.zip 把文件English.zip的所有者權限中加上執行權限。
chmod g+r,o-r English.zip
chmod g=rx English.zip 不管文件所屬組以前是什么權限,現在就是設置為rx |
chmod 755 English.zip 7就是111,就是rwx都有了,同樣,5就是讀和執行的權限,這句話就是設置文件English.zip所有者是讀寫執行權限,所屬組和其他人是讀和執行的權限。
|
選項:-R遞歸修改 新建文件夾時,-p是遞歸依次創建,而修改文件或文件夾權限時,如果要修改目錄下的子目錄和文件權限同時修改,要用-R chmod -R 777 /tmp/a/ 把/tmp/a/及其所有子目錄和文件的權限都改為777
|
1.4.怎么更改文件的所有者和所屬組,chown和chgrp
命令名稱:chown
命令英文原意:change file ownership
命令所在路徑:/bin/chown
執行權限:root
語法:chown 【選項】【新主人的用戶名】【文件或目錄】
功能描述:改變文件或目錄的所有者,選項 -R 可以遞歸修改文件夾下所有子目錄和文件
范例:$ chown mayun 111.txt (把文件111.txt的所有者改為mayun)
首先,改變文件的讀寫執行權限的時候,root和文件所有者都可以操作。但是改變文件所有者的時候,只有root可以操作,如下圖。
當然,把文件換新主人,那新主人的用戶名不能輸入錯。
改變文件所有者后,所屬組還是root哦!
那怎么改變所屬組呢?和改變文件所有者類似,只是把chown換成chgrp
命令名稱:chgrp
命令英文原意:change file group ownership
命令所在路徑:/bin/chgrp
執行權限:所有用戶
語法:chgrp【新的用戶組】【文件或目錄】
功能描述:改變文件或目錄的所屬組
范例:$ chgrp mayun 111.txt 改變文件111.txt的所屬組為mayun
現在又有個問題,沒設置之前文件的所有者和所屬組是誰?
答:文件的所有者很簡單,誰創建了這個文件,文件的所有者就是誰!
那文件的所屬組是誰?就是文件所有者的主要組。
1.5.新建的文件夾和文件默認什么權限?(不常用)
我們新建一個文件222.txt,新建一個文件夾dir2,看看系統給他們的默認權限是什么?
從哪里知道新建文件夾的權限是rwxr-xr-x呢?
答曰:umask命令就是干這事的,它就是查看新建文件夾和新建文件的默認權限。
看到了文件夾默認權限情況,文件的默認權限比文件夾少個x ,防止被攻擊。
命令名稱:umask
命令英文原意:the user file-creation mask
命令所在路徑:Shell內置命令
執行權限:所有用戶
語法:umask [-S]
-S 以rwx形式顯示新建文件默認權限
功能描述:顯示、設置文件的默認權限
范例:$ umask -S
如上圖,root和普通用戶得到的默認權限還不一樣。
用root用戶,新建文件夾時默認權限為755,文件權限默認644,能否更改為默認新建文件夾為700,默認新建文件權限600呢?
答曰:可以,與rwxrwxrwx異或算法得出權限碼,然后umask 權限碼即可。
rwx rwx rwx 為777
與什么異或能得到700 (rwx------)?
得到結果---rwxrwx,也就是077
因此,只要umask 077即可得到想要的結果。
umask 077后,新建的文件夾dir3權限就是rwx------,新建的文件就是去掉可執行權限后的效果。
也就是說,umask的參數和得到的結果都是補碼,不是直接的權限碼