linux文件權限解說

我們進入一個目錄, 執行ls -l會顯示該目錄下所有檔案(這裏用"檔案"這個詞, 代表文件和文件夾)的詳細信息.

如下圖:



一共有7列信息, 分別爲: [權限], [連結數], [擁有者], [羣組], [大小], [最後修改時間], [名字].

此篇僅對[權限], [擁有者], [羣組]進行一下詳細介紹.


由於Linux是個多用戶多任務的系統,因此可能常常會有多人同時使用這部主機來進行工作的情況發生, 爲了考慮每個人的隱私權以及每個人喜好的工作環境,因此角色的概念非常重要. 這裏有3個概念.

1)檔案擁有者(user): 創建檔案的人.

2)羣組(group): 檔案所屬的羣組.

3)其他(others): user和group之外的其它用戶.


看一下[權限]這一列, 一共有10位, 可以分爲4段.

第1位代表文件的類型, ' - ' 代表這是個常規文件, ' d ' 代表這是個文件夾. ( 還有其它一些不常見的如'  l ' , ' c ' , ' b ' , ' p ' , ' s ' 等, 在此暫不做解釋. )

2~4這三位代表user的read / write / execute權限.

5~7這三位代表group的read / write / execute權限.

8~10這三位代表others的read / write / execute權限.

如果可讀/ 寫 / 執行, 則用字母r / w / x 表示, 如果不可讀 / 寫 / 執行, 則用 - 來表示.


read / write / execute 解釋如下(摘錄於百度文庫):

對於文件:(以下對文件權限的測試是在上層目錄權限爲777的情況下完成的) 
可讀:表示可以讀取複製文件的內容
可寫:表示可以修改文件的內容
可執行:表示可以用其他解析程序對文件進行執行操作
僅可讀:只有可讀權限則只能讀取文件內容和複製該文件,不可改寫文件內容,此時該文件的刪除移動權限由上層目錄權限決定,如果其上層目錄擁有刪除移動的權限,可以對其進行刪除移動操作。
僅可寫:如果只有可寫權限而無可讀執行權限,既不能讀取和改寫該文件內容,也不能執行文件,且不可複製文件,此時該文件的刪除移動權限由上層目錄權限決定。
僅可執行:只有可執行權限時不可讀取和改寫該文件內容,也不可複製該文件,好像也並不能作爲腳本執行,此時該文件的刪除移動權限由上層目錄權限決定。
所以,通常要對文件具有寫權限,需要同時具有可讀和可寫,要對文件具有執行權限,需要同時具有可讀和可執行。


對於目錄:(以下對目錄權限的測試是在所涉及文件權限爲777的情況下完成的) 
可讀:表示可以列出目錄本身和目錄下面的文件和子目錄的屬性,僅查看屬性(ls) 
可寫:表示可以往目錄中添加刪除文件和目錄
可執行:可以進入該目錄, 可以讀取該目錄下面的文件內容或者改寫文件內容(在文件權限允許的情況下)
僅可讀:目錄的讀權限僅允許我們讀目錄,獲得在該目錄中所有文件名的列表,不可添加刪除其中的文件或目錄,也不可讀取和改寫其中文件的內容。
僅可寫:如果只有寫權限,仍然無法往目錄中添加刪除或修改文件和子目錄,包括複製和移動。要修改目錄中的文件內容,不僅僅需要目錄的寫權限,還需要目錄的執行權限。
僅可執行:對目錄沒有讀寫權限,只有執行權限,一樣可以讀取和改寫目錄下面文件的內容(只要你確定該路徑下的該文件存在);那是否不需要目錄的可寫權限呢?當然不是,如果沒有可寫權限,無法往目錄中添加刪除或修改文件和子目錄,包括複製和移動。


可見, 這3種權限往往是搭配使用的. 比如對於目錄, 只有r權限可能沒什麼作用, 往往r和x要同時提供(沒有x就不能進入該目錄, r就幾乎沒什麼用了); 對於文件, 只有w卻沒有r往往也是沒用的, 還是不能寫, 沒法讀取文件的原內容, 又怎麼對內容進行增刪修改呢, 對吧.


上面的user, group, others給出的並不是具體的定義, 結合r / w / x 權限, 現構建個實際的模型, 看起來應該更容易理解. 如果紕漏, 還望指正.

我們假設大學同寢的4個人A,B,C,D在外面合租了一個四室一廳的房子, 那麼這個房子可以認爲是個總的上層目錄, 起名叫home吧. 四個人的房間分別爲目錄A, B, C, D. 客廳衛生間廚房等共用的空間爲目錄E. 

(1)  四個人對自己的房間有擁有權, 是這個房間的主人, 往往也有全部的權限, 所以對於房間(目錄)A, 它的屬性可能是這樣 --> drwx------ user(A) group(A, 每個用戶都至少依附於一個group, 它的主group)

(2)  四個人都是大學602寢室的兄弟, 那麼我們新建個羣組名叫dorm602, 把A,B,C,D都加到這個羣組裏, 那麼這個公共區域E的權限可能這樣 --> drwxrwx--- user(root) group(dorm602). 這樣一來, 屬於dorm602的A,B,C,D這四個人, 對於E都有讀 / 寫 / 執行的權限了.

(3)  A和B,C,D這幾個人的關係都非常好, 我的臥室你們也都可以隨便進來, 我的東西你們隨便用, 那麼好, 目錄A權限可能設置成這樣 --> drwxrwx--- user(A) group(dorm602). 

(4)  A這個人實在是個好說話的人, 他完全不需要隱私空間, 除了B,C,D, 其他外人(比如某一天B的同學來了)也可以進他的屋參觀, 但是卻不想別人動他的東西, 只可以看. 那麼目錄A的權限可以這樣設置 --> drwxrwxr-x user(A) group(dorm602). 我們看到, others的權限爲r-x, 就是說, 你可以進我屋(x), 我房間裏的東西你隨便看(r), 但是你不能動它們(w).


同樣, 關於上面提到的對於目錄要rx同時提供, 對於文件rw要同時提供的問題, 我們也用這個例子看一下.

(5)  現在A對B,C,D說, 你看咱們關係這麼好, 我屋的東西你們隨便看隨便用哦, 但是不能進我的屋子. 那麼權限被A設置成這樣 -->  drwxrw---- user(A) group(dorm602). 於是貌似大方, 其實就剩調侃了, 不給x權限, 有rw有神馬用嘛... 好, 既然不讓我進, 那我就在門口瞅瞅吧, 於是B試着在home目錄執行ls -l A/, 如果A的屋裏有個目錄aaa, 有個文件bbb, 那麼你大概能得到這樣的結果: 

d?????????  ?  ?  ?  ?  ?  aaa

 -?????????  ?  ?  ?  ?  ?  bbb

很合理是不是? 即使你有r的權限, 進不去屋, 在外面"遠觀"你大概也就能看清裏面有什麼東西了, 東西的具體情況, 真的瞭解不到了.

(6)  如果是這樣呢 --> drwx--x--- user(A) group(dorm602). 那就相當於說, 我屋你們可以進, 但是得把你們眼睛蒙上. OK, 屋是能進了, 但是裏面有什麼你完全不知道, 你想去動一下屋子裏的東西, 都是不可能的. 於是cd A, 真的進到了A目錄, 但是你要是ls一下, 不好意思了, 系統提示你沒有權限嘍.

(7)  有的時候我們在一個目錄裏新建個文件, 卻提示沒有權限, 這是怎麼回事呀. 這就好比B的一個東西想放在A的房間裏, 爲了達到這樣目的, 目錄A的權限可以這樣 -->drwx-wx--- user(A) group(dorm602). 現在B的一個文件ccc就可以放到A的房間裏了, 注意目錄A的group權限的r不是必須的, wx卻是缺一不可的.

(8)  可以看出上面大部分都在拿目錄舉例, 因爲對於文件的讀寫執行權限的概念我們應該比較好接受. 說一下上面提的rw的問題吧. 對於文件, 只有w權限往往沒有用, 還是沒法寫, r往往也需要帶着. 比如A的房間裏有個文件computer, A把這個文件的權限設置爲了-->d-wx------ user(A) group(A). 如果有一天A覺得自己電腦的CPU性能太差了, 想給自己電腦換個新CPU, 當然, 他有這個操作權力(有w嘛), 可是沒有r啊, 於是A只能閉着眼睛把新的CPU組裝到電腦上, 顯然, 這次w操作, 不會成功的, 沒r權限, 他可能連電腦蓋子都打不開, 梅超風那種閉着眼睛打架還那麼厲害的, 只能存在於武俠小說裏是吧^ ^ . 當然, 聊以自慰的, 由於有x權限, A平時還是可以開機玩玩電腦的, 雖然比較慢.

例子就舉到這裏吧, 現在關於rwx和user, group, others應該有些具體的印象感了吧!


對這些讀寫權限, user, group神馬的有了瞭解, 文章的目的也就達到了, 最後附上設定權限的命令

一.  chgrp: 改變檔案所屬羣組.   命令格式爲: chgrp groupname filename. 當然, 羣組名需要存在.

二.  chown: 改變檔案擁有者.     命令格式爲: chown username filename. 同理, 用戶名也需要存在.

其實chown包含chgrp的功能, 使用起來非常靈活:

chown username filename                          //只設定user

chown username:groupname filename    //user & group同時設定

chown :groupname filename                       //只設定group.

另外' : ' 可以用 ' . ' 來代替, 用法也完全一樣, 只是如果username和groupname裏本身就含有' . ' 這個字符的話, 可能就容易混淆了, 所以還是推薦用 ' : ' 

三.  chmod: 更改r / w / x 權限

更改r / w / x 有兩種方式, 一種是數字, 一種是符號. r , w, x 的權值分別爲4, 2, 1, 於是權限表我們就可以用三個數字來表示, 比如rwx------ 爲700,  rwx---r-- 爲704, -wx--xrwx爲317.

這樣一來chmod的用法也就可以分別兩種了, 這個命令用法很靈活, 直接舉例作爲總結了.

數字:

寫法簡單, 缺點是不直觀, 且進行局部設定時不方便.

chmod 777 filename

字母:

這個用法就非常靈活了, 其中u, g, o, a分別代表user, group, others, all.

chmod u=rwx,go=rx filename

chmod u=wx filename

chmod g+x filename

chmod a+w filename

chmod +w filename

發佈了25 篇原創文章 · 獲贊 6 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章