Linux基礎-RHEL6目錄結構淺談

   Linux基礎-RHEL6目錄結構淺談

    由於Linux內核是自由、免費的,所以有很多人開發了基於 Linux的操作系統,如果每個人都使用自己的目錄配置方法,那麼將可能會帶來很多管理問題。所以,後來就有所謂的Filesystem Hierarchy Standard (FHS)標準的出爐了,它是由Linux基金會發布的Linux標準規範,以實現天下Linux的大統一。

    根據FHS(http://www.pathname.com/fhs/)的官方文件指出, 他們的主要目的是希望讓使用者可以瞭解到已安裝軟件通常放置於那個目錄下, 所以他們希望獨立的軟件開發商、操作系統製作者、以及想要維護系統的用戶,都能夠遵循FHS的標準。FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的數據。

    FHS定義了在/(root 根目錄)[與系統開機有關]下各個主要目錄應該存放的主要文件內容,此外還專門定義了/usr(unix software resource)[與軟件安裝/執行有關]和/var(variable)[與系統運行有關]兩個目錄及其子目錄的結構。這樣當我們使用來自不同公司開發的Linux系統時,你就可以很快的在某個地方找到你想要的文件了。

    根目錄 (/) 的意義與內容

    根目錄是整個系統最重要的一個目錄,因爲不但所有的目錄都是由根目錄衍生出來的, 同時根目錄也與開機/還原/系統修復等動作有關。 由於系統開機時需要特定的開機軟件、核心文件、開機所需程序、 函數庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。 因爲根目錄是這麼的重要,所以在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有權力修改。比較重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等。另外,其下重要的目錄有:

    /etc/init.d/:所有服務的預設啓動腳本都是放在這裏的 ?

    /etc/xinetd.d/:這就是所謂的super daemon管理的各項服務的配置文件目錄 ?

    /etc/X11/:與 X Window 有關的各種配置文件都在這裏,尤其是 xorg.conf 這個 X Server 的配置文件。

    /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的軟件就建議存放到此目錄下了。 另外,如果你想要自行安裝額外的軟件(非原系統提供的),那麼也能夠將你的軟件安裝到這裏來。 不過,我們常見的,還是習慣存放在/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]的縮寫,是一些網絡服務啓動之後,這些服務所需要取用的數據目錄。

    /tmp 這是讓一般用戶或者是正在執行的程序暫時存放文件的地方。 這個目錄是任何人都能夠存取的,所以你需要定期的清理一下。當然,重要數據不可存放在此目錄。因爲FHS甚至建議在開機時,應該要將/tmp下的數據都刪除,RHEL和CentOS就是在開機後,清空裏面的內容的。

    事實上FHS針對根目錄所定義的標準就僅有上面這些。當然FHS僅是一個參考,每個不同的發行版還是會有自己的一些獨特設計。我們這裏以RHEL6爲例,做個簡單的介紹。

    /cgroup rhel6爲內核準備了一個新特性:資源控制。此服務的軟件包是libcgroup。有了這個,你就可以分配資源,例如:CPU time,系統內存, 網絡帶寬等。這個是被cgconfig服務所控制的。如果此服務沒有啓動,在根目錄下的cgroup文件夾裏就不會存在內容。啓動此服務之後,就會在 /cgroup目錄下面多出一些內容。(service cgconfig start/stop)

    /selinux 是Secure Enhance Linux(SELinux)的執行目錄,他把服務和系統獨立地分開來,這樣服務被黑了就不能影響到系統的安全

    /lost+found 這個目錄是使用標準的ext2/ext3/ext4文件系統格式纔會產生的一個目錄,目的在於當文件系統發生錯誤時, 將一些遺失的片段存放到這個目錄下。這個目錄通常會在分區的最頂層存在, 例如你加裝一顆硬盤於/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 的意義與內容

    很多人都會誤會/usr爲user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是[Unix操作系統軟件資源]所存放的目錄,而不是用戶的數據。FHS建議所有軟件開發者,應該將他們的數據合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄。這個目錄有點類似Windows系統的『C:\Windows\ + C:\Program files\』這兩個目錄的綜合體,這個目錄會佔用最多的硬盤容量。一般來說,/usr的次目錄建議有底下這些:

    /usr/bin/ 用戶自行安裝的軟件相關命令令都放在這裏

    /usr/include/ c/c++等程序語言的頭文件(header)與包含文件(include)存放處,當我們以tarball方式 (*.tar.gz 的方式安裝軟件)安裝某些數據時,會使用到裏頭的許多包含文件。

    /usr/lib/ 包含各應用軟件的函數庫、目標文件(object file),以及不被一般使用者慣用的執行文件或腳本(script)。 某些軟件會提供一些特殊的命令來進行服務器的設定,這些命令也不會經常被系統管理員操作, 那就會被放到這個目錄裏。

    /usr/local/ 系統管理員在本機自行安裝自己下載的軟件,建議安裝到此目錄, 這樣會比較便於管理。該目錄下也是具有bin, etc, include, lib…的次目錄。

    /usr/sbin/ 非系統正常運作所需要的系統命令。最常見的就是某些網絡服務器軟件的服務命令(daemon)。

    /usr/share/ 存放共享文件的地方,在這個目錄下存放的數據幾乎是不分硬件架構均可讀取的數據, 因爲幾乎都是文本文件。在此目錄下常見的還有這些次目錄: ? /usr/share/man:聯機幫助文件 ?

    /usr/share/doc:軟件雜項的文件說明 ? /usr/share/zoneinfo:與時區有關的時區檔案

    /usr/src/ 一般原始碼建議存放到這裏,src有source的意思。至於核心原始碼則建議存放到/usr/src/linux/目錄下。

    /usr/games 存放遊戲文件

    /usr/X11R6/ 這個目錄在RHEL6下沒有了(我安裝了X Window System,但沒有這個目錄)。

    /usr/libexec 也是些庫文件,根據文件名來判讀,可能是可執行文件的庫文件吧。

    以上兩個目錄,本人也不太瞭解,所以希望不要誤導大家。各位同仁,有知道詳情的,請給我留言,謝謝。

    /var 的意義與內容

    如果/usr是安裝時會佔用較大硬盤容量的目錄,那麼/var就是在系統運行後纔會漸漸佔用硬盤容量的目錄。 因爲/var目錄主要針對常態性變動的文件,包括緩存(cache)、登錄文件(log file)以及某些軟件運行所產生的文件,包括程序文件(lock file, run file)等等。常見的次目錄有:

    /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存放在這個目錄裏。

    /var/spool/ 這個目錄通常存放一些隊列數據,所謂的隊列就是排隊等待其他程序使用的數據。 這些數據被使用後通常都會被刪除。舉例來說,系統收到新信會存放到/var/spool/mail/中, 但使用者收下該信件後該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中, 等到被送出後就被刪除。如果是計劃任務(crontab),就會被存放到/var/spool/cron/目錄中。

    其它的一些文件,大家自行了解。

    /proc的意義與內容

    /proc它在磁盤上並不存在,是內核在內存中創建了它,它用於提供有關係統的信息。

    /proc/數字 每一個進程在/proc下面都有一個以其進程號爲名稱的目錄。

    /proc/cpuinfo 有關處理器的信息,如它的類型、製造日期、型號以及性能。

    /proc/devices 配置進當前運行內核的設備驅動程序的列表。

    /proc/meminfo 物理內存和交換區使用情況的信息。

    /proc/modules 此時哪些內核模塊被加載。

    /proc/net 網絡協議的狀態信息。

    /proc/uptime 系統啓動的時間。

    /proc/version 內核版本。

    雖然以上文件基本上是易讀的文本文件,這些文件的格式有時可能還是難於理解。有許多命令就只是讀入上述文件並格式化成利於理解的格式。例如,free程序讀入/proc/meminfo信息並將字節數轉換成千字節(同時也加入了少量的信息)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章