Linux——目錄配置

Linux 目錄配置的依據--FHS

FHS的標準文件指出他們的主要目的是希望讓使用者可以瞭解到已安裝軟件通常放置於那個目錄下, 所以他們希望獨立的軟件開發商、操作系統製作者、以及想要維護系統的用戶,都能夠遵循 FHS 的標準。 也就是說,FHS 的重點在於規範每個特定的目錄下應該要放置什麼樣子的數據而已。 這樣做好處非常多,因爲 Linux 操作系統就能夠在既有的面貌下(目錄架構不變)發展出開發者想要的獨特風格。事實上,FHS 是根據過去的經驗一直再持續的改版的,FHS 依據文件系統使用的頻繁與否與是否允許使用者隨意更動, 而將目錄定義成爲四種交互作用的形態,用表格來說有點像底下這樣:

 

可分享的(shareable)

不可分享的(unshareable)

 

 

不變的(static)

/usr (軟件放置處)

/etc (配置文件)

/opt (第三方協力軟件)

/boot (開機與核心檔)

 

可變動的(variable)

/var/mail (使用者郵件信箱)

/var/run (程序相關)

/var/spool/news (新聞組)

/var/lock (程序相關)

上表中的目錄就是一些代表性的目錄,四種交互作用的形態(四種類型)分別是指:

  • 可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據, 是能夠分享給網絡上其他主機掛載用的目錄;
  • 不可分享的:自己機器上面運作的裝置文件或者是與程序有關的 socket 文件等, 由於僅與自身機器有關, 所以當然就不適合分享給其他主機了。
  • 不變的:有些數據是不會經常變動的,跟隨着 distribution 而不變動。 例如函式庫、文件說明文件、系統管理員所管理的主機服務配置文件等等;
  • 可變動的:經常改變的數據,例如登錄文件、一般用戶可自行收受的新聞組等。

事實上,FHS 針對目錄樹架構僅定義出三層目錄底下應該放置什麼數據而已,分別是底下這三個目錄的定義:

  • / (root, 根目錄):與開機系統有關;
  • /usr (unix software resource):與軟件安裝/執行有關;
  • /var (variable):與系統運作過程有關。

爲什麼要定義出這三層目錄呢?其實是有意義的喔!每層目錄底下所應該要放置的目錄也都又特定的規定喔! 

注意:這個 root  在 Linux 裏面的意義真的很多很多~多到讓人搞不懂那是啥玩意兒。 如果以『賬號』的角度來看,所謂的 root 指的是『系統管理員!』的身份, 如果以『目錄』的角度來看,所謂的 root 意即指的是根目錄,就是 / 啦~ 要特別留意喔!

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

根目錄是整個系統最重要的一個目錄,因爲不但所有的目錄都是由根目錄衍生出來的,同時根目錄也與開機/還原/系統修復等動作有關。由於系統開機時需要特定的開機軟件、核心文件、開機所需程序、函式庫等等文件數據,若系統出現錯誤時,根目錄也必須要包含有能夠修復文件系統的程序纔行。 因爲根目錄是這麼的重要,所以在 FHS 的要求方面,他希望根目錄不要放在非常大的分區槽內, 因爲越大的分區槽妳會放入越多的數據,如此一來根目錄所在分區槽就可能會有較多發生錯誤的機會。

因此 FHS 標準建議:根目錄(/)所在分區槽應該越小越好, 且應用程序所安裝的軟件最好不要與根目錄放在同一個分區槽內,保持根目錄越小越好。 如此不但效能較佳,根目錄所在的文件系統也較不容易發生問題。

因此 FHS 定義出根目錄(/)底下應該要有底下這些次目錄的存在纔好,即使沒有實體目錄,FHS 也希望至少有連結檔存在纔好:

目錄

應放置文件內容

第一部份:FHS  要求必須要存在的目錄

 

 

/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 建議不要放置可執行文件(binary)在這個目錄中。比較重要的文件有:/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 底下的指令會呼叫的函式庫而已。 什麼是函式庫呢?妳可以將他想成是『外掛』,某些指令必須要有這些『外掛』才能夠順利完成程序的執行之意。 另外 FSH 還要求底下的目錄必須要存在:

 

  • /lib/modules/:這個目錄主要放置可抽換式的核心相關模塊(驅動程序)喔!

 

/media

media 是『媒體』的英文,顧名思義,這個/media 底下放置的就是可移除的裝置啦! 包括軟盤、光盤、DVD 等等裝置都暫時掛載於此。常見的檔名有:/media/floppy, /media/cdrom 等等。

 

/mnt

如果妳想要暫時掛載某些額外的裝置,一般建議妳可以放置到這個目錄中。 在古早時候,這個目錄的用途與/media 相同啦!只是有了/media 之後,這個目錄就用來暫時掛載用了。

 

 

/opt

這個是給第三方協力軟件放置的目錄。什麼是第三方協力軟件啊? 舉例來說,KDE 這個桌面管理系統是一個獨立的計劃,不過他可以安裝到 Linux 系統中,因此 KDE 的軟件就建議放置到此目錄下了。 另外,如果妳想要自行安裝額外的軟件(非原本的 distribution 提供的),那麼也能夠將你的軟件安裝到這裏來。 不過,以前的 Linux 系統中,我們還是習慣放置在/usr/local 目錄下呢!

 

/run

早期的 FHS 規定系統開機後所產生的各項信息應該要放置到 /var/run 目錄下,新版的 FHS 則規範到/run 底下。 由於 /run 可以使用內存來仿真,因此效能上會好很多!

 

 

 

/sbin

Linux 有非常多指令是用來設定系統環境的,這些指令只有 root 才能夠利用來『設定』系統,其他用戶最多隻能用來『查詢』而已。放在/sbin 底下的爲開機過程中所需要的,裏面包括了開機、修復、還原系統所需要的指令。 至於某些服務器軟件程序,一般則放置到/usr/sbin/當中。至於本機自行安裝的軟件所產生的系統執行文件(system binary), 則放置到/usr/local/sbin/當中了。常見的指令包括:fdisk, fsck, ifconfig, mkfs 等等。

 

 

/srv

srv 可以視爲『service』的縮寫,是一些網絡服務啓動之後,這些服務所需要取用的數據目錄。 常見的服務例如WWW, FTP 等等。舉例來說,WWW 服務器需要的網頁資料就可以放置在/srv/www/裏面。不過,系統的服務數據如果尚未要提供給因特網任何人瀏覽的話,預設還是建議放置到 /var/lib 底下即可。

 

 

/tmp

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

 

/usr

第二層 FHS 設定,後續介紹

/var

第二曾 FHS 設定,主要爲放置變動性的數據,後續介紹

第二部份:FHS  建議可以存在的目錄

 

/home

 

這是系統默認的用戶家目錄(home directory)。在你新增一個一般使用者賬號時, 默認的用戶家目錄都會規範到這裏來。比較重要的是,家目錄有兩種代號喔:

  • ~:代表目前這個用戶的家目錄
  • ~dmtsai :則代表 dmtsai 的家目錄!

 

/lib<qual>

用來存放與 /lib 不同的格式的二進制函式庫,例如支持 64 位的 /lib64 函式庫等

 

/root

系統管理員(root)的家目錄。之所以放在這裏,是因爲如果進入單人維護模式而僅掛載根目錄時, 該目錄就能夠擁有root 的家目錄,所以我們會希望root 的家目錄與根目錄放置在同一個分區槽中。

事實上 FHS 針對根目錄所定義的標準就僅有上面的咚咚, 底下是幾個在 Linux 當中也是非常重要的目錄:

目錄

應放置文件內容

 

 

/lost+found

這個目錄是使用標準的 ext2/ext3/ext4 文件系統格式纔會產生的一個目錄,目的在於當文件系統發生錯誤時, 將一些遺失的片段放置到這個目錄下。不過如果使用的是 xfs 文件系統的話,就不會存在這個目錄了!

 

 

/proc

這個目錄本身是一個『虛擬文件系統(virtual filesystem)』喔!他放置的數據都是在內存當中, 例如系統核心、行程信息(process)、周邊裝置的狀態及網絡狀態等等。因爲這個目錄下的數據都是在內存當中, 所以本身不佔任何硬盤空間啊!比較重要的文件例如:/proc/cpuinfo, /proc/dma, /proc/interrupts,/proc/ioports, /proc/net/* 等等。

 

 

/sys

這個目錄其實跟/proc 非常類似,也是一個虛擬的文件系統,主要也是記錄核心與系統硬件信息較相關的信息。 包括目前已加載的核心模塊與核心偵測到的硬件裝置信息等等。這個目錄同樣不佔硬盤容量喔!

早期 Linux  在設計的時候,若發生問題時,救援模式通常僅掛載根目錄而已,因此有五個重要的目錄被要求一定要與根目錄放置在一起, 那就是 /etc, /bin, /dev, /lib, /sbin 這五個重要目錄。現在許多的 Linux distributions 由於已經將許多非必要的文件移出 /usr 之外了, 所以 /usr 也是越來越精簡, 同時因爲 /usr 被建議爲『即使掛載成爲只讀,系統還是可以正常運作』的模樣,所以救援模式也能同時掛載 /usr 喔! 例如我們的這個 CentOS 7.x 版本在救援模式的情況下就是這樣。因此那個五大目錄的限制已經被打破了呦!例如 CentOS 7.x 就已經將 /sbin, /bin, /lib 通通移動到 /usr 底下了哩!

/usr 的意義與內容

依據 FHS 的基本定義,/usr 裏面放置的數據屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網絡進行分區槽的掛載(例如在服務器篇會談到的 NFS 服務器),那麼/usr 確實可以分享給局域網絡內的其他主機來使用喔!

很多讀者都會誤會/usr user 的縮寫,其實 usr Unix Software Resource 的縮寫, 也就是『Unix 操作系統軟件資源』所放置的目錄,而不是用戶的數據啦!這點要注意。 FHS 建議所有軟件開發者, 應該將他們的數據合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟件自己獨立的目錄。因爲是所有系統默認的軟件(distribution 發佈者提供的軟件)都會放置到/usr 底下,因此這個目錄有點類似 Windows 系統的『C:\Windows\ (當中的一部份) + C:\Program files\』這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬盤容量。一般來說,/usr 的次目錄建議有底下這些:

目錄

應放置文件內容

第一部份:FHS  要求必須要存在的目錄

 

 

/usr/bin/

所有一般用戶能夠使用的指令都放在這裏!目前新的 CentOS 7 已經將全部的用戶指令放置於此, 而使用連結檔的方式將 /bin 連結至此! 也就是說, /usr/bin /bin  是一模一樣了!另外,FHS 要求在此目錄下不應該有子目錄!

 

/usr/lib/

基本上,與 /lib 功能相同,所以 /lib 就是鏈接到此目錄中的!

 

 

/usr/local/

系統管理員在本機自行安裝自己下載的軟件(distribution 默認提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的 distribution 提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版, 此時你可以將新版軟件安裝於/usr/local/目錄下,可與原先的舊版軟件有分別啦! 你可以自行到/usr/local 去看看,該目錄下也是具有 bin, etc, include, lib...的次目錄喔!

 

/usr/sbin/

非系統正常運作所需要的系統指令。最常見的就是某些網絡服務器軟件的服務指令(daemon)囉! 不過基本功能與 /sbin 也差不多, 因此目前 /sbin 就是鏈接到此目錄中的。

 

 

 

 

/usr/share/

主要放置只讀架構的數據文件,當然也包括共享文件。在這個目錄下放置的數據幾乎是不分硬件架構均可讀取的數據, 因爲幾乎都是文本文件嘛!在此目錄下常見的還有這些次目錄:

  • /usr/share/man:聯機幫助文件
  • /usr/share/doc:軟件雜項的文件說明
  • /usr/share/zoneinfo:與時區有關的時區文件

第二部份:FHS  建議可以存在的目錄

/usr/games/

與遊戲比較相關的數據放置處

 

/usr/include/

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

 

/usr/libexec/

某些不被一般使用者慣用的執行檔或腳本(script)等等,都會放置在此目錄中。例如大部分的 X 窗口底下的操作指令, 很多都是放在此目錄下的。

 

/usr/lib<qual>/

/lib<qual>/功能相同,因此目前 /lib<qual> 就是鏈接到此目錄中

 

/usr/src/

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

/var 的意義與內容

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

目錄

應放置文件內容

第一部份:FHS  要求必須要存在的目錄

 

/var/cache/

應用程序本身運作過程中會產生的一些暫存檔;

 

/var/lib/

程序本身執行的過程中需要使用到的數據文件放置的目錄。在此目錄下各自的軟件應該要有各自的目錄。 如MySQL 的數據庫放置到/var/lib/mysql/rpm 的數據庫則放到/var/lib/rpm 去!

 

 

 

 

/var/lock/

某些裝置或者是文件資源一次只能被一個應用程序所使用,如果同時有兩個程序使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會給單一軟件所使用。如刻錄機正在刻錄一塊光盤會不會有兩個人同時在使用一個刻錄機燒片? 如果兩個人同時刻錄,那片子寫入的是誰的資料?所以當第一個人在刻錄時該刻錄機就會被上鎖, 第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用囉。目前此目錄也已經挪到/run/lock 中!

 

/var/log/

登錄文件放置的目錄,比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等。

 

/var/mail/

放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中! 通常這兩個目錄是互爲鏈接文件啦!

 

/var/run/

某些程序或者是服務啓動後,會將他們的 PID 放置在這個目錄下喔!至於 PID 的意義我們會在後續章節提到的。 與 /run 相同,這個目錄鏈接到 /run 去了!

 

 

/var/spool/

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

針對 FHS,各家 distributions 的異同,與 CentOS7 的變化

由於 FHS 僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的文件或目錄數據, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。舉例來說,CentOS 的網絡設定數據放在/etc/sysconfig/network-scripts/ 目錄下,但是 SuSE 則是將網絡放置在 /etc/sysconfig/network/ 目錄下, 目錄名稱可是不同的呢!不過只要記住大致的 FHS 標準,差異性其實有限啦!

CentOS 7 在目錄的編排上與過去的版本不同喔!比較大的差異在於將許多原本應該要在根目錄 (/)  裏面的目錄,將他內部數據全部挪到 /usr 裏面去, 然後進行連結設定!包括底下這些:

  • /bin --> /usr/bin
  • /sbin --> /usr/sbin
  • /lib --> /usr/lib
  • /lib64 --> /usr/lib64
  • /var/lock --> /run/lock
  • /var/run --> /run
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章