鸟哥的Linux私房菜(基础篇)- 第六章、Linux 的文件权限与目录配置
最近更新日期:2009/08/18
| Linux最優秀的地方之一,就在于他的多人多任務環境。而為了讓各個使用者具有較保密的文件數據,因此文件的權限管理就變的很重要了。Linux一般將文件可存取的身份分為三個類別,分別是 owner/group/others,且三種身份各有 read/write/execute 等權限。若管理不當,你的Linux主機將會變的很『不蘇服!@_@』。另外,你如果首次接觸Linux的話,那么,在Linux底下這么多的目錄/文件,到底每個目錄/文件代表什么意義呢?底下我們就來一一介紹呢! |
1. 使用者與群組
2. Linux文件權限概念
2.1 Linux文件屬性
2.2 如何改變文件屬性與權限: chgrp, chown, chmod
2.3 目錄與文件之權限意義
2.4 Linux文件種類與擴展名
3. Linux目錄配置
3.1 Linux目錄配置的依據--FHS:/, /usr, /var
3.2 目錄樹(directory tree)
3.3 絕對路徑與相對路徑
3.4 CentOS 的觀察: lsb_release
4. 重點回顧
5. 本章練習
6. 參考資料與延伸閱讀
7. 針對本文的建議:http://phorum.vbird.org/viewtopic.php?t=23878
使用者與群組
經過第五章的洗禮之后,你應該可以在Linux的指令列模式底下輸入指令了吧?接下來,當然是要讓你好好的瀏覽一下Linux系統里面有哪些重要的文件啰。不過,每個文件都有相當多的屬性與權限,其中最重要的可能就是文件的擁有者的概念了。所以,在開始文件相關信息的介紹前,鳥哥先就簡單的(1)使用者及(2)群組與(3)非本群組外的其他人等概念作個說明吧~好讓你快點進入狀況的哩! ^_^
初次接觸Linux的朋友大概會覺得很怪異,怎么『Linux有這么多使用者,還分什么群組,有什么用?』。這個『用戶與群組』的功能可是相當健全而好用的一個安全防護呢!怎么說呢?由于Linux是個多人多任務的系統,因此可能常常會有多人同時使用這部主機來進行工作的情況發生,為了考慮每個人的隱私權以及每個人喜好的工作環境,因此,這個『文件擁有者』的角色就顯的相當的重要了!
例如當你將你的e-mail情書轉存成文件之后,放在你自己的家目錄,你總不希望被其他人看見自己的情書吧?這個時候,你就把該文件設定成『只有文件擁有者,就是我,才能看與修改這個文件的內容』,那么即使其他人知道你有這個相當『有趣』的文件,不過由于你有設定適當的權限,所以其他人自然也就無法知道該文件的內容啰!
那么群組呢?為何要配置文件案還有所屬的群組?其實,群組最有用的功能之一,就是當你在團隊開發資源的時候啦!舉例來說,假設有兩組專題生在我的主機里面,第一個專題組別為projecta,里面的成員有class1, class2, class3三個;第二個專題組別為projectb,里面的成員有class4, class5, class6。這兩個專題之間是有競爭性質的,但卻要繳交同一份報告。每組的組員之間必須要能夠互相修改對方的數據,但是其他組的組員則不能看到本組自己的文件內容,此時該如何是好?
在Linux底下這樣的限制是很簡單啦!我可以經由簡易的文件權限設定,就能限制非自己團隊(亦即是群組啰)的其他人不能夠閱覽內容啰!而且亦可以讓自己的團隊成員可以修改我所建立的文件!同時,如果我自己還有私人隱密的文件,仍然可以設定成讓自己的團隊成員也看不到我的文件數據。很方便吧!
另外,如果teacher這個賬號是projecta與projectb這兩個專題的老師,他想要同時觀察兩者的進度,因此需要能夠進入這兩個群組的權限時,你可以設定teacher這個賬號,『同時支持projecta與projectb這兩個群組!』,也就是說:每個賬號都可以有多個群組的支持呢!
這樣說或許你還不容易理解這個使用者與群組的關系吧?沒關系,我們可以使用目前『家庭』的觀念來進行解說喔!假設有一家人,家里只有三兄弟,分別是王大毛、王二毛與王三毛三個人,而這個家庭是登記在王大毛的名下的!所以,『王大毛家有三個人,分別是王大毛、王二毛與王三毛』,而且這三個人都有自己的房間,并且共同擁有一個客廳喔!
- 使用者的意義:由于王家三人各自擁有自己的房間,所以,王二毛雖然可以進入王三毛的房間,但是二毛不能翻三毛的抽屜喔!那樣會被三毛K的!因為抽屜里面可能有三毛自己私人的東西,例如情書啦,日記啦等等的,這是『私人的空間』,所以當然不能讓二毛拿啰!
- 群組的概念:由于共同擁有客廳,所以王家三兄弟可以在客廳打開電視機啦、翻閱報紙啦、坐在沙發上面發呆啦等等的! 反正,只要是在客廳的玩意兒,三兄弟都可以使用喔!因為大家都是一家人嘛!
好了,那么今天又有個人,叫做張小豬,他是張小豬家的人,與王家沒有關系啦!這個時候,除非王家認識張小豬,然后開門讓張小豬進來王家,否則張小豬永遠沒有辦法進入王家,更不要說進到王三毛的房間啦!不過,如果張小豬透過關系認識了三毛,并且跟王三毛成為好朋友,那么張小豬就可以透過三毛進入王家啦!呵呵!沒錯!那個張小豬就是所謂的『其他人,Others』啰!
因此,我們就可以知道啦,在Linux里面,任何一個文件都具有『User, Group及Others』三種身份的個別權限,我們可以將上面的說明以底下的圖示來解釋:
圖1.1、每個文件的擁有者、群組與其他人的示意圖
我們以王三毛為例,王三毛這個『文件』的擁有者為王三毛,他屬于王大毛這個群組,而張小豬相對于王三毛,則只是一個『其他人(others)』而已。
不過,這里有個特殊的人物要來介紹的,那就是『萬能的天神』!這個天神具有無限的神力,所以他可以到達任何他想要去的地方,呵呵!那個人在Linux系統中的身份代號是『 root 』啦!所以要小心喔!那個root可是『萬能的天神』喔!
無論如何,『使用者身份』,與該使用者所支持的『群組』概念,在Linux的世界里面是相當的重要的,他可以幫助你讓你的多任務Linux環境變的更容易管理!更詳細的『身份與群組』 設定,我們將在第十四章、賬號管理再進行解說。底下我們將針對文件系統與文件權限來進行說明。
- Linux 用戶身份與群組記錄的文件
在我們Linux系統當中,默認的情況下,所有的系統上的賬號與一般身份使用者,還有那個root的相關信息,都是記錄在/etc/passwd這個文件內的。至于個人的密碼則是記錄在/etc/shadow這個文件下。此外,Linux所有的組名都紀錄在/etc/group內!這三個文件可以說是Linux系統里面賬號、密碼、群組信息的集中地啰!不要隨便刪除這三個文件啊! ^_^
至于更多的與賬號群組有關的設定,還有這三個文件的格式,不要急,我們在第十四章的賬號管理時,會再跟大家詳細的介紹的!這里先有概念即可。
Linux 文件權限概念
大致了解了Linux的使用者與群組之后,接著下來,我們要來談一談,這個文件的權限要如何針對這些所謂的『使用者』與『群組』來設定呢?這個部分是相當重要的,尤其對于初學者來說,因為文件的權限與屬性是學習Linux的一個相當重要的關卡,如果沒有這部份的概念,那么你將老是聽不懂別人在講什么呢!尤其是當你在你的屏幕前面出現了『Permissiondeny』的時候,不要擔心,『肯定是權限設定錯誤』啦!呵呵!好了,閑話不多聊,趕快來瞧一瞧先。
Linux文件屬性
嗯!既然要讓你了解Linux的文件屬性,那么有個重要的也是常用的指令就必須要先跟你說啰!那一個?就是『ls 』這一個察看文件的指令啰!在你以root的身份登入Linux之后,下達『ls -al 』看看,會看到底下的幾個咚咚:
| [root@www ~]# ls -al total 156 drwxr-x--- 4 root root 4096 Sep 8 14:06 . drwxr-xr-x 23 root root 4096 Sep 8 14:21 .. -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg -rw------- 1 root root 199 Sep 8 17:14 .bash_history -rw-r--r-- 1 root root 24 Jan 6 2007 .bash_logout -rw-r--r-- 1 root root 191 Jan 6 2007 .bash_profile -rw-r--r-- 1 root root 176 Jan 6 2007 .bashrc -rw-r--r-- 1 root root 100 Jan 6 2007 .cshrc drwx------ 3 root root 4096 Sep 5 10:37 .gconf <=范例說明處 drwx------ 2 root root 4096 Sep 5 14:09 .gconfd -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=范例說明處 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog [ 1 ][ 2 ][ 3 ][ 4 ][ 5 ][ 6 ][ 7 ] [ 權限 ][連結][擁有者][群組][文件容量][ 修改日期 ][ 檔名 ] |
| Tips: 由于本章后續的chgrp, chown等指令可能都需要使用root的身份才能夠處理,所以這里建議您以root的身份登入Linux來學習本章。 |
ls是『list』的意思,重點在顯示文件的文件名與相關屬性。而選項『-al』則表示列出所有的文件詳細的權限與屬性(包含隱藏檔,就是文件名第一個字符為『 . 』的文件)。如上所示,在你第一次以root身份登入Linux時,如果你輸入上述指令后,應該有上列的幾個東西,先解釋一下上面七個字段個別的意思:
圖2.1.1、文件屬性的示意圖
- 第一欄代表這個文件的類型與權限(permission):
這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個字符:(圖2.1.1及圖2.1.2內的權限并無關系)
圖2.1.2、文件的類型與權限之內容
- 第一個字符代表這個文件是『目錄、文件或鏈接文件等等』:
- 當為[ d ]則是目錄,例如上表檔名為『.gconf』的那一行;
- 當為[ - ]則是文件,例如上表檔名為『install.log』那一行;
- 若是[ l ]則表示為連結檔(link file);
- 若是[ b ]則表示為裝置文件里面的可供儲存的接口設備(可隨機存取裝置);
- 若是[ c ]則表示為裝置文件里面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。
- 接下來的字符中,以三個為一組,且均為『rwx』的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。
- 第一組為『文件擁有者的權限』,以『install.log』那個文件為例,該文件的擁有者可以讀寫,但不可執行;
- 第二組為『同群組的權限』;
- 第三組為『其他非本群組的權限』。
| 例題: 若有一個文件的類型與權限數據為『-rwxr-xr--』,請說明其意義為何? 答: 先將整個類型與權限數據分開查閱,并將十個字符整理成為如下所示: [-][rwx][r-x][r--] ?1??234??567??890 ?1 為:代表這個文件名為目錄或文件,本例中為文件(-); 234為:擁有者的權限,本例中為可讀、可寫、可執行(rwx); 567為:同群組用戶權力,本例中為可讀可執行(rx); 890為:其他用戶權力,本例中為可讀(r) 同時注意到,rwx所在的位置是不會改變的,有該權限就會顯示字符,沒有該權限就變成減號(-)就是了。 |
另外,目錄與文件的權限意義并不相同,這是因為目錄與文件所記錄的數據內容不相同所致。由于目錄與文件的權限意義非常的重要,所以鳥哥將他獨立到2.3節目錄與文件之權限意義中再來談。
- 第二欄表示有多少檔名連結到此節點(i-node):
每個文件都會將他的權限與屬性記錄到文件系統的i-node中,不過,我們使用的目錄樹卻是使用文件名來記錄,因此每個檔名就會連結到一個i-node啰!這個屬性記錄的,就是有多少不同的檔名連結到相同的一個i-node號碼去就是了。關于i-node的相關數據我們會在第八章談到文件系統時再加強介紹的。
- 第三欄表示這個文件(或目錄)的『擁有者賬號』
- 第四欄表示這個文件的所屬群組
在Linux系統下,你的賬號會附屬于一個或多個的群組中。舉剛剛我們提到的例子,class1, class2, class3均屬于projecta這個群組,假設某個文件所屬的群組為projecta,且該文件的權限如圖2.1.2所示(-rwxrwx---),則class1, class2, class3三人對于該文件都具有可讀、可寫、可執行的權限(看群組權限)。但如果是不屬于projecta的其他賬號,對于此文件就不具有任何權限了。
- 第五欄為這個文件的容量大小,默認單位為bytes;
- 第六欄為這個文件的建檔日期或者是最近的修改日期:
這一欄的內容分別為日期(月/日)及時間。如果這個文件被修改的時間距離現在太久了,那么時間部分會僅顯示年份而已。如下所示:
| [root@www ~]# ls -l /etc/termcap /root/install.log -rw-r--r-- 1 root root 807103 Jan 7 2007 /etc/termcap -rw-r--r-- 1 root root 42304 Sep 4 18:26 /root/install.log # 如上所示,/etc/termcap 為 2007 年所修改過的文件,離現在太遠之故; # 至于 install.log 是今年 (2009) 所建立的,所以就顯示完整的時間了。 |
如果想要顯示完整的時間格式,可以利用ls的選項,亦即:『ls -l --full-time』就能夠顯示出完整的時間格式了!包括年、月、日、時間喔。另外,如果你當初是以繁體中文安裝你的Linux系統,那么日期字段將會以中文來顯示。可惜的是,中文并沒有辦法在純文本的終端機模式中正確的顯示,所以此欄會變成亂碼。那你就得要使用『LANG=en_US』來修改語系喔!
如果想要讓系統默認的語系變成英文的話,那么你可以修改系統配置文件『/etc/sysconfig/i18n』,利用第五章談到的nano來修改該文件的內容,使LANG這個變量成為上述的內容即可。
- 第七欄為這個文件的檔名
這個字段就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,則代表這個文件為『隱藏檔』,例如上表中的.gconf那一行,該文件就是隱藏檔。你可以使用『ls』及『ls -a』這兩個指令去感受一下什么是隱藏檔啰!
| Tips: 對于更詳細的 ls 用法,還記得怎么查詢嗎?對啦!使用man ls 或 info ls 去看看他的基礎用法去!自我進修是很重要的,因為『師傅帶進門,修行看個人!』,自古只有天才學生,沒有天才老師呦!加油吧!^_^ |
這七個字段的意義是很重要的!務必清楚的知道各個字段代表的意義!尤其是第一個字段的九個權限,那是整個Linux文件權限的重點之一。底下我們來做幾個簡單的練習,你就會比較清楚啰!
例題: 假設test1, test2, test3同屬于testgroup這個群組,如果有下面的兩個文件,請說明兩個文件的擁有者與其相關的權限為何? -rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai 答:
|
例題: 如果我的目錄為底下的樣式,請問testgroup這個群組的成員與其他人(others)是否可以進入本目錄? drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/ 答:
|
- Linux文件權限的重要性:
與Windows系統不一樣的是,在Linux系統當中,每一個文件都多加了很多的屬性進來,尤其是群組的概念,這樣有什么用途呢?其實,最大的用途是在『數據安全性』上面的。
- 系統保護的功能:
舉個簡單的例子,在你的系統中,關于系統服務的文件通常只有root才能讀寫或者是執行,例如/etc/shadow這一個賬號管理的文件,由于該文件記錄了你系統中所有賬號的數據,因此是很重要的一個配置文件,當然不能讓任何人讀取(否則密碼會被竊取啊),只有root才能夠來讀取啰!所以該文件的權限就會成為[-rw------- ]啰!
- 團隊開發軟件或數據共享的功能:
此外,如果你有一個軟件開發團隊,在你的團隊中,你希望每個人都可以使用某一些目錄下的文件,而非你的團隊的其他人則不予以開放呢?以上面的例子來說,testgroup的團隊共有三個人,分別是test1, test2, test3,那么我就可以將團隊所需的文件權限訂為[-rwxrwx--- ]來提供給testgroup的工作團隊使用啰!
- 未將權限設定妥當的危害:
再舉個例子來說,如果你的目錄權限沒有作好的話,可能造成其他人都可以在你的系統上面亂搞啰!例如本來只有root才能做的開關機、ADSL的撥接程序、新增或刪除用戶等等的指令,若被你改成任何人都可以執行的話,那么如果使用者不小心給你重新啟動啦!重新撥接啦!等等的!那么你的系統不就會常常莫名其妙的掛掉啰!而且萬一你的用戶的密碼被其他不明人士取得的話,只要他登入你的系統就可以輕而易舉的執行一些root的工作!
可怕吧!因此,在你修改你的linux文件與目錄的屬性之前,一定要先搞清楚,什么數據是可變的,什么是不可變的!千萬注意啰!接下來我們來處理一下文件屬性與權限的變更吧!
如何改變文件屬性與權限
我們現在知道文件權限對于一個系統的安全重要性了,也知道文件的權限對于使用者與群組的相關性,那么如何修改一個文件的屬性與權限呢?又!有多少文件的權限我們可以修改呢?其實一個文件的屬性與權限有很多!我們先介紹幾個常用于群組、擁有者、各種身份的權限之修改的指令,如下所示:
- chgrp :改變文件所屬群組
- chown :改變文件擁有者
- chmod :改變文件的權限, SUID, SGID, SBIT等等的特性
- 改變所屬群組, chgrp
改變一個文件的群組真是很簡單的,直接以chgrp來改變即可,咦!這個指令就是change group的縮寫嘛!這樣就很好記了吧! ^_^。不過,請記得,要被改變的組名必須要在/etc/group文件內存在才行,否則就會顯示錯誤!
假設你是以root的身份登入Linux系統的,那么在你的家目錄內有一個install.log的文件,如何將該文件的群組改變一下呢?假設你已經知道在/etc/group里面已經存在一個名為users的群組,但是testing這個群組名字就不存在/etc/group當中了,此時改變群組成為users與testing分別會有什么現象發生呢?
| [root@www ~]# chgrp [-R] dirname/filename ... 選項與參數: -R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件、目錄都更新成為這個群組之意。常常用在變更某一目錄內所有的文件之情況。 范例: [root@www ~]# chgrp users install.log [root@www ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log [root@www ~]# chgrp testing install.log chgrp: invalid group name `testing' <== 發生錯誤訊息啰~找不到這個群組名~ |
發現了嗎?文件的群組被改成users了,但是要改成testing的時候,就會發生錯誤~注意喔!發生錯誤訊息還是要努力的查一查錯誤訊息的內容才好!將他英文翻譯成為中文,就知道問題出在哪里了。
- 改變文件擁有者, chown
如何改變一個文件的擁有者呢?很簡單呀!既然改變群組是change group,那么改變擁有者就是change owner啰!BINGO!那就是chown這個指令的用途,要注意的是,用戶必須是已經存在系統中的賬號,也就是在/etc/passwd這個文件中有紀錄的用戶名稱才能改變。
chown的用途還滿多的,他還可以順便直接修改群組的名稱呢!此外,如果要連目錄下的所有次目錄或文件同時更改文件擁有者的話,直接加上-R的選項即可!我們來看看語法與范例:
| [root@www ~]# chown [-R] 賬號名稱 文件或目錄 [root@www ~]# chown [-R] 賬號名稱:組名 文件或目錄 選項與參數: -R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都變更范例:將install.log的擁有者改為bin這個賬號: [root@www ~]# chown bin install.log [root@www ~]# ls -l -rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log范例:將install.log的擁有者與群組改回為root: [root@www ~]# chown root:root install.log [root@www ~]# ls -l -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log |
| Tips: 事實上,chown也可以使用『chown user.group file』,亦即在擁有者與群組間加上小數點『.』也行!不過很多朋友設定賬號時,喜歡在賬號當中加入小數點(例如vbird.tsai這樣的賬號格式),這就會造成系統的誤判了!所以我們比較建議使用冒號『:』來隔開擁有者與群組啦!此外,chown也能單純的修改所屬群組呢!例如『chown .sshd install.log』就是修改群組~看到了嗎?就是那個小數點的用途! |
知道如何改變文件的群組與擁有者了,那么什么時候要使用chown或chgrp呢?或許你會覺得奇怪吧?是的,確實有時候需要變更文件的擁有者的,最常見的例子就是在復制文件給你之外的其他人時,我們使用最簡單的cp指令來說明好了:
| [root@www ~]# cp 來源文件 目標文件 |
假設你今天要將.bashrc這個文件拷貝成為.bashrc_test檔名,且是要給bin這個人,你可以這樣做:
| [root@www ~]# cp .bashrc .bashrc_test [root@www ~]# ls -al .bashrc* -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 395 Jul 13 11:31 .bashrc_test <==新文件的屬性沒變 |
由于復制行為(cp)會復制執行者的屬性與權限,所以!怎么辦?.bashrc_test還是屬于root所擁有,如此一來,即使你將文件拿給bin這個使用者了,那他仍然無法修改的(看屬性/權限就知道了吧),所以你就必須要將這個文件的擁有者與群組修改一下啰!知道如何修改了吧?
- 改變權限, chmod
文件權限的改變使用的是chmod這個指令,但是,權限的設定方法有兩種,分別可以使用數字或者是符號來進行權限的變更。我們就來談一談:
- 數字類型改變文件權限
Linux文件的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限,先復習一下剛剛上面提到的數據:文件的權限字符為:『-rwxrwxrwx』,這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:
r:4
w:2
x:1 每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為:[-rwxrwx---] 分數則是: owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0 所以等一下我們設定權限的變更時,該文件的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:
舉例來說,如果要將.bashrc這個文件所有的權限都設定啟用,那么就下達:[root@www ~]# chmod [-R] xyz 文件或目錄 選項與參數: xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。 -R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更
那如果要將權限變成『 -rwxr-xr-- 』呢?那么權限的分數就成為[4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下達『chmod 754 filename』。另外,在實際的系統運作中最常發生的一個問題就是,常常我們以vim編輯一個shell的文字批處理文件后,他的權限通常是 -rw-rw-r-- 也就是664,如果要將該文件變成可執行文件,并且不要讓其他人修改此一文件的話,那么就需要-rwxr-xr-x這樣的權限,此時就得要下達:『chmod 755 test.sh 』的指令啰![root@www ~]# ls -al .bashrc -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod 777 .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
另外,如果有些文件你不希望被其他人看到,那么應該將文件的權限設定為例如:『-rwxr-----』,那就下達『chmod 740 filename 』吧!
例題: 將剛剛你的.bashrc這個文件的權限修改回-rw-r--r--的情況吧! 答: -rw-r--r--的分數是644,所以指令為:
chmod 644 .bashrc
- 符號類型改變文件權限
還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!那么我們就可以藉由u, g, o來代表三種身份的權限!此外,a 則代表 all 亦即全部的身份!那么讀寫的權限就可以寫成r, w, x!也就是可以使用底下的方式來看:
chmod u
g
o
a+(加入)
-(除去)
=(設定)r
w
x文件或目錄
來實作一下吧!假如我們要『設定』一個文件的權限成為『-rwxr-xr-x』時,基本上就是:
- user (u):具有可讀、可寫、可執行的權限;
- group 與 others (g/o):具有可讀與執行的權限。
所以就是:
那么假如是『 -rwxr-xr-- 』這樣的權限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的文件屬性,而我只想要增加.bashrc這個文件的每個人均可寫入的權限,那么我就可以使用:[root@www ~]# chmod u=rwx,go=rx .bashrc # 注意喔!那個 u=rwx,go=rx 是連在一起的,中間并沒有任何空格! [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:[root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod a+w .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目,則該權限『不會被變動』,例如上面的例子中,由于僅以 – 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限啰!這在某些情況底下很好用的~舉例來說,你想要教一個朋友如何讓一個程序可以擁有執行的權限,但你又不知道該文件原本的權限為何,此時,利用『chmod a+x filename』 ,就可以讓該程序擁有執行的權限了。是否很方便?[root@www ~]# chmod a-x .bashrc [root@www ~]# ls -al .bashrc -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc
目錄與文件之權限意義:
現在我們知道了Linux系統內文件的三種身份(擁有者、群組與其他人),知道每種身份都有三種權限(rwx),已知道能夠使用chown, chgrp, chmod去修改這些權限與屬性,當然,利用ls -l去觀察文件也沒問題。前兩小節也談到了這些文件權限對于數據安全的重要性。那么,這些文件權限對于一般文件與目錄文件有何不同呢?有大大的不同啊!底下就讓鳥哥來說清楚,講明白!
- 權限對文件的重要性
文件是實際含有數據的地方,包括一般文本文件、數據庫內容文件、二進制可執行文件(binary program)等等。因此,權限對于文件來說,他的意義是這樣的:
- r (read):可讀取此一文件的實際內容,如讀取文本文件的文字內容等;
- w (write):可以編輯、新增或者是修改該文件的內容(但不含刪除該文件);
- x (execute):該文件具有可以被系統執行的權限。
那個可讀(r)代表讀取文件內容是還好了解,那么可執行(x)呢?這里你就必須要小心啦!因為在Windows底下一個文件是否具有執行的能力是藉由『 擴展名 』來判斷的,例如:.exe, .bat, .com 等等,但是在Linux底下,我們的文件是否能被執行,則是藉由是否具有『x』這個權限來決定的!跟檔名是沒有絕對的關系的!
至于最后一個w這個權限呢?當你對一個文件具有w權限時,你可以具有寫入/編輯/新增/修改文件的內容的權限,但并不具備有刪除該文件本身的權限!對于文件的rwx來說,主要都是針對『文件的內容』而言,與文件檔名的存在與否沒有關系喔!因為文件記錄的是實際的數據嘛!
- 權限對目錄的重要性
文件是存放實際數據的所在,那么目錄主要是儲存啥玩意啊?目錄主要的內容在記錄文件名列表,文件名與目錄有強烈的關連啦!所以如果是針對目錄時,那個 r, w, x 對目錄是什么意義呢?
- r (read contents in directory):
表示具有讀取目錄結構列表的權限,所以當你具有讀取(r)一個目錄的權限時,表示你可以查詢該目錄下的文件名數據。所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!
- w (modify contents of directory):
這個可寫入的權限對目錄來說,是很了不起的!因為他表示你具有異動該目錄結構列表的權限,也就是底下這些權限:
- 建立新的文件與目錄;
- 刪除已經存在的文件與目錄(不論該文件的權限為何!)
- 將已存在的文件或目錄進行更名;
- 搬移該目錄內的文件、目錄位置。
總之,目錄的w權限就與該目錄底下的文件名異動有關就對了啦!
- x (access directory):
咦!目錄的執行權限有啥用途啊?目錄只是記錄文件名而已,總不能拿來執行吧?沒錯!目錄不可以被執行,目錄的x代表的是用戶能否進入該目錄成為工作目錄的用途!所謂的工作目錄(work directory)就是你目前所在的目錄啦!舉例來說,當你登入Linux時,你所在的家目錄就是你當下的工作目錄。而變換目錄的指令是『cd』(change directory)啰!
大致的目錄權限概念是這樣,底下我們來看幾個范例,讓你了解一下啥是目錄的權限啰!
| 例題: 有個目錄的權限如下所示: drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh 系統有個賬號名稱為vbird,這個賬號并沒有支持root群組,請問vbird對這個目錄有何權限?是否可切換到此目錄中? 答: vbird對此目錄僅具有r的權限,因此vbird可以查詢此目錄下的文件名列表。因為vbird不具有x的權限,因此vbird并不能切換到此目錄內!(相當重要的概念!) |
上面這個例題中因為vbird具有r的權限,因為是r乍看之下好像就具有可以進入此目錄的權限,其實那是錯的。能不能進入某一個目錄,只與該目錄的x權限有關啦!此外,工作目錄對于指令的執行是非常重要的,如果你在某目錄下不具有x的權限,那么你就無法切換到該目錄下,也就無法執行該目錄下的任何指令,即使你具有該目錄的r的權限。
很多朋友在架設網站的時候都會卡在一些權限的設定上,他們開放目錄數據給因特網的任何人來瀏覽,卻只開放r的權限,如上面的范例所示那樣,那樣的結果就是導致網站服務器軟件無法到該目錄下讀取文件(最多只能看到檔名),最終用戶總是無法正確的查閱到文件的內容(顯示權限不足啊!)。要注意:要開放目錄給任何人瀏覽時,應該至少也要給予r及x的權限,但w權限不可隨便給!為什么w不能隨便給,我們來看下一個例子:
| 例題: 假設有個賬號名稱為dmtsai,他的家目錄在/home/dmtsai/,dmtsai對此目錄具有[rwx]的權限。若在此目錄下有個名為the_root.data的文件,該文件的權限如下: -rwx------ 1 root root 4365 Sep 19 23:20 the_root.data 請問dmtsai對此文件的權限為何?可否刪除此文件? 答: 如上所示,由于dmtsai對此文件來說是『others』的身份,因此這個文件他無法讀、無法編輯也無法執行,也就是說,他無法變動這個文件的內容就是了。 但是由于這個文件在他的家目錄下,他在此目錄下具有rwx的完整權限,因此對于the_root.data這個『檔名』來說,他是能夠『刪除』的!結論就是,dmtsai這個用戶能夠刪除the_root.data這個文件! |
還是看不太懂?有聽沒有懂喔!沒關系~我們底下就來設計一個練習,讓你實際玩玩看,應該就能夠比較近入狀況啦!不過,由于很多指令我們還沒有教,所以底下的指令有的先了解即可,詳細的指令用法我們會在后面繼續介紹的。
- 先用root的身份建立所需要的文件與目錄環境
我們用root的身份在所有人都可以工作的/tmp目錄中建立一個名為testing的目錄,該目錄的權限為744且目錄擁有者為root。另外,在testing目錄下在建立一個空的文件,檔名亦為testing。建立目錄可用mkdir(make directory),建立空文件可用touch(下一章會說明)來處理。所以過程如下所示:
| [root@www ~]# cd /tmp <==切換工作目錄到/tmp [root@www tmp]# mkdir testing <==建立新目錄 [root@www tmp]# chmod 744 testing <==變更權限 [root@www tmp]# touch testing/testing <==建立空的文件 [root@www tmp]# chmod 600 testing/testing <==變更權限 [root@www tmp]# ls -ald testing testing/testing drwxr--r-- 2 root root 4096 Sep 19 16:01 testing -rw------- 1 root root 0 Sep 19 16:01 testing/testing # 仔細看一下,目錄的權限是 744 ,且所屬群組與使用者均是 root 喔! # 那么在這樣的情況底下,一般身份用戶對這個目錄/文件的權限為何? |
- 一般用戶的讀寫權限為何?觀察中
在上面的例子中,雖然目錄是744的權限設定,一般用戶應該能有 r 的權限,但這樣的權限使用者能做啥事呢?假設鳥哥的系統中含有一個賬號名為 vbird 的,我們可以透過『 su - vbird 』這個指令來變換身份喔!看看底下的操作先!
| [root@www tmp]# su - vbird <==切換身份成為 vbird 啰! [vbird@www ~]$ cd /tmp <==看一下,身份變了喔!提示字符也變成 $ 了! [vbird@www tmp]$ ls -l testing/ ?--------- ? ? ? ? ? testing # 因為具有 r 的權限可以查詢檔名。不過權限不足(沒有x),所以會有一堆問號。 [vbird@www tmp]$ cd testing/ -bash: cd: testing/: Permission denied # 因為不具有 x ,所以當然沒有進入的權限啦!有沒有呼應前面的權限說明啊! |
- 如果該目錄屬于用戶本身,會有什么狀況?
上面的練習我們知道了只有r確實可以讓用戶讀取目錄的文件名列表,不過詳細的信息卻還是讀不到的,同時也不能將該目錄變成工作目錄(用 cd 進入該目錄之意)。那如果我們讓該目錄變成用戶的,那么用戶在這個目錄底下是否能夠刪除文件呢?底下的練習做看看:
| [vbird@www tmp]$ exit <==讓 vbird 變回原本的 root 身份喔! [root@www tmp]# chown vbird testing <==修改權限,讓vbird擁有此目錄 [root@www tmp]# su - vbird <==再次變成vbird來操作 [vbird@www ~]$ cd /tmp/testing <==可以進入目錄了呢! [vbird@www testing]$ ls -l -rw------- 1 root root 0 Sep 19 16:01 testing <==文件不是vbird的! [vbird@www testing]$ rm testing <==嘗試刪除這個文件看看! rm: remove write-protected regular empty file `testing'? y # 竟然可以刪除!這樣理解了嗎?! |
透過上面這個簡單的步驟,你就可以清楚的知道, x 在目錄當中是與『能否進入該目錄』有關,至于那個 w 則具有相當重要的權限,因為他可以讓使用者刪除、更新、新建文件或目錄,是個很重要的參數啊!這樣可以理解了嗎?! ^_^
Linux文件種類與擴展名
我們在基礎篇一直強調一個概念,那就是:任何裝置在Linux底下都是文件,不僅如此,連數據溝通的接口也有專屬的文件在負責~所以,你會了解到,Linux的文件種類真的很多~除了前面提到的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件呢?
- 文件種類:
我們在剛剛提到使用『ls -l』觀察到第一欄那十個字符中,第一個字符為文件的類型。除了常見的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件類型呢?
- 正規文件(regular file ):
就是一般我們在進行存取的類型的文件,在由 ls -al 所顯示出來的屬性方面,第一個字符為 [ - ],例如 [-rwxrwxrwx ]。另外,依照文件的內容,又大略可以分為:
- 純文本檔(ASCII):這是Linux系統中最多的一種文件類型啰,稱為純文本檔是因為內容為我們人類可以直接讀到的數據,例如數字、字母等等。幾乎只要我們可以用來做為設定的文件都屬于這一種文件類型。舉例來說,你可以下達『 cat ~/.bashrc 』就可以看到該文件的內容。(cat 是將一個文件內容讀出來的指令)
- 二進制文件(binary):還記得我們在『第零章、計算器概論 』里面的軟件程序的運作中提過,我們的系統其實僅認識且可以執行二進制文件(binary file)吧?沒錯~你的Linux當中的可執行文件(scripts, 文字型批處理文件不算)就是這種格式的啦~舉例來說,剛剛下達的指令cat就是一個binary file。
- 數據格式文件(data):有些程序在運作的過程當中會讀取某些特定格式的文件,那些特定格式的文件可以被稱為數據文件 (data file)。舉例來說,我們的Linux在使用者登入時,都會將登錄的數據記錄在/var/log/wtmp那個文件內,該文件是一個data file,他能夠透過last這個指令讀出來!但是使用cat時,會讀出亂碼~因為他是屬于一種特殊格式的文件。瞭乎?
- 純文本檔(ASCII):這是Linux系統中最多的一種文件類型啰,稱為純文本檔是因為內容為我們人類可以直接讀到的數據,例如數字、字母等等。幾乎只要我們可以用來做為設定的文件都屬于這一種文件類型。舉例來說,你可以下達『 cat ~/.bashrc 』就可以看到該文件的內容。(cat 是將一個文件內容讀出來的指令)
- 目錄(directory):
就是目錄啰~第一個屬性為 [ d ],例如 [drwxrwxrwx]。
- 連結檔(link):
就是類似Windows系統底下的快捷方式啦!第一個屬性為 [ l ](英文L的小寫),例如 [lrwxrwxrwx] ;
- 設備與裝置文件(device):
與系統周邊及儲存等相關的一些文件,通常都集中在/dev這個目錄之下!通常又分為兩種:
- 區塊(block)設備檔 :就是一些儲存數據,以提供系統隨機存取的接口設備,舉例來說,硬盤與軟盤等就是啦!你可以隨機的在硬盤的不同區塊讀寫,這種裝置就是成組設備啰!你可以自行查一下/dev/sda看看,會發現第一個屬性為[ b ]喔!
- 字符(character)設備文件:亦即是一些串行端口的接口設備,例如鍵盤、鼠標等等!這些設備的特色就是『一次性讀取』的,不能夠截斷輸出。舉例來說,你不可能讓鼠標『跳到』另一個畫面,而是『滑動』到另一個地方啊!第一個屬性為 [ c ]。
- 區塊(block)設備檔 :就是一些儲存數據,以提供系統隨機存取的接口設備,舉例來說,硬盤與軟盤等就是啦!你可以隨機的在硬盤的不同區塊讀寫,這種裝置就是成組設備啰!你可以自行查一下/dev/sda看看,會發現第一個屬性為[ b ]喔!
- 數據接口文件(sockets):
既然被稱為數據接口文件,想當然爾,這種類型的文件通常被用在網絡上的數據承接了。我們可以啟動一個程序來監聽客戶端的要求,而客戶端就可以透過這個socket來進行數據的溝通了。第一個屬性為 [ s ],最常在/var/run這個目錄中看到這種文件類型了。
- 數據輸送文件(FIFO, pipe):
FIFO也是一種特殊的文件類型,他主要的目的在解決多個程序同時存取一個文件所造成的錯誤問題。FIFO是first-in-first-out的縮寫。第一個屬性為[p] 。
除了設備文件是我們系統中很重要的文件,最好不要隨意修改之外(通常他也不會讓你修改的啦!),另一個比較有趣的文件就是連結檔。如果你常常將應用程序捉到桌面來的話,你就應該知道在Windows底下有所謂的『快捷方式』。同樣的,你可以將linux下的連結檔簡單的視為一個文件或目錄的快捷方式。至于socket與FIFO文件比較難理解,因為這兩個咚咚與程序(process)比較有關系,這個等到未來你了解process之后,再回來查閱吧!此外,你也可以透過man fifo及man socket來查閱系統上的說明!
- Linux文件擴展名:
基本上,Linux的文件是沒有所謂的『擴展名』的,我們剛剛就談過,一個Linux文件能不能被執行,與他的第一欄的十個屬性有關,與檔名根本一點關系也沒有。這個觀念跟Windows的情況不相同喔!在Windows底下,能被執行的文件擴展名通常是 .com .exe .bat等等,而在Linux底下,只要你的權限當中具有x的話,例如[ -rwx-r-xr-x ]即代表這個文件可以被執行喔!
不過,可以被執行跟可以執行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個純文本檔,如果經由修改權限成為 -rwxrwxrwx 后,這個文件能夠真的執行成功嗎?當然不行~因為他的內容根本就沒有可以執行的數據。所以說,這個x代表這個文件具有可執行的能力,但是能不能執行成功,當然就得要看該文件的內容啰~
雖然如此,不過我們仍然希望可以藉由擴展名來了解該文件是什么東西,所以,通常我們還是會以適當的擴展名來表示該文件是什么種類的。底下有數種常用的擴展名:
- *.sh : 腳本或批處理文件 (scripts),因為批處理文件為使用shell寫成的,所以擴展名就編成 .sh ;
- *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件。這是因為壓縮軟件分別為 gunzip, tar 等等的,由于不同的壓縮軟件,而取其相關的擴展名啰!
- *.html, *.php:網頁相關文件,分別代表 HTML 語法與 PHP 語法的網頁文件啰!.html 的文件可使用網頁瀏覽器來直接開啟,至于 .php 的文件,則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運算后的網頁結果呢!
基本上,Linux系統上的文件名真的只是讓你了解該文件可能的用途而已,真正的執行與否仍然需要權限的規范才行!例如雖然有一個文件為可執行文件,如常見的/bin/ls這個顯示文件屬性的指令,不過,如果這個文件的權限被修改成無法執行時,那么ls就變成不能執行啰!
上述的這種問題最常發生在文件傳送的過程中。例如你在網絡上下載一個可執行文件,但是偏偏在你的Linux系統中就是無法執行!呵呵!那么就是可能文件的屬性被改變了!不要懷疑,從網絡上傳送到你的Linux系統中,文件的屬性與權限確實是會被改變的喔!
- Linux文件長度限制:
在Linux底下,使用預設的Ext2/Ext3文件系統時,針對文件的檔名長度限制為:
- 單一文件或目錄的最大容許文件名為 255 個字符;
- 包含完整路徑名稱及目錄 (/) 之完整檔名為 4096 個字符。
是相當長的檔名喔!我們希望Linux的文件名可以一看就知道該文件在干嘛的,所以檔名通常是很長很長!而用慣了Windows的人可能會受不了,因為文件名通常真的都很長,對于用慣Windows而導致打字速度不快的朋友來說,嗯!真的是很困擾.....不過,只得勸你好好的加強打字的訓練!
而由第五章談到的熱鍵你也會知道,其實可以透過[tab]按鍵來確認文件的文件名的!這很好用啊!當然啦,如果你已經讀完了本書第三篇關于BASH的用法,那么你將會發現『哇!變量真是一個相當好用的東西吶!』 嗯!看不懂,沒關系,到第三篇談到bash再說!
- Linux文件名的限制:
由于Linux在文字接口下的一些指令操作關系,一般來說,你在設定Linux底下的文件名時,最好可以避免一些特殊字符比較好!例如底下這些:
* ? > < ; & ! [ ] | \ ' " ` ( ) { }因為這些符號在文字接口下,是有特殊意義的!另外,文件名的開頭為小數點『.』時,代表這個文件為『隱藏檔』喔!同時,由于指令下達當中,常常會使用到 -option 之類的選項,所以你最好也避免將文件檔名的開頭以 - 或 + 來命名啊!
Linux目錄配置
在了解了每個文件的相關種類與屬性,以及了解了如何更改文件屬性/權限的相關信息后,再來要了解的就是,為什么每套Linux distributions他們的配置文件啊、執行文件啊、每個目錄內放置的咚咚啊,其實都差不多?原來是有一套標準依據的哩!我們底下就來瞧一瞧。
Linux目錄配置的依據--FHS
因為利用Linux來開發產品或distributions的社群/公司與個人實在太多了,如果每個人都用自己的想法來配置文件放置的目錄,那么將可能造成很多管理上的困擾。你能想象,你進入一個企業之后,所接觸到的Linux目錄配置方法竟然跟你以前學的完全不同嗎?很難想象吧~所以,后來就有所謂的Filesystem Hierarchy Standard (FHS)標準的出爐了!
根據FHS(http://www.pathname.com/fhs/)的官方文件指出,他們的主要目的是希望讓使用者可以了解到已安裝軟件通常放置于那個目錄下,所以他們希望獨立的軟件開發商、操作系統制作者、以及想要維護系統的用戶,都能夠遵循FHS的標準。也就是說,FHS的重點在于規范每個特定的目錄下應該要放置什么樣子的數據而已。這樣做好處非常多,因為Linux操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。
事實上,FHS是根據過去的經驗一直再持續的改版的,FHS依據文件系統使用的頻繁與否與是否允許使用者隨意更動,而將目錄定義成為四種交互作用的形態,用表格來說有點像底下這樣:
| ? | 可分享的(shareable) | 不可分享的(unshareable) |
| 不變的(static) | /usr (軟件放置處) | /etc (配置文件) |
| ? | /opt (第三方協力軟件) | /boot (開機與核心檔) |
| 可變動的(variable) | /var/mail (使用者郵件信箱) | /var/run (程序相關) |
| ? | /var/spool/news (新聞組) | /var/lock (程序相關) |
上表中的目錄就是一些代表性的目錄,該目錄底下所放置的數據在底下會談到,這里先略過不談。我們要了解的是,什么是那四個類型?
- 可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據,是能夠分享給網絡上其他主機掛載用的目錄;
- 不可分享的:自己機器上面運作的裝置文件或者是與程序有關的socket文件等,由于僅與自身機器有關,所以當然就不適合分享給其他主機了。
- 不變的:有些數據是不會經常變動的,跟隨著distribution而不變動。例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等等;
- 可變動的:經常改變的數據,例如登錄文件、一般用戶可自行收受的新聞組等。
事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什么數據而已,分別是底下這三個目錄的定義:
- / (root, 根目錄):與開機系統有關;
- /usr (unix software resource):與軟件安裝/執行有關;
- /var (variable):與系統運作過程有關。
為什么要定義出這三層目錄呢?其實是有意義的喔!每層目錄底下所應該要放置的目錄也都又特定的規定喔!由于我們尚未介紹完整的Linux系統,所以底下的介紹你可能會看不懂!沒關系,先有個概念即可,等到妳將基礎篇全部看完后,就重頭將基礎篇再看一遍!到時候你就會豁然開朗啦!^_^
| Tips: 這個 root 在 Linux 里面的意義真的很多很多~多到讓人搞不懂那是啥玩意兒。如果以『賬號』的角度來看,所謂的 root 指的是『系統管理員!』的身份,如果以『目錄』的角度來看,所謂的 root 意即指的是根目錄,就是 / 啦~要特別留意喔! |
- 根目錄 (/) 的意義與內容:
根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的,同時根目錄也與開機/還原/系統修復等動作有關。由于系統開機時需要特定的開機軟件、核心文件、開機所需程序、函式庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。因為根目錄是這么的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分割槽內,因為越大的分割槽妳會放入越多的數據,如此一來根目錄所在分割槽就可能會有較多發生錯誤的機會。
因此FHS標準建議:根目錄(/)所在分割槽應該越小越好,且應用程序所安裝的軟件最好不要與根目錄放在同一個分割槽內,保持根目錄越小越好。如此不但效能較佳,根目錄所在的文件系統也較不容易發生問題。
有鑒于上述的說明,因此FHS定義出根目錄(/)底下應該要有底下這些次目錄的存在才好:
| 目錄 | 應放置文件內容 |
| /bin | 系統有很多放置執行文件的目錄,但/bin比較特殊。因為/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般賬號所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令。 |
| /boot | 這個目錄主要在放置開機會使用到的文件,包括Linux核心文件以及開機選單與開機所需配置文件等等。Linux kernel常用的檔名為:vmlinuz,如果使用的是grub這個開機管理程序,則還會存在/boot/grub/這個目錄喔! |
| /dev | 在Linux系統上,任何裝置與接口設備都是以文件的型態存在于這個目錄當中的。你只要透過存取這個目錄底下的某個文件,就等于存取某個裝置啰~比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等 |
| /etc | 系統主要的配置文件幾乎都放置在這個目錄內,例如人員的賬號密碼文件、各種服務的啟始檔等等。一般來說,這個目錄下的各文件屬性是可以讓一般使用者查閱的,但是只有root有權力修改。FHS建議不要放置可執行文件(binary)在這個目錄中喔。比較重要的文件有:/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目錄有:
|
| /home | 這是系統默認的用戶家目錄(home directory)。在你新增一個一般使用者賬號時,默認的用戶家目錄都會規范到這里來。比較重要的是,家目錄有兩種代號喔: ~:代表目前這個用戶的家目錄,而 ~dmtsai :則代表 dmtsai 的家目錄! |
| /lib | 系統的函式庫非常的多,而/lib放置的則是在開機時會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫而已。什么是函式庫呢?妳可以將他想成是『外掛』,某些指令必須要有這些『外掛』才能夠順利完成程序的執行之意。尤其重要的是/lib/modules/這個目錄,因為該目錄會放置核心相關的模塊(驅動程序)喔! |
| /media | media是『媒體』的英文,顧名思義,這個/media底下放置的就是可移除的裝置啦!包括軟盤、光盤、DVD等等裝置都暫時掛載于此。常見的檔名有:/media/floppy, /media/cdrom等等。 |
| /mnt | 如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。在古早時候,這個目錄的用途與/media相同啦!只是有了/media之后,這個目錄就用來暫時掛載用了。 |
| /opt | 這個是給第三方協力軟件放置的目錄。什么是第三方協力軟件啊?舉例來說,KDE這個桌面管理系統是一個獨立的計劃,不過他可以安裝到Linux系統中,因此KDE的軟件就建議放置到此目錄下了。另外,如果妳想要自行安裝額外的軟件(非原本的distribution提供的),那么也能夠將你的軟件安裝到這里來。不過,以前的Linux系統中,我們還是習慣放置在/usr/local目錄下呢! |
| /root | 系統管理員(root)的家目錄。之所以放在這里,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分割槽中。 |
| /sbin | Linux有非常多指令是用來設定系統環境的,這些指令只有root才能夠利用來『設定』系統,其他用戶最多只能用來『查詢』而已。放在/sbin底下的為開機過程中所需要的,里面包括了開機、修復、還原系統所需要的指令。至于某些服務器軟件程序,一般則放置到/usr/sbin/當中。至于本機自行安裝的軟件所產生的系統執行文件(system binary),則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等。 |
| /srv | srv可以視為『service』的縮寫,是一些網絡服務啟動之后,這些服務所需要取用的數據目錄。常見的服務例如WWW, FTP等等。舉例來說,WWW服務器需要的網頁數據就可以放置在/srv/www/里面。 |
| /tmp | 這是讓一般使用者或者是正在執行的程序暫時放置文件的地方。這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要數據不可放置在此目錄啊!因為FHS甚至建議在開機時,應該要將/tmp下的數據都刪除唷! |
事實上FHS針對根目錄所定義的標準就僅有上面的咚咚,不過我們的Linux底下還有許多目錄你也需要了解一下的。底下是幾個在Linux當中也是非常重要的目錄喔:
| 目錄 | 應放置文件內容 |
| /lost+found | 這個目錄是使用標準的ext2/ext3文件系統格式才會產生的一個目錄,目的在于當文件系統發生錯誤時,將一些遺失的片段放置到這個目錄下。這個目錄通常會在分割槽的最頂層存在,例如你加裝一顆硬盤于/disk中,那在這個系統下就會自動產生一個這樣的目錄『/disk/lost+found』 |
| /proc | 這個目錄本身是一個『虛擬文件系統(virtual filesystem)』喔!他放置的數據都是在內存當中,例如系統核心、行程信息(process)、周邊裝置的狀態及網絡狀態等等。因為這個目錄下的數據都是在內存當中,所以本身不占任何硬盤空間啊!比較重要的文件例如:/proc/cpuinfo,/proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等。 |
| /sys | 這個目錄其實跟/proc非常類似,也是一個虛擬的文件系統,主要也是記錄與核心相關的信息。包括目前已加載的核心模塊與核心偵測到的硬件裝置信息等等。這個目錄同樣不占硬盤容量喔! |
除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載,其他分割槽則是在開機完成之后才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄,就不能夠與根目錄放到不同的分割槽去!那哪些目錄不可與根目錄分開呢?有底下這些:
- /etc:配置文件
- /bin:重要執行檔
- /dev:所需要的裝置文件
- /lib:執行檔所需的函式庫與核心所需的模塊
- /sbin:重要的系統執行文件
這五個目錄千萬不可與根目錄分開在不同的分割槽!請背下來啊!好了,談完了根目錄,接下來我們就來談談/usr以及/var!先看/usr里面有些什么東西:
- /usr 的意義與內容:
依據FHS的基本定義,/usr里面放置的數據屬于可分享的與不可變動的(shareable, static),如果你知道如何透過網絡進行分割槽的掛載(例如在服務器篇會談到的NFS服務器),那么/usr確實可以分享給局域網絡內的其他主機來使用喔!
很多讀者都會誤會/usr為user的縮寫,其實usr是Unix Software Resource的縮寫,也就是『Unix操作系統軟件資源』所放置的目錄,而不是用戶的數據啦!這點要注意。FHS建議所有軟件開發者,應該將他們的數據合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄。
因為是所有系統默認的軟件(distribution發布者提供的軟件)都會放置到/usr底下,因此這個目錄有點類似Windows系統的『C:\Windows\ + C:\Program files\』這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會占用最多的硬盤容量。一般來說,/usr的次目錄建議有底下這些:
| 目錄 | 應放置文件內容 |
| /usr/X11R6/ | 為X Window System重要數據所放置的目錄,之所以取名為X11R6是因為最后的X版本為第11版,且該版的第6次釋出之意。 |
| /usr/bin/ | 絕大部分的用戶可使用指令都放在這里!請注意到他與/bin的不同之處。(是否與開機過程有關) |
| /usr/include/ | c/c++等程序語言的檔頭(header)與包含檔(include)放置處,當我們以tarball方式 (*.tar.gz 的方式安裝軟件)安裝某些數據時,會使用到里頭的許多包含檔喔! |
| /usr/lib/ | 包含各應用軟件的函式庫、目標文件(object file),以及不被一般使用者慣用的執行檔或腳本(script)。某些軟件會提供一些特殊的指令來進行服務器的設定,這些指令也不會經常被系統管理員操作,那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統,那可能會有/usr/lib64/目錄產生喔! |
| /usr/local/ | 系統管理員在本機自行安裝自己下載的軟件(非distribution默認提供者),建議安裝到此目錄,這樣會比較便于管理。舉例來說,你的distribution提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版,此時你可以將新版軟件安裝于/usr/local/目錄下,可與原先的舊版軟件有分別啦!你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib...的次目錄喔! |
| /usr/sbin/ | 非系統正常運作所需要的系統指令。最常見的就是某些網絡服務器軟件的服務指令(daemon)啰! |
| /usr/share/ | 放置共享文件的地方,在這個目錄下放置的數據幾乎是不分硬件架構均可讀取的數據,因為幾乎都是文本文件嘛!在此目錄下常見的還有這些次目錄:
|
| /usr/src/ | 一般原始碼建議放置到這里,src有source的意思。至于核心原始碼則建議放置到/usr/src/linux/目錄下。 |
- /var 的意義與內容:
如果/usr是安裝時會占用較大硬盤容量的目錄,那么/var就是在系統運作后才會漸漸占用硬盤容量的目錄。因為/var目錄主要針對常態性變動的文件,包括緩存(cache)、登錄檔(log file)以及某些軟件運作所產生的文件,包括程序文件(lock file, run file),或者例如MySQL數據庫的文件等等。常見的次目錄有:
| 目錄 | 應放置文件內容 |
| /var/cache/ | 應用程序本身運作過程中會產生的一些暫存檔; |
| /var/lib/ | 程序本身執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟件應該要有各自的目錄。舉例來說,MySQL的數據庫放置到/var/lib/mysql/而rpm的數據庫則放到/var/lib/rpm去! |
| /var/lock/ | 某些裝置或者是文件資源一次只能被一個應用程序所使用,如果同時有兩個程序使用該裝置時,就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟件所使用。舉例來說,刻錄機正在刻錄一塊光盤,你想一下,會不會有兩個人同時在使用一個刻錄機燒片?如果兩個人同時刻錄,那片子寫入的是誰的數據?所以當第一個人在刻錄時該刻錄機就會被上鎖,第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用啰。 |
| /var/log/ | 重要到不行!這是登錄文件放置的目錄!里面比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等。 |
| /var/mail/ | 放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中!通常這兩個目錄是互為鏈接文件啦! |
| /var/run/ | 某些程序或者是服務啟動后,會將他們的PID放置在這個目錄下喔!至于PID的意義我們會在后續章節提到的。 |
| /var/spool/ | 這個目錄通常放置一些隊列數據,所謂的『隊列』就是排隊等待其他程序使用的數據啦!這些數據被使用后通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中,但使用者收下該信件后該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中,等到被送出后就被刪除。如果是工作排程數據(crontab),就會被放置到/var/spool/cron/目錄中! |
建議在你讀完整個基礎篇之后,可以挑戰FHS官方英文文件(參考本章參考資料),相信會讓你對于Linux操作系統的目錄有更深入的了解喔!
- 針對FHS,各家distributions的異同
由于FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的文件或目錄數據,因此,在其他次目錄層級內,就可以隨開發者自行來配置了。舉例來說,CentOS的網絡設定數據放在 /etc/sysconfig/network-scripts/ 目錄下,但是SuSE則是將網絡放置在/etc/sysconfig/network/ 目錄下,目錄名稱可是不同的呢!不過只要記住大致的FHS標準,差異性其實有限啦!
目錄樹(directory tree)
另外,在Linux底下,所有的文件與目錄都是由根目錄開始的!那是所有目錄與文件的源頭~然后再一個一個的分支下來,有點像是樹枝狀啊~因此,我們也稱這種目錄配置方式為:『目錄樹(directory tree)』這個目錄樹有什么特性呢?他主要的特性有:
- 目錄樹的啟始點為根目錄 (/, root);
- 每一個目錄不止能使用本地端的 partition 的文件系統,也可以使用網絡上的 filesystem 。舉例來說,可以利用 Network File System (NFS) 服務器掛載某特定目錄等。
- 每一個文件在此目錄樹中的文件名(包含完整路徑)都是獨一無二的。
好,談完了FHS的標準之后,實際來看看CentOS在根目錄底下會有什么樣子的數據吧!我們可以下達以下的指令來查詢:
| [root@www ~]# ls -l / drwxr-xr-x 2 root root 4096 Sep 5 12:34 bin drwxr-xr-x 4 root root 1024 Sep 4 18:06 boot drwxr-xr-x 12 root root 4320 Sep 22 12:10 dev drwxr-xr-x 105 root root 12288 Sep 22 12:10 etc drwxr-xr-x 4 root root 4096 Sep 5 14:08 home drwxr-xr-x 14 root root 4096 Sep 5 12:12 lib drwx------ 2 root root 16384 Sep 5 01:49 lost+found drwxr-xr-x 2 root root 4096 Mar 30 2007 media drwxr-xr-x 2 root root 0 Sep 22 12:09 misc drwxr-xr-x 2 root root 4096 Mar 30 2007 mnt drwxr-xr-x 2 root root 0 Sep 22 12:09 net drwxr-xr-x 2 root root 4096 Mar 30 2007 opt dr-xr-xr-x 95 root root 0 Sep 22 2008 proc drwxr-x--- 4 root root 4096 Sep 8 14:06 root drwxr-xr-x 2 root root 12288 Sep 5 12:33 sbin drwxr-xr-x 4 root root 0 Sep 22 2008 selinux drwxr-xr-x 2 root root 4096 Mar 30 2007 srv drwxr-xr-x 11 root root 0 Sep 22 2008 sys drwxrwxrwt 6 root root 4096 Sep 22 12:10 tmp drwxr-xr-x 14 root root 4096 Sep 4 18:00 usr drwxr-xr-x 26 root root 4096 Sep 4 18:19 var |
上面表格中比較特殊的應該是/selinux這個目錄了,這個目錄的內容數據也是在內存中的信息,同樣的不會占用任何的硬盤容量。這個/selinux是Secure Enhance Linux(SELinux)的執行目錄,而SELinux是Linux核心的重要外掛功能之一,他可以用來作為細部權限的控管,主要針對程序(尤其是網絡程序)的訪問權限來限制。關于SELinux我們會在后續的章節繼續做介紹的喔!
如果我們將整個目錄樹以圖標的方法來顯示,并且將較為重要的文件數據列出來的話,那么目錄樹架構有點像這樣:
圖3.2.1、目錄樹架構示意圖
鳥哥只有就各目錄進行簡單的解釋,看看就好,詳細的解釋請回到剛剛說明的表格中去查閱喔!看完了FHS標準之后,現在回到第三章里面去看看安裝前Linux規劃的分割情況,對于當初為何需要分割為這樣的情況,有點想法了嗎?^_^。根據FHS的定義,妳最好能夠將/var獨立出來,這樣對于系統的數據還有一些安全性的保護呢!因為至少/var死掉時,你的根目錄還會活著嘛!還能夠進入救援模式啊!
絕對路徑與相對路徑
除了需要特別注意的FHS目錄配置外,在文件名部分我們也要特別注意喔!因為根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。這兩種文件名/路徑的寫法依據是這樣的:
- 絕對路徑:由根目錄(/)開始寫起的文件名或目錄名稱,例如 /home/dmtsai/.bashrc;
- 相對路徑:相對于目前路徑的文件名寫法。例如 ./home/dmtsai 或 ../../home/dmtsai/ 等等。反正開頭不是 / 就屬于相對路徑的寫法
而你必須要了解,相對路徑是以『你當前所在路徑的相對位置』來表示的。舉例來說,你目前在 /home 這個目錄下,如果想要進入 /var/log 這個目錄時,可以怎么寫呢?
因為你在 /home 底下,所以要回到上一層 (../) 之后,才能繼續往 /var 來移動的!特別注意這兩個特殊的目錄:
- . ?:代表當前的目錄,也可以使用 ./ 來表示;
- .. :代表上一層目錄,也可以 ../ 來代表。
這個 . 與 .. 目錄概念是很重要的,你常常會看到 cd .. 或 ./command 之類的指令下達方式,就是代表上一層與目前所在目錄的工作狀態喔!很重要的吶!
| 例題: 如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內? 答: 由于/var/spool/mail與/var/spool/cron是同樣在/var/spool/目錄中,因此最簡單的指令下達方法為: |
| 例題: 網絡文件常常提到類似『./run.sh』之類的數據,這個指令的意義為何? 答: 由于指令的執行需要變量(bash章節才會提到)的支持,若你的執行文件放置在本目錄,并且本目錄并非正規的執行文件目錄(/bin, /usr/bin等為正規),此時要執行指令就得要嚴格指定該執行檔。『./』代表『本目錄』的意思,所以『./run.sh』代表『執行本目錄下,名為run.sh的文件』啰! |
CentOS 的觀察
某些時刻你可能想要知道你的 distribution 使用的是那個 Linux 標準 (Linux Standard Base),而且我們也知道 distribution 使用的都是 Linux 的核心!那你如何觀察這些基本的信息呢?可以使用如下的指令來觀察看看啦:
| [root@www ~]# uname -r 2.6.18-128.el5 <==可以察看實際的核心版本 [root@www ~]# lsb_release -a LSB Version: :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64: graphics-3.1-ia32:graphics-3.1-noarch <==LSB 的版本 Distributor ID: CentOS Description: CentOS release 5.3 (Final) <==distribution 的版本 Release: 5.3 Codename: Final |
重點回顧
- Linux的每個文件中,依據權限分為使用者、群組與其他人三種身份;
- 群組最有用的功能之一,就是當你在團隊開發資源的時候,且每個賬號都可以有多個群組的支持;
- 利用ls -l顯示的文件屬性中,第一個字段是文件的權限,共有十個位,第一個位是文件類型,接下來三個為一組共三組,為使用者、群組、其他人的權限,權限有r,w,x三種;
- 如果檔名之前多一個『 . 』,則代表這個文件為『隱藏檔』;
- 更改文件的群組支持可用chgrp,修改文件的擁有者可用chown,修改文件的權限可用chmod
- chmod修改權限的方法有兩種,分別是符號法與數字法,數字法中r,w,x分數為4,2,1;
- 對文件來講,權限的效能為:
- r:可讀取此一文件的實際內容,如讀取文本文件的文字內容等;
- w:可以編輯、新增或者是修改該文件的內容(但不含刪除該文件);
- x:該文件具有可以被系統執行的權限。
- 對目錄來說,權限的效能為:
- r (read contents in directory)
- w (modify contents of directory)
- x (access directory)
- 要開放目錄給任何人瀏覽時,應該至少也要給予r及x的權限,但w權限不可隨便給;
- Linux檔名的限制為:單一文件或目錄的最大容許文件名為 255 個字符;包含完整路徑名稱及目錄 (/) 之完整檔名為 4096 個字符
- 根據FHS的官方文件指出, 他們的主要目的是希望讓使用者可以了解到已安裝軟件通常放置于那個目錄下
- FHS訂定出來的四種目錄特色為:shareable, unshareable, static, variable等四類;
- FHS所定義的三層主目錄為:/, /var, /usr三層而已;
- 有五個目錄不可與根目錄放在不同的partition,分別為/etc, /bin, /lib, /dev, /sbin五個。
本章練習
( 要看答案請將鼠標移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
- 請說明/bin與/usr/bin目錄所放置的執行文件有何不同之處? /bin主要放置在開機時,以及進入單人維護模式后還能夠被使用的指令,至于/usr/bin則是大部分軟件提供的指令放置處。
- 請說明/bin與/sbin目錄所放置的執行文件有何不同之處? /bin放置的是一般用戶慣用的指令,至于/sbin則是系統管理員才會使用到的指令。不過/bin與/sbin都與開機、單人維護模式有關。更多的執行檔會被放置到/usr/bin及/usr/sbin底下。
- 哪幾個目錄不能夠與根目錄(/)放置到不同的partition中?并請說明該目錄所放置的數據為何? /etc(配置文件), /bin(一般身份可用執行文件), /dev(裝置文件), /lib(執行檔的函式庫或核心模塊等), /sbin(系統管理員可用指令)
- 試說明為何根目錄要小一點比較好?另外在分割時,為什么/home, /usr, /var, /tmp最好與根目錄放到不同的分割槽?試說明可能的原因為何(由目錄放置數據的內容談起)? 根據FHS的說明,越小的/可以放置的較為集中且讀取頻率較不頻繁,可避免較多的錯誤。至于/home(用戶家目錄), /usr(軟件資源), /var(變動幅度較大的數據), /tmp(系統暫存,數據莫名)中,因為數據量較大或者是讀取頻率較高,或者是不明的使用情況較多,因此建議不要與根目錄放在一起,也會有助于系統安全。
- 早期的 Unix 系統文件名最多允許 14 個字符,而新的 Unix 與 Linux 系統中,文件名最多可以容許幾個字符? 由于使用Ext2/Ext3文件系統,單一檔名可達 255 字符,完整文件名 (包含路徑) 可達 4096 個字符
- 當一個一般文件權限為 -rwxrwxrwx 則表示這個文件的意義為? 任何人皆可讀取、修改或編輯、可以執行,但不一定能刪除。
- 我需要將一個文件的權限改為 -rwxr-xr-- 請問該如何下達指令? chmod 754 filename 或 chmod u=rwx,g=rx,o=r filename
- 若我需要更改一個文件的擁有者與群組,該用什么指令? chown, chgrp
- Linux 傳統的文件系統為何?此外,常用的 Journaling 文件格式有哪些? 傳統文件格式為:ext2,
Journaling 有 ext3 及 Reiserfs 等 - 請問底下的目錄與主要放置什么數據:
/etc/, /etc/init.d, /boot, /usr/bin, /bin, /usr/sbin, /sbin, /dev, /var/log- /etc/:幾乎系統的所有配置文件案均在此,尤其 passwd,shadow
- /etc/init.d:系統開機的時候加載服務的 scripts 的擺放地點
- /boot:開機配置文件,也是預設擺放核心 vmlinuz 的地方
- /usr/bin, /bin:一般執行檔擺放的地方
- /usr/sbin, /sbin:系統管理員常用指令集
- /dev:擺放所有系統裝置文件的目錄
- /var/log:擺放系統注冊表文件的地方
- 若一個文件的檔名開頭為『 . 』,例如 .bashrc 這個文件,代表什么?另外,如何顯示出這個文件名與他的相關屬性? 有『 . 』為開頭的為隱藏檔,需要使用 ls -a 這個-a 的選項才能顯示出隱藏文件的內容,而使用 ls -al 才能顯示出屬性。
參考資料與延伸閱讀
- FHS的標準官方文件:http://proton.pathname.com/fhs/,非常值得參考的文獻!
- 關于 Journaling 日志式文章的相關說明 http://www.linuxplanet.com/linuxplanet/reports/3726/1/
2002/07/18:第一次完成
2003/02/06:重新編排與加入FAQ
2005/06/28:將舊的數據移動到 這里
2005/07/15:呼呼~終于改完成了~這次的修訂當中,加入了 FHS 的說明,希望大家能夠比較清楚 Linux 的目錄配置!
2005/08/05:修訂了最大檔名字元,應該是 255 才對!另外,加入了『檔名限制』的部分!
2005/09/03:修訂了目錄權限相關的說明,將原本僅具有 r 卻寫成無法使用 ls 瀏覽的說明數據移除!
2008/09/08:舊的針對FC4所寫的文章移動到此處
2008/09/20:針對FHS加強說明了一下,分為/, /usr, /var三層來個別說明!并非抄襲官網的數據而已喔!
2008/09/23:經過一場大感冒,停工了四、五天,終于還是給他完工了!^_^
2008/10/21:原本的第四小節 Linux 的文件系統,因為與第八章重復性太高,將他移除了!
2009/08/01:加入了 lsb_release 的相關說明!
2009/08/18:調整一下顯示的情況,使得更易讀~
出處:http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission.php
總結
以上是生活随笔為你收集整理的鸟哥的Linux私房菜(基础篇)- 第六章、Linux 的文件权限与目录配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸟哥的Linux私房菜(基础篇)-第五章
- 下一篇: 鸟哥的Linux私房菜(基础篇)- 第七