1. 程式人生 > >說說Linux文件權限那些事兒

說說Linux文件權限那些事兒

article 推斷 class chown miss 系統 linu pen ons

  • 文件全部權
    • 顯示文件的全部權
    • 更改文件的全部權
  • 文件的權限
    • 改動文件的權限
      • 用符號表示法改動
      • 用數字表示法改動
    • 使用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

更改文件的全部權

假設要更改文件到的全部權。能夠使用chownchgrp命令。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/

參考文獻

  1. Robert Love.Linux系統編程。2014,5.人民郵電出版社
  2. Scott Grannerman.Linux命令速查手冊,2009.10.人民郵電出版社
  3. Aeleen Friscb.Unix與Linux系統管理,2006.11.清華大學出版社
  4. 維基百科-umask.https://en.wikipedia.org/wiki/Umask
  5. uid=1919063545">umask命令的作用

技術分享
本作品採用知識共享署名-非商業性使用-同樣方式共享 4.0 國際許可協議進行許可。

說說Linux文件權限那些事兒