說說Linux文件權限那些事兒
- 文件全部權
- 顯示文件的全部權
- 更改文件的全部權
- 文件的權限
- 改動文件的權限
- 用符號表示法改動
- 用數字表示法改動
- 使用umask指定默認的文件權限
- 改動文件的權限
- 參考文獻
首先我們要知道Linux的標準文件權限和安全機制與Unix的一致。因此要學習這方面的知識,我們能夠參考一下Unix方面的書籍。
文件全部權
在Linux系統中。一切都是文件。
因此文件既包括普通文件也包括文件夾,下文也就不再區分文件和文件夾了。
說到Linux文件權限(permission),我們不得不先說說文件的全部權問題。
在Linux系統中,文件有兩個全部者:用戶全部者(u)和組全部者(g)。文件的組全部者獨立於擁有該文件的用戶。也就是說
大多數情況下。文件全部者所在的用戶組就是文件的組全部者,但這不是必須的。文件的用戶全部者不一定屬於文件的組全部者。這兩者之間沒有什麽必定的聯系。所以假設你賦予文件的組全部者某個權限,並不會同一時候賦予給用戶全部者。假設想要實現此功能,最佳的方法就是將用戶全部者加入到組全部者的成員中。
顯示文件的全部權
使用ls -l
能夠顯示文件的用戶和組全部者:
$ ls -l
drwxr-xr-x 5 sun family 4096 Mar 4 11:33 dir2
drwxr-xr-x 3 sun family 4096 Mar 4 11:40 dir3
-rw-r--r-- 1 sun family 711 Mar 4 11:21 exp
-rwxr-xr-x 1 sun family 5189 Mar 5 08:20 feb
更改文件的全部權
假設要更改文件到的全部權。能夠使用chown
和chgrp
命令。chown(大多數情況下。僅僅能使用root用戶使用)能夠更改一個或多個文件的用戶全部者:
# chown sun hello.c
chgrp則能夠用來改動文件或文件夾屬於的用戶組。
文件的權限
Linux對於文件的權限設置事實上是非常好理解的。擁有r
權限,便能夠讀取文件。查看文件的內容;擁有w
權限,便能夠更改文件的內容;擁有x
權限,並且該文件是二進制可運行文件那麽就能夠運行該文件。
可是對於文件夾的話,就沒有那麽好理解了。假設用戶擁有某文件夾的運行(x
)權限,那麽他就能夠cd到該文件夾;假設要列出該文件夾下的文件(也就是使用ls
命令)。那麽就必須要有對文件夾的讀(r
)權限。假設您僅僅須要訪問該文件夾。那麽您僅僅須要對該文件夾有x
權限就夠了。有一點須要強調的是,假設你使用ls -l
?--------- ? ? ? ? ? hello.c
?--------- ? ? ? ? ? deb.txt
?--------- ? ? ? ? ? strip.c
你會發現結果中僅僅顯示了文件的名字。其它信息基本都是?
。事實上這是由於文件的大小等信息須要從磁盤信息中才幹推斷出來,因此必須具有對文件夾的運行(x
)權限,才幹使-l
選項真正發揮效果。
另外另一點須要註意,刪除文件不須要對文件具有寫入(w
)權限,僅僅須要對該文件夾具有寫入(w
)權限就可以。可是在這樣的情況下,系統會提示你是否要覆蓋對文件的寫保護設置。
改動文件的權限
要改動文件的權限,能夠使用chmod命令,註意不要與chown(改動文件的全部者)混淆。
事實上我們能夠這樣區分:chown事實上是“change owner”(改變主人)的簡寫。而chmod事實上是“change mode”
(改變(訪問)模式)的簡寫。
用符號表示法改動
要加入(使用“+”)用戶全部者的寫權限能夠這樣:
$ chmod u+w hello.c
要剝奪(使用“-”)組全部者的讀權限能夠這樣:
$ chmod g-r hello.c
要設置用戶全部者具有特定的權限能夠使用“=”:
$ chmod u=rw hello.c
PS:須要說明的是,這裏u代表用戶全部者。g代表組全部者,o代表其它用戶,a代表全部用戶。
用數字表示法改動
在使用之前我們須要先理解一下數字表示法的原理。在數字表示法中,依據每種權限是否被許可,將其設置為0或1。並將得到的三位二進制數轉換為八進制數。
將這三個八進制數組合在一起便是該文件權限的數字表示。當中r相應的權值為4,w相應的權值為2,x相應的權值為1.
用戶 | 組 | 其它 | |
權限 | r w x | r - x | r - - |
二進制 | 1 1 1 | 1 0 1 | 1 0 0 |
八進制 | 7 | 5 | 4 |
數字表示法 | 754 | ||
看完這個表格我想你應該大致明確了,數字表示法的基本原理。以下讓我們具體操作一下:
$ chmod 754 hello.c
數字表示法和符號表示法各有優劣,前者使用起來更加簡潔,運行一條命令就能夠完畢我們想要的結果。缺點是這樣的表示法不直觀令人費解;而後者非常直白。通俗易懂,可是運行起來效率不高,往往須要運行幾條命令才幹達到我們要的結果(假設你想要的結果復雜的話)。
使用umask指定默認的文件權限
講完數字表示法,我們不得不提一下Linux文件管理中的一個重要的命令——umask命令。
依據維基百科上的說法。umask是一串二進制碼,使文件創建時權限具有一個初始值。當中曾這樣做比喻,mask碼就相當於一個最後的過濾器,每當文件創建時就剝除文件相應的權限。每當你創建了一個文件,系統會依據umask碼自己主動為你設置文件的權限。
當某個權限的二進制值為1時表示禁止該權限。舉個樣例來說,假如umask碼為0022,在這裏僅僅有後三位022是我們所須要的。第一位是為特殊權限設置,我們暫不討論。
當你創建文件夾exa時,系統中便會這樣計算該文件夾的權限:777-022=755。對於文件來說,這一數字的最大值各自是6。系統不同意你在創建一個文本文件時就賦予它運行權限,必須在創建後用chmod命令添加這一權限。文件夾則同意設置運行權限。這樣針對文件夾來 說。umask中各個數字最大能夠到7。
$ umask
0022
$ mkdir example
$ ls -ld example/
drwxr-xr-x 2 2014012537 xg+jsj14 4096 Mar 12 12:02 example/
參考文獻
- Robert Love.Linux系統編程。2014,5.人民郵電出版社
- Scott Grannerman.Linux命令速查手冊,2009.10.人民郵電出版社
- Aeleen Friscb.Unix與Linux系統管理,2006.11.清華大學出版社
- 維基百科-umask.https://en.wikipedia.org/wiki/Umask
uid=1919063545">umask命令的作用
本作品採用知識共享署名-非商業性使用-同樣方式共享 4.0 國際許可協議進行許可。
說說Linux文件權限那些事兒