對於每一個Linux學習者來說,了解Linux文件系統的目錄結構,是學好Linux的至關重要的一步.,深入了解linux文件目錄結 構的標准和每個目錄的詳細功能,對於我們用好linux系統只管重要,下面我們就開始了解一下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認為根目錄(/)下應該包含如下子目錄:
除了這些目錄的內容之外 ,另外要注意的是,因為根目錄與開機有關,開機過程中僅有根目錄會被掛載, 其他分區則是在開機完成之後才會持續的進行 掛載的行為。就是因為如此,因此根目錄下與開機過程有關的目錄, 就不能夠與根目錄放到不同的分區去。那哪些目錄不可與 根目錄分開呢?有底下這些:
/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的文件。
查看全套教程:http://www.bianceng.cn/OS/Linux/201301/35075.htm