使用者與群組
初次接觸 Linux 的朋友大概會覺得很怪異,怎麼『Linux 有這麼多使用者,還分什麼群組,有什麼用?』。這個『使用者與群組』的功能可是相當健全而好用的一個安全防護呢!怎麼說呢?由於 Linux 是個多人多工的系統 ( 已經提過若干次啰! ),因此可能常常會有多人同時使用這部主機來進行工作的情況發生,為了考慮每個人的隱私權,因此,這個『檔案擁有者』的角色就顯的相當的重要了!例如當你將你的e-mail情書轉存成檔案之後,放在您自己的家目錄,您總不希望被其他人看見自己的情書吧?這個時候,你就把該檔案設定成『只有檔案擁有者,就是我,才能看與修改這個檔案的內容』,那麼即使其他人知道你有這個相當『有趣』的檔案,不過由於您有設定適當的權限,所以其他人自然也就無法知道該檔案的內容啰!
那麼群組呢?為何要設定檔案還有所屬的群組?其實,群組最簡單的功能之一,就是當您在團隊開發資源的時候最有用啦!舉個例子來說好了,假如在我的主機上面有兩個團體,這第一個團體名稱為 testgroup 而他的成員是 test1, test2, test3 三個,第二個團體名稱為 treatgoup 他的團員為 treat1, treat2, treat3,這兩個團體之間是互相有競爭性質的,但是卻又要繳交同一份報告,然而每組團員又需要同時可以修改自己的團體內任何人所建立的檔案,且不能讓非自己團體以外的人看到自己的檔案內容!這個時候怎麼辦?呵呵!在 Linux 底下可就很簡單啦!我可以經由簡易的檔案權限設定,就能限制非自己團隊( 亦即是群組啰 )的其他人不能夠閱覽內容啰!而且亦可以讓自己的團隊成員可以修改我所建立的檔案!同時,如果我自己還有私人隱密的文件,仍然可以設定成讓自己的團隊成員也看不到我的檔案資料?很方便吧!另外,如果 teacher 這個帳號是 testgroup 與 treatgroup 這兩個群組的老師,他想要同時觀察兩者的進度,因此需要兩邊的群組都能夠進去觀看,這個時候,您可以設定 teacher 這個帳號,『同時支援 testgroup 與 treatgroup 這兩個群組!』,也就是說,每個人都可以有多個群組的支援呢!
這樣說或許你還不容易理解這個使用者與群組的關系吧?沒關系,我們可以使用目前『家庭』的觀念來進行解說喔!假設有一家人,家裡只有三兄弟,分別是王大毛、王二毛與王三毛三個人,而這個家庭是登記在王大毛的名下的!所以,『王大毛家有三個人,分別是王大毛、王二毛與王三毛』,而且這三個人都有自己的房間,並且共同擁有一個客廳喔!
·由於王家三個人各自擁有自己的房間,所以,王二毛雖然可以進入王三毛的房間,但是二毛不能翻三毛的抽屜喔!那樣會被三毛 K 的!因為抽屜裡面可能有三毛自己私人的東西,例如情書啦,日記啦等等的,這是『私人的空間』,所以當然不能讓二毛拿啰!
·由於共同擁有客廳,所以王家三兄弟可以在客廳打開電視機啦、翻閱報紙啦、坐在沙發上面發呆啦等等的!反正,只要是在客廳的玩意兒,三兄弟都可以使用喔!因為大家都是一家人嘛!
這樣說來應該有點曉得了喔!那個『王大毛家』就是所謂的『群組』啰,至於三兄弟就是分別為三個『使用者』,而這三個使用者是在同一個群組裡面的喔!而三個使用者雖然在同一群組內,但是我們可以設定『權限』,好讓某些使用者個人的資訊不被群組的所有人查詢,以保有個人『私人的空間』啦!而設定群組共享,則可讓大家共同分享喔!
好了,那麼今天又有個人,叫做張小豬,他是張小豬家的人,與王家沒有關系啦!這個時候,除非王家認識張小豬,然後開門讓張小豬進來王家,否則張小豬永遠沒有辦法進入王家,更不要說進到王三毛的房間啦!不過,如果張小豬透過關系認識了三毛,並且跟王三毛成為好朋友,那麼張小豬就可以透過三毛進入王家啦!呵呵!沒錯!那個張小豬就是所謂的『其他人, Others 』啰!因此,我們就可以知道啦,在 Linux 裡面,任何一個檔案都具有『User, Group 及 Others』三個權限!我們可以將上面的說明以底下的圖示來解釋:
不過,這裡有個特殊的人物要來介紹的,那就是『萬能的天神』!這個天神具有無限的神力,所以他可以到達任何他想要去的地方,呵呵!那個人在 Linux 系統中的身份代號是『 root 』啦!所以要小心喔!那個 root 可是『萬能的天神』喔!
無論如何,『使用者身份』,與該使用者所支援的『群組』概念,在 Linux 的世界裡面是相當的重要的,他可以幫助您讓您的多工 Linux 環境變的更容易管理!更詳細的『身份與群組』 設定,我們將在帳號管理再進行解說。底下我們將針對檔案系統與檔案權限來進行說明。
Linux 檔案屬性:
大致了解了 Linux 的使用者與群組之後,接著下來,我們要來談一談,那麼這個檔案的權限要如何針對這些所謂的『使用者』與『群組』來設定該檔案的權限呢?這個部分是相當的重要的,尤其對於初學者來說,因為檔案的權限與屬性是學習 Linux 的一個相當重要的關卡,如果沒有這部份的概念,那麼您將老是聽不懂別人在講什麼呢!尤其是當您在您的螢幕前面出現了『Permission deny』的時候,不要擔心,『肯定是權限設定錯誤』啦!呵呵!好了,閒話不多聊,趕快來瞧一瞧先:
嗯!既然要讓你了解 Linux 的檔案屬性,那麼有個重要的也是常用的指令就必須要先跟你說啰!那一個?!就是『 ls 』這一個 list 檔案的指令啰!在你以 root 的身份登入 Linux 之後,下達『ls -al 』看看,會看到底下的幾個咚咚:
[root@tsai root]# ls -al total 64 drwxr-x---4 root root 4096 Feb 14 22:02 . drwxr-xr-x 23 root root 4096 Feb 16 13:35 .. -rw-r--r--1 root root 1210 Feb 10 06:03 anaconda-ks.cfg -rw-------1 root root12447 Feb 14 23:22 .bash_history -rw-r--r--1 root root 24 Jun 11 2000 .bash_logout -rw-r--r--1 root root 234 Jul 6 2001 .bash_profile -rw-r--r--1 root root 217 Feb 9 22:06 .bashrc -rw-r--r--1 root root 210 Jun 11 2000 .cshrc drwx------2 root root 4096 Feb 14 21:54 .gnupg -rw-------1 root root8 Feb 14 22:05 .mysql_history drwx------2 root root 4096 Feb 10 00:44 .ssh -rw-r--r--1 root root 196 Jul 11 2000 .tcshrc -rw-r--r--1 root root 1126 Aug 24 1995 .Xresources 第一欄 二 三 四五 六七 [檔案屬性][檔案數][擁有者][所有者群組][大小][建檔日期][檔名]
ls 是『list』的意思,與在早期的 DOS 年代的 dir 類似功能。而參數『-al』則表示列出所有的檔案(包含隱藏檔,就是檔名前面第一個字元為 . 的那種檔案)。如上所示,在你第一次以 root 身份登入 Linux 時,如果你輸入指令後,應該有上列的幾個東西,先解釋一下上面七個欄位個別的意思:
1. 第一欄代表這個檔案的屬性:這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個屬性:
1.
o第一個屬性代表這個檔案是『目錄、檔案或連結檔』:
§當為[ d ]則是目錄,例如上表的第 11 行;
§為[ - ]則是檔案,例如上表的第 5 行;
§若是[ l ]則表示為連結檔(link file);
§若是[ b ]則表示為裝置檔裡面的可供儲存的周邊設備;
§若是[ c ]則表示為裝置檔裡面的序列埠設備,例如鍵盤、滑鼠。
o接下來的屬性中,三個為一組,且均為『rwx』的三個參數的組合。其中,[ r ]代表可讀、[ w ]代表可寫、[ x ]代表可執行:
§ 第一組為『所有人的權限』,以第五行為例,該檔案的所有人可以讀寫,但不可執行;
§第二組為『同群組的權限』;
§第三組為『其他非本群組的權限』。
范例:若有一個檔案的屬性為『-rwxr-xr--』,簡單的可由下面說明之:
[-][rwx][r-x][r--] 1 234 567 890 1 為:代表這個檔名為目錄或檔案(上面為檔案) 234為:擁有人的權限(上面為可讀、可寫、可執行) 567為:同群組使用者權限(上面為可讀可執行) 890為:其他使用者權限(上面為僅可讀)
上面的屬性情況代表一個檔案、這個檔案的擁有人可讀可寫可執行、但同群組的人僅可讀與執行,非同群組的使用者僅可讀的意思!
o除此之外,需要特別留意的是 x 這個標號!若檔名為一個目錄的時候,例如上表中的 .ssh 這個目錄:
drwx------2 root root 4096 Feb 10 00:44 .ssh
可以看到這是一個目錄,而且只有 root 可以讀寫與執行。但是若為底下的樣式時,請問非 root 的其他人是否可以進入該目錄呢?
drwxr--r--2 root root 4096 Feb 10 00:44 .ssh
咦!似乎好象是可以喔!因為有可讀[ r ]存在嘛!『錯!』答案是非 root 這個帳號的其他使用者均不可進入 .ssh 這個目錄,為什麼呢?因為 x 與 目錄 的關系相當的重要,如果您在該目錄底下不能執行任何指令的話,那麼自然也就無法執行 ls, cd 等指令,所以啰,也就無法進入了,因此,請特別留意的是,如果您想要開放某個目錄讓一些人進來的話,請記得將該目錄的 x 屬性給開放呦!
o另外,你也必須要更加的小心的是,在 Windows 底下一個檔案是否具有執行的能力是藉由『附檔名』來執行的,例如:.exe, .bat, .com 等等,但是在 Linux 底下,我們的檔案是否能執行,則是藉由是否具有 x 這個屬性來決定的!所以,跟檔名是沒有絕對的關系的!這點還請特別留意呢!
2.第二欄表示為連結占用的節點 (i-node) ( 若為目錄時,通常與該目錄底下還有多少目錄有關 )這部分將在介紹連結 link 檔案時 (下一節) 再深入的介紹!;
3.第三欄表示這個檔案(或目錄)的『擁有人』;
4.第四欄表示擁有人的群組;
這裡再次解釋一下,在 Linux 中,你的 ID ( 如 root 或 test 等帳號均是所謂的 ID ) 即是你的身份,而且你還有附屬在一個或多個群組之下,例如剛剛我們上面提到的,你有一個團體 ( 即群組 ) 代號為 testgroup ,且這個群體裡有三個人,其代號分別是 test1, test2, 與 test3,則這三個人為同一群組即 testgroup!那麼如果以上圖的[-rwxrwx---]的檔案屬性來看,如果該檔案屬於 test1 所有,那麼 test2, test3 亦有讀、寫、執行的權力,因為他們都屬於同一個 group 呀!而如果您不是屬於 test1, test2, test3 的任何一個人,也不屬於 testgroup 這個群組時,那麼您將不具備讀、寫、執行這個檔案的權限了!
5.第五欄為這個檔案的大小;
6.第六欄為這個檔案的建檔日期或者是最近的修改日期,分別為月份、日期及時間。請特別留意,如果您是以繁體中文來進行安裝您的 Linux 時,那麼預設的語系可能會被改為中文。而由於中文無法顯示在文字型態的終端機上面,所以這一欄會成為怪怪的亂碼,這個時候,請修改一下 /etc/sysconfig/i18n 這個檔案,裡面的『 LC_TIME 』修改為:『 LC_TIME=en 』再儲存離開,再登入一次,就可以得到英文字形顯示的日期了!那麼如何修改該檔案呢?呵呵!以 root 身份用 vi 修改! ;
7. 第七欄為這個檔案的檔名,如果檔名之前多一個『 . 』,則代表這個檔案為『隱藏檔』,例如上表第 6 行的『.bashrc_history』檔名即是隱藏檔,由於我們有下一個參數為 ls -al,所以連隱藏檔都列出來,如果你只輸入 ls 則檔名有加『 . 』的檔案就不會被顯示出來!
對於更詳細的 ls 用法,還記得怎麼查詢嗎?對啦!使用 man ls 或 info ls 去看看他的基礎用法去!自我進修是很重要的,因為『師傅帶進門,修行在個人!』,自古只有天才學生,沒有天才老師呦!加油吧! ^_^
· 例題一:如果有下面的兩個檔案: -rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt -rwxr-xr-- 1 test1testgroup5238 Jun 19 10:25 ping_tsai 請說明兩個檔案的擁有者與其相關的權限為何? 答: o 檔案『 test.txt 』的擁有人為 root ,群組為 root 。至於權限方面則只有 root 這個帳號可以存取此檔案,其他人則僅能讀此檔案; o 另一個檔案『 ping_tsai 』的擁有人為 test1 ,而群組為 testgroup。其中, test1 可以針對此檔案具有可讀可寫可執行的權力,而同群組的 test2, test3 兩個人與 test1 同樣是 testgroup 的群組帳號,則僅可讀可執行但不能寫 (亦即不能修改),至於非 testgoup 這一個群組的人則僅可以讀,不能寫也不能執行!
·例題二:如果我的目錄為底下的樣式: drwxr-xr-- 1 test1testgroup5238 Jun 19 10:25 groups/ 請問 testgroup 這個群組的成員與其他人( others )是否可以進入本目錄? 答: o 檔案擁有者 test1 可以在本目錄中進行任何工作; o 而 testgroup 這個群組的帳號,例如 test2, test3 亦可以進入本目錄進行工作,但是不能在本目錄下進行寫入的動作; o 至於 other 的權限中雖然有 r ,但是由於沒有 x 的權限,因此 others 的使用者,並不能進入此目錄!
Linux 檔案屬性的重要性:
與 Windows 系統不一樣的是,在 Linux 系統(或者說 Unix-Like 系統)當中,每一個檔案都多加了很多的屬性進來,尤其是群組的概念,這樣有什麼用途呢?基本上,最大的用途是在『安全性』上面的。舉個簡單的例子,在你的系統中,關於系統服務的檔案通常只有 root 才能讀寫,或者是執行,例如 /etc/shadow這一個帳號管理的檔案,由於該檔案記錄了你的系統中的所有帳號的資料,因此是很重要的一個資訊檔,當然不能讓任何人讀取,只有 root 才能夠來讀取啰!所以該檔案的屬性就會成為 [ -rw------- ]啰!
那麼,如果你有一個開發團隊,在你的團對中,你希望每個人都可以使用某一些目錄下的檔案,而非你的團隊的其他人則不予以開放呢?以上面的例子來說,testgroup 的團隊共有三個人,分別是 test1, test2, test3 !那麼我就可以將 test1 的檔案屬性訂為 [ -rwxrwx--- ]來提供給 testgroup 的工作團隊使用啰!這可是相當重要的。
再舉個例子來說,如果你的目錄權限沒有作好的話,可能造成其他人都可以在你的系統上面亂搞啰!例如本來只有 root 才能做的開關機、ADSL 的撥接程式、新增或刪除使用者等等的指令,若被你改成任何人都可以執行的話,那麼如果使用者不小心給你重新開機啦!重新撥接啦!等等的!那麼你的系統不就會常常莫名其妙的掛掉啰!而且萬一你的使用者的密碼被其他不明人士取得的話,只要他登入你的系統就可以輕而易舉的執行一些 root 的工作!可怕吧!因此,在你修改你的 linux 檔案與目錄的屬性之前,一定要先搞清楚,什麼是可變的,什麼是不可變的!千萬注意啰!
如何改變檔案權限
好了,我們已經知道檔案權限對於一個系統的安全重要性了,也知道檔案的權限對於使用者與群組的相關性了,好了,那麼如何修改一的檔案的權限呢?又!有多少檔案的權限我們可以修改呢?其實一個檔案的權限很多嘛!大致上我們先介紹幾個簡單的,例如:群組、擁有者、各種身份的權限等等。
chgrp :改變檔案所屬群組
chown :改變檔案所屬人
chmod :改變檔案的屬性、 SUID 、等等的特性
· 改變所屬群組, chgrp:
改變一個檔案的群組也真是很簡單的,直接以 chgrp 來改變即可,咦!這個指令就是 change group 的縮寫嘛!對啦!這樣就很好記了吧! ^_^。不過,請記得,要改變成為的群組名稱必須要在 /etc/group 裡面存在的名字才行,否則就會顯示錯誤!例如底下的例子中,我們要將 tmp 的群組改變一下,其中, users 這個群組本身已經存在 /etc/group 當中了,但是 testing 這個群組名字就不存在 /etc/group 當中,所以就會有錯誤訊息發生啦!
語法: chgrp 群組名稱檔案或目錄 范例: [root@test root]# chgrp users tmp [root@test root]# ls –l drwx------2 root root 4096 Oct 19 11:43 drakx/ drwx------2 root users4096 Oct 19 21:24 tmp/ [root@test root]# chgrp testing tmp chgrp: invalid group name `testing' <==發生錯誤訊息啰!
·
·
· 改變所屬群組, chown:
好了,那麼如何改變一個檔案的擁有者呢?很簡單呀!既然改變群組是 change group ,那麼改變擁有者就是 change owner 啰!BINGO,對啦!那就是 chown 這個指令的用途,要注意的是,使用者必須是已經存在系統中的,也就是在 /etc/passwd 這個檔案中有紀錄的使用者名稱才行改變。 chown 的用途還滿多的,他還可以順便直接修改群組的名稱呢!此外,如果要連目錄下的所有次目錄或檔案同時更改檔案擁有者的話,直接加上 –R 的參數即可!我們來看看語法與范例:
語法: chown [ -R ] 帳號名稱 檔案或目錄 chown [ -R ] 帳號名稱:群組名稱 檔案或目錄 范例: [root@test root]# chown test tmp [root@test root]# ls -l total 28 drwx------2 root root 4096 Oct 19 11:43 drakx/ drwx------2 test users4096 Oct 19 21:24 tmp/ [root@test root]# chown –R root:root tmp [root@test root]# ls –l drwx------2 root root 4096 Oct 19 11:43 drakx/ drwx------2 root root 4096 Oct 19 21:24 tmp/
·
嗯!知道如何改變檔案的群組與擁有者了,那麼什麼時候要使用 chown 或 chgrp 呢?!或許您會覺得奇怪吧?!是的,確實有時候需要變更檔案的擁有者的,最常見的例子就是在 copy 檔案給你之外的其他人時,我們使用最簡單的 cp 來說明好了,
語法: cp 來源檔案目的檔案
·
假設您今天要將 .bashrc 這個檔案拷貝成為 .bashrc_test ,且是要給 test 這個人,您可以這樣做:
[root@test root]# cp .bashrc .bashrc_test [root@test root]# ls –al .bashrc* -rw-r--r--1 root root 226 Feb 16 2002 .bashrc -rw-r--r--1 root root 226 Oct 21 14:24 .bashrc_test
哇!怎麼辦? .bashrc_test 還是屬於 root 所有,如此一來,即使你將檔案拿給 test 這個使用者了,那他仍然無法修改的( 看屬性就知道了吧! ),所以你就必須要將這個檔案的擁有者與群組修改一下啰!知道如何修改了吧!?呵呵!
·改變九個屬性 ( chmod ):
數字類型改變檔案權限
其實, Linux 檔案的屬性不只九個呦!不過這裡不打算寫的太復雜!先說一些簡單的,較難的以後有空再說吧!先復習一下剛剛上面說的:
-rwxrwxrwx
這九個屬性是三個三個一組的!其中,我們可以使用數字來代表各個屬性,各屬性的對照表如下:
r:4
w:2
x:1
由於同一組的數字是相加的!例如當屬性為 [ -rwxrwx--- ] 則是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others = --- = 0+0+0 = 0
所以,這樣的屬性造成的數值就是 770 啰!而更改屬性的指令為 chmod,他的語法為:
語法: chmod [-R] xyz 檔案或目錄 xyz 為同三組 rwx 屬性數值的相加
舉例來說,如果要將 .bashrc 這個檔案所有的屬性都打開,那麼就下達:
[root@test root]# ls –al .bashrc -rw-r--r--1 root root 226 Feb 16 2002 .bashrc [root@test root]# chmod 777 .bashrc [root@test root]# ls –al .bashrc -rwxrwxrwx1 root root 226 Feb 16 2002 .bashrc
看到了嗎?屬性改變了喔!由於一個檔案有三組屬性,所以你可以發現上面 777 為三組,而由於我們將所有的屬性都打開,所以數字都相加,亦即『r+w+x = 4+2+1 = 7』。
那如果要將屬性變成『 -rwxr-xr-- 』呢?那麼就成為 [4+2+1][4+0+1][4+0+0]=754 啰!所以你需要下達 chmod 754 filename。最
常發生的一個問題就是,常常我們以 vi 編輯一個 shell 的文字檔後,他的屬性通常是 -rw-rw-rw- 也就是 666 的屬性,如果要將他變成可執行檔,並且不要讓其他人修改此一檔案的話,那麼就需要 -rwxr-xr-x 這一個 755 的屬性,所以 chmod 755 test.sh 就需要這樣做啰!
另外,有些檔案你不希望被其他人看到,例如 -rwxr-----,那麼就下達 chmod 740 filename 吧!
符號類型改變檔案型態
還有一個改變屬性的方法呦!從之前的介紹中我們可以發現,基本上就九個屬性分別是(1)user (2)group (3)others 三群啦!那麼我們就可以藉由 u, g, o 來代表三群的屬性!此外, a 則代表 all 亦即全部的三群!那麼讀寫的屬性就可以寫成了 r, w, x 啰!也就是可以使用底下的方式來看:
來實作一下吧!假如我們要『設定』一個檔案的屬性為『-rwxr-xr-x』時,基本上就是:
u: 具有可讀、寫、執行
g 與 o: 具有讀與執行
所以就是:
[root@test root]# chmod u=rwx,og=rx .bashrc
[root@test root]# ls –al .bashrc
-rwxr-xr-x1 root root 226 Feb 16 2002 .bashrc
請注意, r=rwx,og=rx 這一段文字之間並沒有空白字元隔開呦!不要搞錯啰!那麼假如是『 -rwxr-xr-- 』?可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的檔案屬性,而我只想要增加 .bashrc 這個檔案的每個人均可寫入的權限,那麼我就可以使用:
[root@test root]# ls –al .bashrc
-rwxr-xr-x1 root root 226 Feb 16 2002 .bashrc
[root@test root]# chmod a+w .bashrc
[root@test root]# ls –al .bashrc
-rwxrwxrwx1 root root 226 Feb 16 2002 .bashrc*
而如果是要將屬性去掉而不更動其他的屬性呢?!例如要拿掉所有人的 x 的屬性,則
[root@test root]# chmod a-x .bashrc
[root@test root]# ls –al .bashrc
-rw-rw-rw-1 root root 226 Feb 16 2002 .bashrc
知道 +, -, = 的不同點了嗎?對啦! = 與 – 的狀態下,只要是沒有指定到的項目,則該屬性『不會被變動』,例如上面的例子中,由於僅以 – 拿掉 x 則其他兩個保持當時的值不變!呵呵!多多實作一下,你就會知道如何改變屬性啰!
Linux 支援的檔案格式與檔案種類
Linux 的檔案與 Windows 的檔案能不能互相使用?為何可以?為何不行?這些咚咚都涉及到 Linux 的檔案類型與檔案格式喔!底下我們就來談一談這些基本的觀念吧!
檔案格式:
什麼是檔案格式呢?就是你的作業系統用來存取的資料格式,例如我們知道 Windows 用來存取硬碟的資料格式為 FAT (或 FAT16 ) ,而 Windows 2000 也有所謂的 NTFS 檔案格式等等,至於 Linux 的正統檔案格式為 ext2 這一個。不過,目前 Linux 所能支援的檔案格式非常的多,不過,你必須要將你所想要支援的檔案格式編譯到你的核心當中才能被支援!因為如果核心不認識該檔案格式的話,那麼自然就無法取用呀!因此,您可以發現, Windows 與 Linux 安裝在同一個硬碟的不同 partition 時, Windows 將不能取用 Linux 的硬碟資料, Why ? 就因為 Windows 的核心不認識 Linux 的檔案系統呀!
目前 Mandrake 9.0 預設的檔案格式為 ext3 (Third Extended File System ),是 ext2 檔案格式的升級版,不過也向下相容 ext2, ext 等等。另外,如果你需要將你原有的 Windows 系統也掛載在 Linux 底下的話,那麼 Linux 也支援 MS-DOS, VFAT, FAT, BSD 等等的檔案格式,至於 Window NT 的 NTFS 檔案格式則不見得每一個 Linux distribution 都有支援,例如 Red Hat 預設的核心就不支援 NTFS,但是 Mandrake 9.0 的核心竟然預設有支援 ntfs 耶!真高興!問我怎麼看出來的?呵呵! Linux 能夠支援的檔案格式與核心是否有編譯進去有關,所以你可以到你的 Linux 系統的
/lib/modules/`uname –r`/kernel/fs
底下看一看,如果有你想要的檔案格式,那麼這個核心就有支援啦!目前使用的最廣泛的雖然還是 ext2 ,不過,最近釋出的 Linux distribution 大多已經預設采樣 ext3 或 reiserfs 這種具有日志式管理( Journaling )的檔案格式了。那為什麼要使用 ext3 這種檔案格式呢?我們采用第一個使用 ext3 做為 Linux distribution 的 Red Hat 公司中,首席核心開發者 Michael K. Johnson 的話:
『為什麼你想要從ext2轉換到ext3呢?有四個主要的理由:可利用性、資料完整性、速度及易於轉換』
『可利用性』,他指出,這意味著從系統中止到快速重新復原而不是持續的讓e2fsck執行長時間的修復。ext3的日志式條件可以避免資料毀損的可能。他也指出:
『除了寫入若干資料超過一次時,ext3往往會較快於ext2,因為ext3的日志使硬碟讀取頭的移動能更有效的進行』
然而或許決定的因素還是在Johnson先生的第四個理由中。
『它是可以輕易的從ext2變更到ext3來獲得一個強而有力的日志式檔案系統而不需要重新做格式化』。『那是正確的,為了體驗一下ext3的好處是不需要去做一種長時間的,冗長乏味的且易於產生錯誤的備份工作及重新格式化的動作』
更詳細的 ext3 說明在底下的連結中:ext3 or ReiserFS? Hans Reiser Says Red Hat's Move Is Understandable ( http://www.linuxplanet.com/linuxplanet/reports/3726/1/ ) 所以啰,我們可以使用 ext3 來做為我們的 Linux 的檔案格式啦! ^_^ 。在這裡,您只要記得,我們 Linux 正統的檔案格式是 ext2 ,而目前有逐漸被 Journaling 的檔案格式取代的趨勢就是了。
檔案種類:
談完了檔案格式之後,再來談談所謂的檔案種類吧!我們在剛剛的屬性介紹中提到了最前面的標志 ( d 或 - ) 可以代表目錄或檔案,那就是不同的檔案種類啦!Linux 的檔案種類主要有底下這幾種:
正規檔案( regular file ):就是一般類型的檔案,在由 ls –al 所顯示出來的屬性方面,第一個屬性為 [ - ]。另外,依照檔案的內容,又大略可以分為兩種檔案種類:
純文字檔(ascii) :這是 Unix 系統中最多的一種啰,幾乎只要我們可以用來做為設定的檔案都屬於這一種;
二進位檔(binary) :通常執行檔除了 scripts (文字型批次檔)之外,就是這一種檔案格式;
目錄 (directory):就是目錄啦!第一個屬性為 [ d ];
連結檔 (link):就是類似 Windows 底下的捷徑啦!第一個屬性為 [ l ];
設備檔 (device):與系統周邊相關的一些檔案,通常都集中在 /dev 這個目錄之下!通常又分為兩種:
區塊 (block) 設備檔 :就是一些儲存資料,以提供系統存取的周邊設備,簡單的說就是硬碟啦!例如你的一號硬碟的帶碼是 /dev/hda1 等等的檔案啦!第一個屬性為 [ b ];
字元 (character) 設備檔 :亦即是一些序列埠的周邊設備,例如鍵盤、滑鼠等等!第一個屬性為 [ c ]。
那麼使用剛剛的『 ls -al 』這個指令,你就可以簡單的經由判斷每一個檔案的第一個屬性來了解這個檔案是何種類型!很簡單吧!
除了設備檔是我們系統中很重要的檔案,最好不要隨意修改之外(通常他也不會讓你修改的啦!),另一個比較有趣的檔案就是連結檔。如果你常常將應用程式捉到桌面來的話,你就應該知道在 Windows 底下有所謂的『捷徑』。同樣的,你可以將 linux 下的連結檔簡單的視為一個檔案或目錄的捷徑。但是基本上這兩個東西是不一樣的!在 Windows 系統的捷徑中,你將無法修改主程式,但是在 Linux 中,連結檔可以直接連結到主程式,因此你只要改了這個連結檔,則主程式亦被改變了!這部份我們也會在後面的連結檔介紹中,再次詳細的談一談。
Linux 檔案附檔名:
基本上,Linux 檔案的附檔名是沒有意義的!因為由前面的說明我們可以知道,一個 Linux 檔案能不能被執行,與他的第一欄的十個屬性有關,與檔名根本一點關系也沒有。這個觀念跟 Windows 的情況不相同喔!在 Windows 底下,能被執行的檔案附檔名通常是 .com .exe .bat 等等,而在 Linux 底下,只要你的屬性當中有 x 的話,例如 [ -rwx-r-xr-x ] 即代表這個檔案可以被執行喔!不過,由於我們仍然希望可以藉由附檔名來了解該檔案是什麼東西?!所以,通常我們還是會以適當的附檔名來表示該檔案是什麼種類的。簡單的分別,底下有數種常用的附檔名:
批次檔 ( scripts ):通常以 *.sh 來代表,(因為批次檔為使用 shell 寫成的,所以附檔名就編成 .sh 啰);
打包或壓縮檔:通常附檔名為 *.Z, *.tar, *.tar.gz, *.zip, *.tgz 等等,這是因為壓縮軟體分別為 gunzip, tar 等等的,由於不同的壓縮軟體,而取其相關的附檔名啰!
網頁相關檔案:通常使用 *.html 與 *.php 等等的檔案,分別代表 HTML 語法與 PHP 語法的網頁檔案啰!這種檔案可以使用網頁浏覽器來開啟!
另外,還有程式語言如 perl 的檔案,其附檔名也可能取成 .pl 這種檔名!基本上, Linux 上面的檔名真的只是讓你了解該檔案可能的用途而已,真正的執行與否仍然需要屬性的規范才行!例如雖然有一個檔案為可執行檔,如有名的代理伺服器軟體 squid ,不過,如果這個檔案的屬性被修改成無法執行時,那麼他就變成不能執行啰!這種問題最常發生在檔案傳送的過程中。例如你在網路上下載一個可執行檔,但是偏偏在你的 Linux 系統中就是無法執行!呵呵!那麼就是可能檔案的屬性被改變了!不要懷疑,從網路上傳送到你的 Linux 系統中,檔案的屬性確實是會被改變的喔!
再提個另外!在 Linux 底下,每一個檔案或目錄的檔名最長可以到達 256 的字元,是相當長的檔名喔!我們希望 Linux 的檔案名稱可以一看就知道該檔案在干嘛的,所以檔名通常是很長很長!而用慣了 Windows 的人可能會受不了,因為檔案名稱通常真的都很長,對於用慣 Windows 而導致打字速度不快的朋友來說,嗯!真的是很困擾.....不過,只得勸您好好的加強打字的訓練啰!當然啦,如果您已經讀完了本書第三篇關於 BASH 的用法,那麼您將會發現『哇!變數真是一個相當好用的東西吶!』
Linux 目錄配置:
在 Linux 系統的預設狀態下,你在根目錄中輸入『 ls -l 』應該可以看到如下的畫面:
[vbird@tsai vbird ]$ cd /
[vbird@tsai /]$ ls -l
total 153
drwxr-xr-x2 root root 4096 Feb 10 02:06 bin
drwxr-xr-x3 root root 4096 Feb 10 00:05 boot
drwxr-xr-x 17 root root77824 Feb 11 14:45 dev
drwxr-xr-x 41 root root 4096 Feb 16 15:18 etc
drwxr-xr-x8 root root 1024 Feb 9 22:44 home
drwxr-xr-x2 root root 4096 Jun 22 2001 initrd
drwxr-xr-x6 root root 4096 Feb 10 02:12 lib
drwxr-xr-x2 root root16384 Feb 10 05:35 lost+found
drwxr-xr-x2 root root 4096 Aug 30 00:10 misc
drwxr-xr-x3 root root 4096 Feb 9 22:05 mnt
drwxr-xr-x2 root root 4096 Aug 24 1999 opt
dr-xr-xr-x 102 root root0 Feb 11 22:45 proc
drwx------4 root root 4096 Feb 16 15:25 root
drwxr-xr-x2 root root 4096 Feb 14 21:28 sbin
drwxrwxrwt2 root root 4096 Feb 16 15:40 tmp
drwxr-xr-x 16 root root 4096 Feb 10 01:28 usr
drwxr-xr-x 20 root root 4096 Feb 14 21:41 var
由屬性的角度來看,上面的檔名每個都是『目錄名稱』,較為特殊的是 root ,由於 root 這個目錄是管理員 root 的家目錄,這個家目錄可重要了!所以一定要設定成較為嚴密的 700 ( rwx------ )這個屬性才行吶!如果以較為完整的樹狀目錄來視察的話,可以將整個 Linux 的樹狀目錄會制程下圖:
請注意,每個目錄都是依附在 / 這個根目錄底下的,所以我們在安裝的時候一定要有一個 / 對應的 partition 才能安裝的原因即在於此!這也就是我們俗稱的『樹狀目錄』啰!
每個目錄的大致內容如下表所示:
·需要注意的目錄
在 Linux 系統中,有幾個目錄是特別需要注意的,以下提供幾個需要注意的目錄,以及預設相關的用途:
o /etc:這個目錄相當重要,如前所述,你的開機與系統資料檔案均在這個目錄之下,因此當這個目錄被破壞,那你的系統大概也就差不多該死掉了!而在往後的文件中,你會發現我們常常使用這個目錄下的 /etc/rc.d/init.d 這個子目錄,因為這個 init.d 子目錄是開啟一些 Linux 系統服務的 scripts (可以想成是批次檔 )的地方。而在 /etc/rc.d/rc.local 這個檔案是開機的執行檔,有點像是舊 Windows 系統下的 autoexec.bat 及 config.sys 檔。所以,如果你有需要在開機載入的服務或執行檔案,可以寫在這個檔案的最後一行,則開機時就會自動幫你載入執行檔了!
o /bin, /sbin, /usr/bin, /usr/sbin:這是系統預設的執行檔的放置目錄,例如 root 常常使用的 userconf, netconf, perl, gcc, c++ 等等的資料都放在這幾個目錄中,所以如果你在提示字元下找不到某個執行檔時,可以在這四個目錄中查一查!其中, /bin, /usr/bin 是給系統使用者使用的指令,而 /sbin, /usr/sbin 則是給系統管理原使用的指令!
o /usr/local:這是系統預設的讓你安裝你後來升級的套件的目錄。例如,當你發現有更新的 Web 套件(如 Apache )可以安裝,而你又不想以 rpm 的方式升級你的套件,則你可以將 apache 這個套件安裝在 /usr/local 底下。安裝在這裡有個好處,因為目前大家的系統都是差不多的,所以如果你的系統要讓別人接管的話,也比較容易上手呀!也比較容易找的到資料喔!因此,如果你有需要的話,通常我都會將 /usr/local/bin 這個路徑加到我的 path 中。
o /home:這個是系統將有帳號的人口的家目錄設置的地方。
o /var:這個路徑就重要了!不論是登入、各類服務的問題發生時的記錄、以及常態性的服務記錄等等的記錄目錄,所以當你的系統有問題時,就需要來這個目錄記錄的檔案資料中察看問題的所在啰!而 mail 的預設放置也是在這裡,所以他是很重要的喔!
o /usr/share/man, /usr/local/man:這兩個目錄為放置各類套件說明檔的地方,例如你如果執行 man man,則系統會自動去找這兩個目錄下的所有說明檔,如果有相同的資料就會叫出來給你幽!
·一般主機可能會分配的磁碟情況
好了,知道了 Linux 的檔案權限,目前也知道了各個檔案內可能擺放的資料是什麼了,那麼再來說說你的目錄與磁碟分割之間的相關性。通常一般的大型主機都不會將所有的資料放置在一個磁碟中(就是只有一個『 / 』根目錄),這有幾個目的:
1. 安全性考量:你的系統通常是在 /usr/ 中,而個人資料則可能放置在 /home 當中,至於一些開機資料則放置在 /etc 當中。如果將所有的資料放在一起,當你的系統不小心被駭客破壞,或者不小心自己砍了一個小東西,則所有的咚咚也都跟著不見了.....這對於我們市井小民或許無所謂,再安裝一次就好了,但是對於一些大型企業可不行這樣!因此需要將資料分別放置於不同的磁碟中,會比較保險些。
2. 便利性:如果你需要升級你的系統的話,是否需要重新 format 安裝呢?有些資料例如 /home 裡面的資料為個人用戶的資料,似乎與系統無關!所以如果你將這些資料分別放置於不同的磁碟,則你要升級或者進行一些系統更動時,將比較有彈性。
你或許可以將你的系統做成這樣的 partition 分布:
/
/boot
/usr
/home
/var
這是比較常見的磁碟分布情況,其中,
o / 根目錄可以分配約 256 MB 以內;
o /boot 大概在 50 MB 就可以了,因為開機檔案並不大;
o /var 就至少需要 1GB 以上,因為你的 mail 、 proxy 預設的儲存區都在這個目錄中,除非你要將一些設定改變!
o /home 與 /usr 通常是最大的,因為你所安裝的資料都是在 /usr/ 當中,而用戶資料則放置在 /home 當中,因此通常書上都會建議你將所剩下的磁碟空間平均分配給這兩個目錄說!
無論如何,每部主機的環境與功能用途都不相同,自然其磁碟的分配就會不太一樣,因此,上面的設定您就看看就好,等您將整個網頁內容全 K 完了,那麼大概就知道怎樣設定您的主機最恰當啦!接著下來,我們來談一談簡單的檔案與目錄的管理了!
本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
·早期的 Unix 系統檔名最多允許 14 個字元,而新的 Unix 與 Linux 系統中,檔名最多可以容許幾個字元?
答:
255個字元
·當一個檔案屬性為 –rwxrwxrwx 則表示這個檔案的意義為?
答:
任何人皆可讀取、可寫入亦可刪除。
·我需要將一個檔案的屬性改為 –rwxr-xr-- 請問該如何下達指令?
答:
chmod 754 filename 或 chmod u=rwx,g=rx,o=r filename
·若我需要更改一個檔案的擁有者與群組,該用什麼指令?
答:
chown, chgrp
·Linux 傳統的檔案系統為何?此外,常用的 Journaling 檔案格式有哪些?
答:
ext2,
Journaling 有 ext3 及 Reiserfs 等
·請問底下的目錄與主要放置什麼資料
/etc/:
/etc/rc.d/init.d:
/boot:
/usr/bin, /bin:
/usr/sbin, /sbin:
/dev:
/var/log:
答:
/etc/:幾乎系統的所有設定檔案均在此,尤其 passwd, shadow
/etc/rc.d/init.d:系統開機的時候載入服務的 scripts 的擺放地點
/boot:開機設定檔,也是預設擺放核心 vmlinuz 的地方
/usr/bin, /bin:一般執行檔擺放的地方
/usr/sbin, /sbin:系統管理員常用指令集
/dev:擺放所有系統裝置檔案的目錄
/var/log:擺放系統登錄檔案的地方
·若一個檔案的檔名開頭為『 . 』,例如 .bashrc 這個檔案,代表什麼?另外,如何顯示出這個檔名與他的相關屬性?
答:
有『 . 』為開頭的為隱藏檔,需要使用 ls –a 這個 –a 的參數才能顯示出隱藏檔案的內容,而使用 ls –al 才能顯示出屬性。