1. 程式人生 > >1:Linux 目錄結構

1:Linux 目錄結構

    當在使用Linux的時候,如果您通過ls –l / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin ... ... 等目錄,而 在這些目錄中,我們進去看看,發現也有很多的目錄或檔案。檔案系統在Linux下看上去就象樹形結構,所以我們可以把檔案系統的結構形象的稱為 樹形結構。 檔案系統的是用來組織和排列檔案存取的,所以是可見的,在Linux中,我們可以通過ls等工具來檢視其結構,在Linux系統中,我們見到的都是樹形結 構;比如作業系統安裝在一個檔案系統中,他表現為由/ 起始的樹形結構。linux檔案系統的最頂端是/,我們稱/為Linux的root,也就 是 Linux作業系統的檔案系統。Linux的檔案系統的入口就是/,所有的目錄、檔案、裝置都在/之下,/就是Linux檔案系統的組織者,也是最上級的領導者。
由於linux是開放原始碼,各大公司和團體根據linux的核心程式碼做各自的操作,程式設計。這樣就造成在根下的目錄的不同。這樣就造成個人不能使用他人的linux系統的PC。因為你根本不知道一些基本的配置,檔案在哪裡。。。這就造成了混亂。這就是FHS(Filesystem Hierarchy Standard )機構誕生的原因。該機構是linux愛好者自發的組成的一個團體,主要是是對linux做一些基本的要求,不至於是操作者換一臺主機就成了linux的‘文盲’。 根 據FHS(http://www.pathname.com/fhs/)的官方檔案指出, 他們的主要目的是希望讓使用者可以瞭解到已安裝軟體通常放置於 那個目錄下, 所以他們希望獨立的軟體開發商、作業系統製作者、以及想要維護系統的使用者,都能夠遵循FHS的標準。 也就是說,FHS的重點在於規範每個 特定的目錄下應該要放置什麼樣子的資料而已。 這樣做好處非常多,因為Linux作業系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風 格。
事實上,FHS是根據過去的經驗一直再持續的改版的,FHS依據檔案系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成為四種互動作用的形態,用表格來說有點像底下這樣:
    四種類型:
1. 可分享的: 可以分享給其他系統掛載使用的目錄,所以包括執行檔案與使用者的郵件等資料, 是能夠分享給網路上其他主機掛載用的目錄; 2. 不可分享的: 自己機器上面運作的裝置檔案或者是與程式有關的socket檔案等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。
3. 不變的: 有些資料是不會經常變動的,跟隨著distribution而不變動。 例如函式庫、檔案說明檔案、系統管理員所管理的主機服務配置檔案等等; 4. 可變動的: 經常改變的資料,例如登入檔案、一般使用者可自行收受的新聞組等。 事實上,FHS針對目錄樹架構僅定義出三層目錄底下應該放置什麼資料而已,分別是底下這三個目錄的定義: / (root, 根目錄):與開機系統有關; /usr (unix software resource):與軟體安裝/執行有關; /var (variable):與系統運作過程有關。 一. 根目錄(/) 的意義與內容: 根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的, 同時根目錄也與開機/還原/系統修復等動作有關。 由於系統開機時需要特 定的開機軟體、核心檔案、開機所需程式、函式庫等等檔案資料,若系統出現錯誤時,根目錄也必須要包含有能夠修復檔案系統的程式才行。 因為根目錄是這麼的重要,所以在FHS的要求方面,他希望根目錄不要放在非常大的分割槽, 因為越大的分割槽內你會放入越多的資料,如此一來根目錄所在分割槽就可能會有較多發生 錯誤的機會。 因此FHS標準建議:根目錄(/)所在分割槽應該越小越好, 且應用程式所安裝的軟體最好不要與根目錄放在同一個分割槽內,保持根目錄越小越好。 如此不但效能較佳,根目錄所在的檔案系統也較不容易發生問題。 說白了,就是根目錄和Windows的C盤一個樣。 根據以上原因,FHS認為根目錄(/)下應該包含如下子目錄:  
事實上FHS針對根目錄所定義的標準就僅限於上表,不過仍舊有些目錄也需要我們瞭解一下,具體如下:
 除了這些目錄的內容之外,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分割槽則是在開機完成之後才會持續的進行掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分割槽去。那哪些目錄不可與根目錄分開呢?有底下這些:
/etc:配置檔案 /bin:重要執行檔 /dev:所需要的裝置檔案 /lib:執行檔所需的函式庫與核心所需的模組 /sbin:重要的系統執行檔案 這五個目錄千萬不可與根目錄分開在不同的分割槽。請背下來啊。  二. /usr 的意義與內容: 依據FHS的基本定義,/usr裡面放置的資料屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網路進行分割槽的掛載(例如在伺服器篇會談到的NFS伺服器),那麼/usr確實可以分享給區域網絡內的其他主機來使用喔。 /usr 不是user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是Unix作業系統軟體資源所放置的目錄,而不是使用者的數 據啦。這點要注意。 FHS建議所有軟體開發者,應該將他們的資料合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟體自己獨立的目錄。 因 為是所有系統預設的軟體(distribution釋出者提供的軟體)都會放置到/usr底下,因此這個目錄有點類似Windows 系統的 C:\Windows\ + C:\Program files\這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬碟容量。 一般來 說,/usr的次目錄建議有底下這些:   三.  /var 的意義與內容: 如 果/usr是安裝時會佔用較大硬碟容量的目錄,那麼/var就是在系統運作後才會漸漸佔用硬碟容量的目錄。 因為/var目錄主要針對常態性變動的檔案, 包括快取(cache)、登入檔(log file)以及某些軟體運作所產生的檔案, 包括程式檔案(lock file, run file),或者例 如MySQL資料庫的檔案等等。常見的次目錄有:
  由於FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的檔案或目錄資料, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。 四. 目錄樹(directory tree)   : 在Linux底下,所有的檔案與目錄都是由根目錄開始的。那是所有目錄與檔案的源頭, 然後再一個一個的分支下來,因此,我們也稱這種目錄配置方式為:目錄樹(directory tree), 這個目錄樹的主要特性有: 目錄樹的啟始點為根目錄 (/, root); 每一個目錄不止能使用本地端的 partition 的檔案系統,也可以使用網路上的 filesystem 。舉例來說, 可以利用 Network File System (NFS) 伺服器掛載某特定目錄等。 每一個檔案在此目錄樹中的檔名(包含完整路徑)都是獨一無二的。 如果我們將整個目錄樹以圖的方法來顯示,並且將較為重要的檔案資料列出來的話,那麼目錄樹架構就如下圖所示:
五. 絕對路徑與相對路徑 除了需要特別注意的FHS目錄配置外,在檔名部分我們也要特別注意。因為根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對路徑(absolute)與相對路徑(relative)。 這兩種檔名/路徑的寫法依據是這樣的: 絕對路徑: 由根目錄(/)開始寫起的檔名或目錄名稱, 例如 /home/dmtsai/.bashrc; 相對路徑: 相對於目前路徑的檔名寫法。 例如 ./home/dmtsai 或 http://www.cnblogs.com/home/dmtsai/ 等等。反正開頭不是 / 就屬於相對路徑的寫法 而你必須要了解,相對路徑是以你當前所在路徑的相對位置來表示的。舉例來說,你目前在 /home 這個目錄下, 如果想要進入 /var/log 這個目錄時,可以怎麼寫呢? cd /var/log   (absolute) cd ../var/log (relative) 因為你在 /home 底下,所以要回到上一層 (../) 之後,才能繼續往 /var 來移動的,特別注意這兩個特殊的目錄: .  :代表當前的目錄,也可以使用 ./ 來表示; .. :代表上一層目錄,也可以 ../ 來代表。 這個 . 與 .. 目錄概念是很重要的,你常常會看到 cd .. 或 ./command 之類的指令下達方式, 就是代表上一層與目前所在目錄的工作狀態。 例項1:如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內? 命令 cd /var/spool/mail cd ../cron 說明: 由於/var/spool/mail與/var/spool/cron是同樣在/var/spool/目錄中。如此就不需要在由根目錄開始寫起了。這個相對路徑是非常有幫助的,尤其對於某些軟體開發商來說。 一般來說,軟體開發商會將資料放置到/usr/local/裡面的各相對目錄。 但如果使用者想要安裝到不同目錄呢?就得要使用相對路徑。 例項2:網路檔案常常提到類似./run.sh之類的資料,這個指令的意義為何? 說明: 由於指令的執行需要變數的支援,若你的執行檔案放置在本目錄,並且本目錄並非正規的執行檔案目錄(/bin, /usr/bin等為正規),此時要執行指令就得要嚴格指定該執行檔。./代表本目錄的意思,所以./run.sh代表執行本目錄下, 名為run.sh的檔案。



LINUX的目錄樹 /bin bin是binary的縮寫。這個目錄是對UNIX系統習慣的沿襲,存放著使用者最經常使用的命令。例如:cp,ls,cat。 /boot 這裡存放的是啟動LINUX時使用的一些核心檔案。 /dev dev是device(裝置)的縮寫。這個目錄下是所有LINUX的外部裝置,其功能類似DOS下的.sys和Win下的.vxd。在LINUX中裝置和檔案是用同種方法訪問的。例如:/dev/hda代表第一個物理IDE硬碟。 /etc 這個目錄用來存放所有的系統管理所需要的配置檔案和子目錄。 /home 使用者的主目錄,比如說有個使用者叫wang,那他的主目錄就是/home/wang也可以用~wang表示。 /lib 這個目錄裡存放著系統最基本的動態連結共享庫,其作用類似於Windows裡的.dll檔案。幾乎所有的應用程式都需要用到這些共享庫。 /lost+found 這個目錄平時是空的,當系統不正常關機後,這裡就成了一些無家可歸的檔案的避難所。對了,有點類似於DOS下的.chk檔案。 /mnt 這個目錄是空的,系統提供這個目錄是讓使用者臨時掛載別的檔案系統。 /proc 這個目錄是一個虛擬的目錄,它是系統記憶體的對映,我們可以通過直接訪問這個目錄來獲取系統資訊。也就是說,這個目錄的內容不在硬碟上而是在記憶體裡啊!? /root 系統管理員,也叫作超級許可權者的使用者主目錄。當然系統的擁有者,總要有些特權啊! /sbin s就是Super User的意思,也就是說這裡存放的是一些系統管理員使用的系統管理程式。 /tmp 這個目錄不用說,一定是用來存放一些臨時檔案的地方了。 /usr 這是個最龐大的目錄,我們要用到的很多應用程式和檔案幾乎都存放在這個目錄下。 /usr/X11R6 存放X-Windows的目錄; /usr/bin 存放著許多應用程式; /usr/sbin 給超級使用者使用的一些管理程式就放在這; /usr/doc 這就是LINUX文件的大本營; /usr/include LINUX下開發和編譯應用程式需要的標頭檔案,在這找; /usr/lib 存放一些常用的動態連結共享庫和靜態檔案庫; /usr/local 這是提供給一般使用者的/usr目錄,在這安裝軟體最適合; /usr/man man是什麼,對了是幫助。這裡就是幫助文件目錄啊! /usr/src LINUX開放的原始碼,就存在這個目錄,愛好者們別放過哦! /var 這個目錄中存放著那些不斷在擴充著的東西,為了保持/usr的相對穩定,那些經常被修改的目錄可以放在這個目錄下,實際上許多系統管理員都是這樣乾的。順帶說一下系統的日誌檔案就在/var/log目錄中。