【講清楚,說明白!】Linux系統目錄結構

Linux目錄配置的依據---FHS
因爲利用Linux來開發產品或社羣公司的人實在太多了,如果每個人都用自己的想法來配置文件放置的目錄,那麼將造成很多管理上的困擾,爲了能夠實現統一化的管理,就有了Filesystem Hierarchy Standard(FHS)標準出爐了。
根據FHS的標準文件指出,它們的主要目的是希望讓使用者可以瞭解到已安裝軟件通常放置於哪個目錄下,所以他們希望獨立的軟件開發商,操作系統製作者,已經想要維護系統的用戶,都能夠遵循FHS的標準。也就是說,FHS的重點在於規範每個特定的目錄下應該要放置什麼樣子的數據。這樣的好處非常多,因爲Linux操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。
(1)事實上,FHS是根據過去的經驗一直在持續的改版的,FHS依據文件系統使用的頻繁與否與是否允許使用者隨意更動,而將目錄定義成四種交互作用的形態,用表格來說有點像下面這樣:
【講清楚,說明白!】Linux系統目錄結構
上表中的目錄就是一些代表性的目錄,該目錄底下所放置的數據表示的四個類型:
a.可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據,是能夠分享給網絡上其他主機掛載用的目錄;
b.不可分享的:自己機器上運行的配置文件或者是與程序有關的socket文件等,由於僅與自身機器有關,所以當然就不適合分享給其他主機了;
c.不變的:有些數據是不會經常變動的,跟隨着distribution而變動。例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等;
d.可變動的:經常改變的數據,例如登錄文件、一般用戶可自行接收的新聞組等。
FHS針對目錄架構定義出三層目錄定下應該放置什麼數據而已,分別是底下這三個目錄的定義:
/---root、根目錄,與開機系統有關
/usr---unix software resource,與軟件安裝執行有關
/var---variable,與系統運行過程有關
(2)根目錄是整個系統最重要的一個目錄,因爲不但所有的目錄都是有根目錄衍生出來的,同時根目錄也與開機、還原、系統修復等動作有關。由於系統開機時需要特定的開機軟件、核心文件、開機所需程序、函式庫等等文件數據,若系統系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序才行。因爲根目錄是很重要,所以在FHS的要求方面,它希望根目錄不要放在非常大的分區槽內,因爲越大的分區槽你會放入越多的數據,如此一來根目錄所在分區槽就可能會有較多發生錯誤的機會。
因此FHS標準建議:根目錄(/)所在分區槽應該越小越好,且應用程序所安裝的軟件最好不要與根目錄放在同一個分區槽內,保持根目錄越小越好。如此不但效能較佳,根目錄所在的文件系統也較不容易發生問題。
【講清楚,說明白!】Linux系統目錄結構
/bin---系統有很多放置執行文件的目錄,但/bin比較特殊,因爲/bin放置的是在單人維護模式下還能夠被操作的指令。在/bin底下的指令可以被root與一般賬號所使用,主要有:cat,chmod,chown,date,mv,mkdir,cp,bash等等常用的指令。
/boot---這個目錄主要在放置開機會使用的文件,包括Linux核心文件以及開機選項與開機所需配置文件等等。Linux kernel常用的檔名爲:vmlinuz,如果使用的是grub2這個開機管理程序,則還會存在/boot/grub2/這個目錄。
/dev---在Linux系統上,任何裝置與接口設備都是以文件的形態存在於這個目錄當中的。只要透過存取這個目錄底下的某個文件,就等於存取某個裝置。比較重要的源文件有/dev/null,/dev/zero,/dev/tty,/dev/loop*,/dev/sd*等
/etc---系統主要的配置文件幾乎都放置在這個目錄內,例如人員的賬號密碼文件、各種服務的起始檔等。一般來說,這個目錄下的各文件屬性是可以讓一般使用者查閱的,但是隻有root有權限修改。FHS建議不要放置可執行文件在這個目錄中。比較重要的文件有/etc/modprobe.d,/etc/passwd,/etc/fstab,/etc/issue等。但是FHS規範了幾個重要的目錄要存在/etc/目錄下:/etc/opt/(這個目錄在放置第三方軟件/opt/的相關配置文件);/etc/X11(與X Window有關的各種配置文件都在這裏,尤其是xorg.conf這個X server的配置文件);/etc/sgml/(與SGML格式相關的各項配置文件);/etc/xml/(與XML格式有關的各項配置文件)
/lib---系統的函式庫非常多,而/lib放置的則是在開機會用到的函式庫,以及在/bin或/sbin底下的指令會呼叫的函式庫。什麼是函式庫呢?可以理解成外掛,某些指令必須要有這些外掛才能順利完成程序的執行,另外FHS還要求下面的目錄必須要存在/lib/modules/(這個目錄主要放置可抽換式的核心相關模塊或驅動程序)
/media---media是表示媒體介質,在這個/media底下放置的就是可移除的裝置。包括軟盤,光驅等等裝置都是暫時掛載在這裏,常見的檔名有:/media/floppy/,/media/cdrom/等。
/mnt---如果你想要暫時掛載某些額外的裝置,一般建議你可以放置到這個目錄中,這個目錄和/media相同,只是有了/media之後,這個目錄就用來常規掛載用了。
/opt---這個是給第三方軟件放置的目錄。例如IBM公司的DB2數據庫就是安裝在這個目錄下的。
/run---早起的FHS規定系統開機後所產生的各項信息應該要放置到/var/run目錄下,新版FHS則規範到/run底下。由於/run可以使用內存來仿真,因此效能上會好很多。
/sbin---Linux有非常多的指令用來設定系統環境的,這些指令只有root才能夠利用來設定系統,其他用戶最多隻能用來查詢而已。放在/sbin底下的爲開機過程中所需要的,裏面包括了開機、修復、還原系統所需要的命令。至於某些服務器軟件程序,一般則放置到/usr/sbin當中。至於本機自行安裝的軟件所產生的系統執行文件,則放置到/usr/local/sbin/當中。常見的指令包括:fdisk,fsck,ifconfig,mkfs等。
/srv---可以視爲service的縮寫,是一些網絡服務啓動之後,這些服務所需要取用的數據目錄。常見的服務如Web,FTP等。Web服務器需要的網頁資料就可以放置在/srv/www/裏面。不過,系統的服務數據如果尚未要提供給外網任何人瀏覽的話,預設還是建議放置到/var/lib/底下即可。
/tmp---這是讓一般用戶或者是正在執行的程序暫時放置文件的地方。這個目錄是任何人都能夠存取的,所以需要定期清理一下。當然,重要的數據不可放置在此目錄。因爲FHS建議在開機時,應該要將/tmp下的數據都刪除。
/home---這是系統默認的用戶家目錄。在你新增一個一般使用者賬號時,默認的用戶家目錄都會規範到這裏來。
/root---系統管理員的家目錄。之所以在這裏,是因爲如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分區槽中。
/lost+found---這個目錄是使用標準的ext2/ext3/ext4文件系統格式纔會產生的一個目錄,目的在於當文件系統發生錯誤時,將一些遺失的片段放置到這個目錄下。不過如果使用的是xfs文件系統,就不會存在這個目錄了。
/proc---這個目錄本身是一個虛擬文件系統,它放置的數據都是在內存當中,例如系統核心、行程信息、周邊裝置的狀態及網絡狀態等。因爲這個目錄下的數據都是在內存當中,所以本身不佔任何硬盤空間,比較重要的文件例如:/proc/cpuinfo,/proc/dma,/proc/interrupts,/proc/ioports,/proc/net*等等。
/sys---這個目錄其實跟/proc非常類似,也是一個虛擬的文件系統,主要也是記錄核心與系統硬件信息較相關的信息,包括目前已加載的核心模塊與核心偵測到的硬件裝置信息等。這個目錄同樣不佔硬盤容量。
(3)早期Linux在設計的時候,若發生問題時,救援模式通常僅掛載根目錄而已,因此有五個重要的目錄被要求一定要與根目錄放置在一起,那就是/etc,/bin,/dev,/lib,/sbin這五個重要目錄。現在許多的Linux distributions由於已經將許多非必要的文件移出/usr之外了,所以/usr也是越來越精簡,同時因爲/usr被建議爲即使掛載成爲只讀,系統還是可以正常運作。所以救援模式也能同時掛載/usr,因此在RHEL7版本就已經將/sbin,/bin,/lib統統移動到/usr底下了。
【/usr的意義與內容】依據FHS的基本定義,/usr裏面放置的數據屬於可分享的與不可變動的,如果你知道如何透過網絡進行分區槽的掛載,那麼/usr確實可以分享給局域網絡內的其他主機來使用:
/usr/bin---所有一般用戶能夠使用的指令都放在這裏,目前RHEL7已經將全部的用戶指令放置於此,而使用連接檔的方式將/bin連接至此,也就是說/usr/bin與/bin是一模一樣了,另外FHS要求在此目錄下不應該有子目錄。
/usr/lib---基本上與/lib功能相同,所以/lib就是連接到此目錄中。
/usr/local---系統管理員在提供本機自行安裝自己下載的軟件,建議安裝到此目錄,這樣會比較便於管理。舉例來說,你的distribution提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版本,此時你可以將新版軟件安裝於/usr/local目錄下,可與原先的舊版軟件有分別。
/usr/sbin---非系統正常運作所需要的系統指令,最常見的就是網絡服務器軟件的服務指令daemon,不過基本功能與/sbin也差不多,因此目前/sbin就是鏈接到此目錄中的。
/usr/share---主要放置只讀架構的數據文件,當然也包括共享文件。在這個目錄下放置的數據幾乎是不分硬件架構均可讀取的數據,因爲幾乎都是文本文件。在此目錄下常見的還有這些次目錄/usr/share/man(聯機幫助文件);/usr/share/doc(軟件雜項的文件說明);/usr/share/zoneinfo(與時區有關的時區文件)
/usr/games---與遊戲相關的數據放置處。
/usr/include---c/c++等程序語言的頭文件與包含文件放置處,當我們以*.tar.gz的方式安裝軟件時,會使用到裏頭的包含文件。
/usr/libexec---某些不被一般使用者慣用的執行檔或腳本等等,都會放置在此目錄中。例如大部分X窗口底下的操作指令,很多都是放在此目錄下的。
/usr/lib64---與/lib64功能相同,因此目前/lib64就是鏈接到此目錄中。
/usr/src---一般原代碼建議放置到這裏,src表示source的意思。至於核心原代碼則建議放置到/usr/src/linux目錄下。
(4)【/var的意義與內容】如果/usr是安裝時會佔用較大硬盤容量的目錄,那麼/var就是在系統運作後纔會漸漸佔用硬盤容量的目錄。因爲/var目錄主要針對常態性變動的文件,包括快取(cache),登錄檔(log file)以及某些軟件運行所產生的文件,包括程序文件(lock file,run file),或者MySQL數據庫的文件等。常見的次目錄有:
/var/cache---應用程序本身運作過程中會產生一些暫存檔。
/var/lib---程序本身執行的過程中,需要使用到的數據文件放置的目錄。在此目錄下各自的軟件應該要有各自的目錄。舉例來說,MySQL的數據庫放置到/var/lib/mysql,而rpm的數據庫則放到/var/lib/rpm中。
/var/lock---某些裝置或者是文件資源一次只能被一個應用程序所使用,如果同時又兩個程序使用該裝置時,就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖,以確保該裝置只會給單一軟件所使用。舉例來說,刻錄機正在刻錄一塊光盤,可能有兩個人同時刻錄,那應該寫入誰的資料?所以當第一個人在刻錄時該刻錄機就會被上鎖,第二個人就得要該裝置被解除鎖定才能夠繼續使用,目前此目錄被挪到/run/lock中。
/var/log---非常重要,這是登錄文件放置的目錄,裏面比較重要的文件如/var/log/messages,/var/log/wtmp(記錄登陸者信息)
/var/mail---放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail目錄中,通常這兩個目錄是互爲鏈接的文件。
/var/run---某些程序或者時候服務啓動後,會將他們的PID放置在這個目錄下。與/run相同,這個目錄鏈接到/run去了。
/var/spool---這個目錄通常放置一些隊列數據,所謂的隊列就是排隊等待其他程序使用的數據,這些數據被使用後通常都會被刪除,舉例來說,系統收到新郵件會放置到/var/spool/mail/中,但使用者收下該信件後該封郵件原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中,等到被送出後就被刪除。如果是計劃任務,就會被放置到/var/spool/cron/目錄中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章