Linux 檔案屬性與目錄配置
本文已不再維護,請參考這裡取得最新文章
最近更新日期:2003/02/06
使用者與群組
Linux 檔案屬性
如何改變檔案權限chgrp, chown, chmod,
Linux 支援的檔案格式與檔案種類
Linux 目錄配置
本章習題練習

使用者與群組
初次接觸 Linux 的朋友大概會覺得很怪異,怎麼『Linux 有這麼多使用者,還分什麼群組,有什麼用?』。 這個『使用者與群組』的功能可是相當健全而好用的一個安全防護呢!怎麼說呢?由於 Linux 是個多人多工的系統 ( 已經提過若干次囉! ),因此可能常常會有多人同時使用這部主機來進行工作的情況發生,為了考慮每個人的隱私權,因此,這個『檔案擁有者』的角色就顯的相當的重要了!例如當你 將你的e-mail情書轉存成檔案之後,放在您自己的家目錄,您總不希望被其他人看見自己的情書吧?這個時候,你就把該檔案設定成『只有檔案擁有者,就是 我,才能看與修改這個檔案的內容』,那麼即使其他人知道你有這個相當『有趣』的檔案,不過由於您有設定適當的權限,所以其他人自然也就無法知道該檔案的內 容囉!
 
那麼群組呢?為何要設定檔案還有所屬的群組?其實,群組最簡單的功能之一,就是當您在團隊開發資源的時候最有用啦!舉個例子來說好了,假如在我的主機上面有兩個團體,這第一個團體名稱為 testgroup 而他的成員是 test1, test2, test3 三個,第二個團體名稱為 treatgoup 他的團員為 treat1, treat2, treat3,這兩個團體之間是互相有競爭性質的,但是卻又要繳交同一份報告,然而每組團員又需要同時可以修改自己的團體內任何人所建立的檔案,且不能讓非自己團體以外的人看到自己的檔案內容!這個時候怎麼辦?呵呵!在 Linux 底下可就很簡單啦!我可以經由簡易的檔案權限設定,就能限制非自己團隊( 亦即是群組囉 )的其他人不能夠閱覽內容囉!而且亦可以讓自己的團隊成員可以修改我所建立的檔案!同時,如果我自己還有私人隱密的文件,仍然可以設定成讓自己的團隊成員也看不到我的檔案資料,很方便吧!另外,如果 teacher 這個帳號是 testgroup 與 treatgroup 這兩個群組的老師,他想要同時觀察兩者的進度,因此需要兩邊的群組都能夠進去觀看,這個時候,您可以設定 teacher 這個帳號,『同時支援 testgroup 與 treatgroup 這兩個群組!』,也就是說,每個人都可以有多個群組的支援呢!
 
這樣說或許你還不容易理解這個使用者與群組的關係吧?沒關係,我們可以使用目前『家庭』的觀念來進行解說喔!假設有一家人,家裡只有三兄弟,分別 是王大毛、王二毛與王三毛三個人,而這個家庭是登記在王大毛的名下的!所以,『王大毛家有三個人,分別是王大毛、王二毛與王三毛』,而且這三個人都有自己 的房間,並且共同擁有一個客廳喔! 這樣說來應該有點曉得了喔!那個『王大毛家』就是所謂的『群組』囉,至於三兄弟就是分別為三個『使用者』,而這三個使用者是在同一個群組裡面的 喔!而三個使用者雖然在同一群組內,但是我們可以設定『權限』,好讓某些使用者個人的資訊不被群組的所有人查詢,以保有個人『私人的空間』啦!而設定群組 共享,則可讓大家共同分享喔!
好了,那麼今天又有個人,叫做張小豬,他是張小豬家的人,與王家沒有關係啦!這個時候,除非王家認識張小豬,然後開門讓張小豬進 來王家,否則張小豬永遠沒有辦法進入王家,更不要說進到王三毛的房間啦!不過,如果張小豬透過關係認識了三毛,並且跟王三毛成為好朋友,那麼張小豬就可以 透過三毛進入王家啦!呵呵!沒錯!那個張小豬就是所謂的『其他人, 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     root        12447 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     root            8 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. 第一欄代表這個檔案的屬性:這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個屬性:
  2.    
    範例:若有一個檔案的屬性為『-rwxr-xr--』,簡單的可由下面說明之:
     
    [-][rwx][r-x][r--]
     1  234  567  890
         1 為:代表這個檔名為目錄或檔案(上面為檔案)
        234為:擁有人的權限(上面為可讀、可寫、可執行)
        567為:同群組使用者權限(上面為可讀可執行)
        890為:其他使用者權限(上面為僅可讀)
     
    上面的屬性情況代表一個檔案、這個檔案的擁有人可讀可寫可執行、但同群組的人僅可讀與執行,非同群組的使用者僅可讀的意思!
     
  3. 第二欄表示為連結佔用的節點 (i-node) ( 若為目錄時,通常與該目錄底下還有多少目錄有關 )這部分將在介紹連結 link 檔案時 (下一節) 再深入的介紹;

  4.  
  5. 第三欄表示這個檔案(或目錄)的『擁有人』;

  6.  
  7. 第四欄表示擁有人的群組;

  8. 這裡再次解釋一下,在 Linux 中,你的 ID ( 如 root 或 test 等帳號均是所謂的 ID ) 即是你的身份,而且你還有附屬在一個或多個群組之下,例如剛剛我們上面提到的,你有一個團體 ( 即群組 ) 代號為 testgroup ,且這個群體裡有三個人,其代號分別是 test1, test2, 與 test3,則這三個人為同一群組即 testgroup!那麼如果以上圖的[-rwxrwx---]的檔案屬性來看,如果該檔案屬於 test1 所有,那麼 test2, test3 亦有讀、寫、執行的權力,因為他們都屬於同一個 group 呀!而如果您不是屬於 test1, test2, test3 的任何一個人,也不屬於 testgroup 這個群組時,那麼您將不具備讀、寫、執行這個檔案的權限了!
     
  9. 第五欄為這個檔案的大小;

  10.  
  11. 第六欄為這個檔案的建檔日期或者是最近的修改日期,分別為月份、日期及時間。請特別留意,如果您是以繁體中文來進行安裝您的 Linux 時,那麼預設的語系可能會被改為中文。而由於中文無法顯示在文字型態的終端機上面,所以這一欄會成為怪怪的亂碼,這個時候,請修改一下 /etc/sysconfig/i18n 這個檔案,裡面的『 LC_TIME 』修改為:『 LC_TIME=en 』再儲存離開,再登入一次,就可以得到英文字形顯示的日期了!那麼如何修改該檔案呢?呵呵!以 root 身份用 vi 修改! ;

  12.  
  13. 第七欄為這個檔案的檔名,如果檔名之前多一個『 . 』,則代表這個檔案為『隱藏檔』,例如上表第 6 行的『.bashrc_history』檔名即是隱藏檔,由於我們有下一個參數為 ls -al,所以連隱藏檔都列出來,如果你只輸入 ls 則檔名有加『 . 』的檔案就不會被顯示出來!

  14.  
      對於更詳細的 ls 用法,還記得怎麼查詢嗎?對啦!使用 man ls 或 info ls 去看看他的基礎用法去!自我進修是很重要的,因為『師傅帶進門,修行在個人!』,自古只有天才學生,沒有天才老師呦!加油吧! ^_^
 
  • 例題一:如果有下面的兩個檔案: 

  • -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
    請說明兩個檔案的擁有者與其相關的權限為何?
    答:
    • 檔案『 test.txt 』的擁有人為 root ,群組為 root 。至於權限方面則只有 root 這個帳號可以存取此檔案,其他人則僅能讀此檔案;
    • 另一個檔案『 ping_tsai 』的擁有人為 test1 ,而群組為 testgroup。其中, test1 可以針對此檔案具有可讀可寫可執行的權力,而同群組的 test2, test3 兩個人與 test1 同樣是 testgroup 的群組帳號,則僅可讀可執行但不能寫 (亦即不能修改),至於非 testgoup 這一個群組的人則僅可以讀,不能寫也不能執行!
  
  • 例題二:如果我的目錄為底下的樣式:

  • drwxr-xr--   1 test1    testgroup    5238 Jun 19 10:25 groups/
    請問 testgroup 這個群組的成員與其他人( others )是否可以進入本目錄?
    答:
    • 檔案擁有者 test1 可以在本目錄中進行任何工作;
    • 而 testgroup 這個群組的帳號,例如 test2, test3 亦可以進入本目錄進行工作,但是不能在本目錄下進行寫入的動作;
    • 至於 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 檔案與目錄的屬性之前,一定要先搞清楚,什麼是可變的,什麼是不可變的!千萬注意囉!

如何改變檔案權限
好了,我們已經知道檔案權限對於一個系統的安全重要性了,也知道檔案的權限對於使用者與群組的相關性了,好了,那麼如何修改一的 檔案的權限呢?又!有多少檔案的權限我們可以修改呢?其實一個檔案的權限很多嘛!大致上我們先介紹幾個簡單的,例如:群組、擁有者、各種身份的權限等等。

Linux 支援的檔案格式與檔案種類
Linux 的檔案與 Windows 的檔案能不能互相使用?為何可以?為何不行?這些咚咚都涉及到 Linux 的檔案類型與檔案格式喔!底下我們就來談一談這些基本的觀念吧!

Linux 目錄配置:
在 Linux 系統的預設狀態下,你在根目錄中輸入『 ls -l 』應該可以看到如下的畫面:
 
[vbird@tsai vbird ]$ cd /
[vbird@tsai /]$ ls -l
total 153
drwxr-xr-x    2 root     root         4096 Feb 10 02:06 bin
drwxr-xr-x    3 root     root         4096 Feb 10 00:05 boot
drwxr-xr-x   17 root     root        77824 Feb 11 14:45 dev
drwxr-xr-x   41 root     root         4096 Feb 16 15:18 etc
drwxr-xr-x    8 root     root         1024 Feb  9 22:44 home
drwxr-xr-x    2 root     root         4096 Jun 22  2001 initrd
drwxr-xr-x    6 root     root         4096 Feb 10 02:12 lib
drwxr-xr-x    2 root     root        16384 Feb 10 05:35 lost+found
drwxr-xr-x    2 root     root         4096 Aug 30 00:10 misc
drwxr-xr-x    3 root     root         4096 Feb  9 22:05 mnt
drwxr-xr-x    2 root     root         4096 Aug 24  1999 opt
dr-xr-xr-x  102 root     root            0 Feb 11 22:45 proc
drwx------    4 root     root         4096 Feb 16 15:25 root
drwxr-xr-x    2 root     root         4096 Feb 14 21:28 sbin
drwxrwxrwt    2 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 才能安裝的原因即在於此!這也就是我們俗稱的『樹狀目錄』囉!
 
每個目錄的大致內容如下表所示:
 
/bin 這是放例如: ls, mv, rm, mkdir, rmdir, gzip, tar, telnet, 及 ftp 等等常用的執行檔的地方(這些執行檔的執行方法會在後面提到),有時候這個目錄的內容與 /usr/bin 是一樣的(有時候甚至會使用連結檔哩),是給一般使用者使用的執行程式放置的所在!
/boot 沒錯,這裡就是放置你 Linux 核心與開機相關檔案的地方,這個目錄底下的 vmlinuz-xxx 就是 Linux 的 Kernel 啦!粉重要的東西!而如果你的開機管理程式選擇 grub 的話,那麼這個目錄內還有 /boot/grub 這個次目錄呦!
/dev 擺放一些與裝置有關的檔案。基本上 Unix 或 Linux 系統均把裝置當成是一個檔案來看待,例如 /dev/fd0 代表軟碟,亦即 Windows 系統下的 A 槽,而 /dev/cdrom 則代表光碟,等等!而如上所述,在這個目錄底下的檔案型態通常分為兩種喔,分別是管理磁碟 Input/Output 的 Block 檔案與周邊的 Character 檔案。
/etc 系統在開機過程中需要讀取的檔案均在這個目錄中,例如 Lilo 的參數、人員的帳號與密碼、系統的主要設定、http 架站的參數內容、你所要開啟的服務項目等等都在這個目錄中,所以在這個目錄下工作的時候,請記得一定要備份,否則檔案被改掉了可是很麻煩的!
/etc/rc.d 這個路徑主要在記錄一些開關機過程中的 scripts 檔案, scripts 有點像是 DOS 下的批次檔(.bat檔名)
/etc/rc.d/init.d 所以服務預設的啟動 scripts 都是放在這裡的,例如要啟動與關閉 iptables 的話,可以: 
/etc/rc.d/init.d/iptables start
/etc/rc.d/init.d/iptables stop
/etc/xinetd.d 這個路徑在較新的 Linux distribution 當中才有,由於早期的版本用來開啟服務的檔案是 inetd.conf ,但是在較新的版本中,開啟服務的項目已經變成使用 xinetd.conf 這個檔案,因此,你若需要啟動一些額外的服務的話,在 Mandrake 9.0 或者是 Red Hat 7.0 以後就要到 /etc/xinetd.d 這個目錄下了。
/etc/X11 這是與 X windows 有關的設定檔所在的目錄,尤其裡面的 XF86Config-4 更是重要呢!
/home 基本上,這是系統預設的使用者的家目錄( home directory ),在你新增一般使用者帳號的時候,預設的使用者家目錄都在這裡設定好囉!
/lib 在 Linux 執行或編譯一些程式的時候,均會使用到一些函式庫(library),就在這個目錄下
/lost+found 系統不正常產生錯誤時,會將一些遺失的片段放置於此目錄下,通常這個目錄會自動出現在裝置目錄下。例如你加裝一棵硬碟於 /disk 中,那在這個目錄下就會自動產生一個這樣的目錄 /disk/lost+found
/mnt 這是軟碟與光碟預設掛載點的地方;通常軟碟掛在 /mnt/floppy 下,而光碟掛在 /mnt/cdrom 下,不過也不一定啦!只要你高興,隨便找一個地方來掛載也可以呀!
/proc 系統核心與執行程序的一些資訊。例如你的網路狀態的問題啦!這個目錄將在啟動 Linux 的時候自動的被掛上,而且該目錄底下不會佔去硬碟空間!因為裡面都是『記憶體』內的資料啦
/root 系統管理員的家目錄
/sbin 放置一些系統管理常用的程式,例如: fdisk, mke2fs, fsck, mkswap, mount 等等。與 /bin 不太一樣的地方,這個目錄下的程式通常是給 root 等系統管理員使用的程式喔!
/tmp 這是讓一般使用者暫時存放檔案的地方,例如你在安裝 Linux 下的軟體時,可能軟體預設的工作目錄就是 /tmp ,所以你要定期的清理一下,當然,重要資料最好不要放在這裡!
/usr 這是最重要的一個目錄了,裡面含有相當多的系統資訊,內有許多目錄,用來存放程式與指令等等。這個目錄有點像是 Windows 底下的『Program Files』那個目錄說∼
/usr/bin 放置可執行程式,如前所說,這個目錄的檔案與 /bin 幾乎是相同的。
/usr/include 一些套件的header檔。基本上,當我們在以 tarball 方式( *.tar.gz 的方式安裝軟體)安裝某些資料時,會使用到的一些函式庫都在這個目錄底下喔!
/usr/lib 內含許多程式與子程式所需的函式庫。
/usr/local 在你安裝完了 Linux 之後,基本上所有的配備你都有了,但是軟體總是可以升級的,例如你要升級你的 proxy 服務,則通常軟體預設的安裝地方就是在 /usr/local 中( local 是『當地』的意思),同時,安裝完畢之後所得到的執行檔,為了與系統原先的執行檔有分別,因此升級後的執行檔通常擺在 /usr/local/bin 這個地方。 

給個建議啦,通常 VBird 都會將後來才安裝上去的軟體放置在這裡,因為便於管理呦!

/usr/sbin 放置管理者使用程式,與 /sbin 類似的功能
/usr/share/doc 放置一些系統說明文件的地方,例如你安裝了 lilo 了,那麼在該目錄底下找一找,就可以查到 lilo 的說明文件了!很是便利!
/usr/share/man 放置一些程式的說明檔的地方,那是什麼?呵呵!就是你使用 man 的時候,會去查詢的路徑呀!例如你使用 man ls 這個指令時,就會查出 /usr/share/man/man1/ls.1.bz2 這個說明檔的內容囉!
/usr/src 這是放置核心原始碼的預設目錄,未來我們要編譯核心的時候,就必須到這個目錄底下呦!
/usr/X11R6 X Window System存放相關檔案的目錄
/var 這個目錄可就重要了!所有服務的登錄檔或錯誤訊息檔案(log files)都在 /var/log 裡面,此外,一些資料庫如 MySQL 的資料庫則在 /var/lib 裡頭,此外,使用者未讀郵件郵件的預設放置地點為 /var/spool/mail !呵呵!你說重不重要呀!?

本章習題練習 ( 要看答案請將滑鼠移動到『答:』底下的空白處,按下左鍵圈選空白處即可察看 )
2002/07/18:第一次完成
2003/02/06:重新編排與加入 FAQ