Linux文件與目錄之文件權限和目錄配置

在Linux中,所有的數據都是以文件的形態展現出來的,文件的意義在Linux中至關重要,因此,在Linux中,文件有着很多的屬性與權限!

一. 用戶與用戶組

通常情況下,登錄者相對於一個文件可能有着三種角色:

1. 文件所有者

即這個文件是你的,你所擁有的。通常情況下這個文件是你的私密信息,比如你的情書什麼的,畢竟你不想讓別人看到,如果你是這個文件的文件所有者,那麼你就可以將這個文件設定爲文件所有者可訪問、可修改(不包含刪除,後文將說明)。

2. 用戶組

文件除了擁有文件所有者這個屬性,還有一個屬性就是用戶組。所謂用戶組,通常用於團隊開發的情況,你和你團隊的人員應該屬於一個用戶組,一個或多個用戶 組成一個用戶組,假設在這臺機器上同時工作者兩個團隊A、B,那麼A團隊的文件就應該設置爲用戶組可訪問、可修改,用戶組的其他人不可訪問、不可修改。

相對於文件所有者這種親密的關係,用戶組的限制則比較寬泛,通常用戶組的權限比文件所有者的權限要小一些。

當然,在上面的團隊模式下,你也可以將一些私人文件設置成用戶組不可見、不可修改,這樣即使與你在同一個用戶組的成員也不會看到它們。

3. 其他人概念

所謂其他人,就是對於這臺機器,我可以有自己的用戶,但是相對於這個文件我既不是文件所有者也不是文件制定用戶組的成員,那麼我相對於這個文件就是其他人!與上面兩個文件屬性一樣,Linux中的文件擁有其他人權限這個屬性,我們可以爲文件設置其他人的文件權限。

二. 文件權限查看

在Linux中,文件權限是一種文件屬性,我們可以通過ls -al命令查看一個文件的部分重要屬性,如下圖所示:


如上圖所示,(ls值得是list,al表示列出所有文件的權限與屬性,包括隱藏文件,隱藏文件的文件名都是以.開頭)首先我們可以把上面的list分成7列來看:

1. 第一列展示了文件的類型與權限,例如第一行的d rwx r-x r-x,這一串字符長度是10,我們分爲四組來看,第一組就是第一個字符,它代表了這個文件的類型,文件類型主要有以下幾種:

【-】:表示是一個文件

【d】:表示是一個目錄

【l】:表示是一個連接文件(相當於windows中的快捷方式)

【b】:設備文件中可供存儲的設備接口

【c】:設備文件中的串行端口設備,如鍵盤、鼠標(一次性讀取設備)

第二組是第2個字符到第四個字符,他表示了文件所有者的權限;

第三組是第5個字符到第7個字符,它表示了文件的文件組的權限;

第四組是第8個字符到第10個字符,它表示了文件的其他人的權限;

那麼如何通過三個字母來判斷權限呢,首先,第一個字母表示了是否可讀,如果是【r】,則代表可讀,如果是【-】,則表示不可讀,如果是一個目錄,則表示是否可以看到這個目錄的文件列表,請注意,可讀目錄並不代表你真的可以看到目錄中的文件!第二個字母代表了文件是否可寫,即可修改,如果是【w】,表示可以修改,如果是【-】,則表示不可修改,這裏的可修改不包括刪除操作!;第三個字母代表了是否可以執行這個文件,如果是【x】,表示可以執行,如果是【-】,表示不可以執行,請注意,在Linux中,一個文件是否可執行不可以向windows一樣根據文件擴展名進行判斷,在windows中,可執行文件通常其擴展名是.com、exe、.bat等,但是在Linux中,要判斷一個文件是否可執行,只能同過可執行權限進行判斷!還有一點,對於目錄,可執行權限代表是否可以以此目錄作爲工作目錄,所謂工作目錄,就是你可以cd進行的。

2. 第二列表示的是有多少文件名鏈接到此節點。Linux中的目錄樹是通過文件名記錄的,每個文件名都會對應系統中的一個i-node,而這一列就是記錄了連接在相同i-node上的文件的文件數量。

3. 第三列表示的是文件所有者是誰,如圖所示,上面的文件所有這均是jason用戶。

4. 第四列表示的是文件的所屬用戶組名,如上圖所示,文件的用戶組是jason用戶組。

5. 第五列記錄了文件的大小,默認單位是B。

6. 第六列記錄了文件最後被修改的時間。

7. 最後一列則記錄着文件名。

三. 改變文件權限

改變文件的權限使用的命令是如下三個:

【chgrp】:改變文件所屬用戶組;

【chown】:改變文件的文件所有者;

【chmod】:改變文件的權限;

1. chgrp:即時change group英文的縮寫,其語法格式如下:

chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...

其中常用的option是-r,表示的是遞歸的連續修改,即聯通子目錄下的所有文件所有目錄都進行更新(下文將不再解釋嘍),如果你輸入的用戶組並不存在,系統將提示你invalid group;

2. chown:更改文件的文件所有者,其語法格式與chgrp相似:

chown [OPTION]... [OWNER][:[GROUP]] FILE...

 chown [OPTION]... --reference=RFILE FILE...

我們舉個例子:


可以看到,首先我的根目錄下有一個test的文本文件,它的所有者是jason,然後我使用該命令將它的所有者變成root!如果制定用戶不存在,那麼將提示錯誤!

注意:使用chown也可以進行修改文件的所屬用於組,命令爲: chown owner.group filename或者chown owner:group filename,如果是單純的修改用戶組,也可以

chown .group filename。

3. chmod修改權限,使用chmod修改文件權限的時候有兩種方式分別是使用數字方式和使用符號類型方式。

3.1. 數字修改:

在rwx權限中,其排列順序是不變的,我們規定三位分別擁有不同的權重,其中【r】:4     【w】:2    【x】: 1,這樣規定的話,不管如何組合,每種組合的權重之和都是不同的,因此我們就可以根據權重之和來判斷相應 的權限了,舉個例子:

如果一個文件的權限是 【-】【r】【w】【x】【r】【-】【w】【r】【-】【-】,那麼,轉換成數字表示的話, 文件的所有者權限就是7,文件的用戶組權限就是5,其他人權限就是4,合起來文件的權限就是754,這個時 候,chmod的語法格式如下:

chmod     【-R】     【r】+【w】+【x】     filename

舉個例子:


文件原來的權限是664,通過數字修改後變成了775.

3.2. 符號類型修改文件權限

我們知道,對於與一個文件,用戶可以有三種身份,分別是owner、group、others,我們規定可以使用u、g、o 分別代表這三個身份,同時使用r、w、x、代表三種不同的權限,我們使用 身份  連接符  權限  來設置不同身份 的不同權限,其中,連接符有三種:

【=】:指的是將該身份 直接設置成 該權限,不管你以前是什麼權限;

【+】:指的是爲該身份添加該權限,其他權限保持不變;

【-】:指的是除去該身份的該權限

設置多個身份的權限可以使用“,”分割,其語法格式如下:

chmod     【u/g/o/a】 【+/-/=】 【r/w/x】,【u/g/o/a】 【+/-/=】 【r/w/x】,...

舉個例子:


如圖所示,文件test最初的權限是r--  r-x  r-x,然後我們爲owner添加了wx權限,爲group和others除去了執行權限x。

注意:【a】身份值得是所有人。

四. 文件權限的意義

三種權限對於文件有着重要的且不同的意義,具體如下:

【r】:是否可讀。

對於文件指的是是否可以讀取文件的實際內容,如讀取文本文件的文字內容等。

對於目錄,是否具有讀取目錄結構列表的權限,即查詢目錄下文件名列表。

【w】:

對於文件,是否可寫,其權限有可編輯、新增、修改文件的內容,但是不可以刪除。

對於目錄,其權限比較大,它包含:

可以新建文件或目錄;

可以刪除已經存在的文件或目錄(不管你相對於這個文件的權限是什麼)

· 將已經存在的文件或者目錄進行重命名

修改其中的文件或目錄的位置

總的來說,目錄的w權限與這個目錄下的文件名額度變動有關。

【x】:

對於文件,判斷這個文件是否可以被執行,文件的是否可被執行與擴展名沒有關係!

對於目錄,就是是否可以將這個目錄作爲工作目錄。

有幾個需要注意的地方,我們舉兩個例子來說明一下:

1. 假如現在的登錄用戶是jason,那麼他的工作目錄/home/jason的權限就應該是700,如果此時該目錄下有一個文件A他的權限是700,但是文件的所有者和用戶組都是root。

這種情況下,首先相對於文件來說,用戶jason是不可讀、不可編輯、不可執行的,但是,由於文件的父目錄對於jason來說權限充足,擁有完整的權限,因此他可以對文件進行刪除、移動等操作!

2. 如果對於一個目錄,你的權限是可讀不可執行,但是目錄裏面有一個文件,你沒有任何權限,那麼當你嘗試用ls -l訪問目錄的結構的時候,會出現什麼情況呢?

這種情況下,由於你對於這個文件是沒有任何權限的,理論上你是不可讀、不可寫、不可執行,但是對於目錄,你僅僅擁有讀取的權利,目錄的權限優於文件的權限,因此你可以查看目錄結構(注意,請記住,目錄結構只包含目錄內目錄和文件的名稱列表),因此,你依然可以看到這個文件名,但是你對於目錄不具備x權限,因此文件的所有屬性將被顯示成?,同時,你無法cd到這個目錄下!

五. Linux目錄標準配置

FHS(FileSystem Hierarchy Standard)的重點在於規範Linux下每個特定目錄下應該放置什麼樣子的數據!

FHS 根據 文件系統的使用頻繁程度 和 是否允許用戶隨意改動,將目錄頂已成爲四種交互作用的形態:

1. 可分享的、不可變的:/usr(軟件放置處)、/opt(第三方軟件)

2. 可分享的、可變動的:/var/mail(用戶郵件信箱)、/var/spool/news(新聞組)

3. 不可分享的、不可變的:/etc(配置文件)、/boot(開機和內核文件)

4. 不可分享的、可變動的:/var/run(程序相關)、/var/lock(程序相關)

根目錄:

在Linux系統的目錄樹中,最重要的三個目錄分別是“/”(root、根目錄)、“/usr”、“/var”。

其中,根目錄是整個系統中最重要的目錄,原因:所有的目錄都是由根目錄衍生出來的;根目錄存儲着與開機、還原以及系統修復等操作的相關文件。因此,FHS指出儘量讓根目錄越小越好,不要將用戶文件和其他軟件文件放在這裏!

/usr目錄:

/usr:根據FHS定義,該目錄下的數據是可分享但是不可變動的,usr的含義是UNIX Software Rsources的縮寫,即UNIX操作系統軟件資源,FHS建議所有的軟件開發者儘量將他們的數據合理的放置到該目錄下的子目錄中。系統默認的軟件都會放到該目錄下!其子目錄有:

/usr/x11R6/:爲X WINDOW系統重要的數據所放置的目錄

/usr/bin/ :絕大部分用戶可用命令(注意在根目錄下也有一個bin文件,/bin存儲的是在但用戶維護模式下還可以被操作的命令)

/usr/include/:C/C++等程序語言的頭文件與包含文件的放置處

/usr/lib/:軟件的函數庫、目標文件以及不被慣用的執行文件或者腳本

/usr/local/:系統管理員在本機自行安裝自己下載的軟件建議安裝到此目錄!

/usr/sbin/:非系統正常運行所需要的命令

/usr/share/:放置共享文件的地方

/usr/src/:源碼

/var目錄:

該目錄主要是針對常態性變動的文件,緩存、登陸文件以及軟件運行期間產生的文件等。

在根目錄下,還有一些重要的、被規範了的目錄:

/home:系統默認的用戶主文件夾,所有被創建的用戶,用戶的主文件夾都會被規範到這裏,比如我創建了一個用戶jason,在該目錄下就會有一個jason用戶的主文件夾/hone/jason

/lib:開機的時候用到的函數庫

/medis:與媒體相關的,例如軟盤、光盤、DVD等

/opt:第三方軟件放置的目錄,但是還可以放置到/usr/local目錄下(我建議),可以看上面介紹的/usr目錄。

/root:系統管理員的主文件夾。

/sbin:放置了那些一般只有root纔可以使用的,用於開機、修復、還原系統所需要的命令。

/srv:一些網絡服務啓動後所取用數據的目錄。

/tmp:臨時文件

以上只是簡單的介紹了FHS所規範的大多數目錄,詳細信息可以參看網上的資料。

Linux目錄樹架構:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章