FHS(Filesystem Hierarchy Standard):
FHS依據(jù)文件系統(tǒng)使用的頻繁與否與是否允許使用者隨意更動(dòng), 而將目錄定義成為四種交互作用的形態(tài),用表格來(lái)說(shuō)有點(diǎn)像底下這樣:
可分享的(shareable)不可分享的(unshareable)
不變的(static)/usr (軟件放置處)/etc (配置文件)
/opt (第三方協(xié)力軟件)/boot (開機(jī)與核心檔)
可變動(dòng)的(variable)/var/mail (使用者郵件信箱)/var/run (程序相關(guān))
/var/spool/news (新聞組)/var/lock (程序相關(guān))
可分享的:可以分享給其他系統(tǒng)掛載使用的目錄,所以包括執(zhí)行文件與用戶的郵件等數(shù)據(jù), 是能夠分享給網(wǎng)絡(luò)上其他主機(jī)掛載用的目錄;
不可分享的:自己機(jī)器上面運(yùn)作的裝置文件或者是與程序有關(guān)的socket文件等, 由于僅與自身機(jī)器有關(guān),所以當(dāng)然就不適合分享給其他主機(jī)了.
不變的:有些數(shù)據(jù)是不會(huì)經(jīng)常變動(dòng)的,跟隨著distribution而不變動(dòng). 例如函式庫(kù)、文件說(shuō)明文件、系統(tǒng)管理員所管理的主機(jī)服務(wù)配置文件等等;
可變動(dòng)的:經(jīng)常改變的數(shù)據(jù),例如登錄文件、一般用戶可自行收受的新聞組等.
事實(shí)上,FHS針對(duì)目錄樹架構(gòu)僅定義出三層目錄底下應(yīng)該放置什么數(shù)據(jù)而已,分別是底下這三個(gè)目錄的定義:
/ (root, 根目錄):與開機(jī)系統(tǒng)有關(guān);
/usr (unix software resource):與軟件安裝/執(zhí)行有關(guān);
/var (variable):與系統(tǒng)運(yùn)作過(guò)程有關(guān).
根目錄 (/) 的意義與內(nèi)容:
概要:
所有的目錄都是由根目錄衍生出來(lái)的(根目錄是整個(gè)系統(tǒng)最重要的一個(gè)目錄)
與開機(jī)/還原/系統(tǒng)修復(fù)等動(dòng)作有關(guān). (由于系統(tǒng)開機(jī)時(shí)需要特定的開機(jī)軟件、核心文件、開機(jī)所需程序、 函式庫(kù)等等文件數(shù)據(jù),若系統(tǒng)出現(xiàn)錯(cuò)誤時(shí),根目錄也必須要包含有能夠修復(fù)文件系統(tǒng)的程序才行)
FHS標(biāo)準(zhǔn)建議:根目錄(/)所在分割槽應(yīng)該越小越好, 且應(yīng)用程序所安裝的軟件最好不要與根目錄放在同一個(gè)分割槽內(nèi),保持根目錄越小越好.(因?yàn)樵酱蟮姆指畈蹔厱?huì)放入越多的數(shù)據(jù),如此一來(lái)根目錄所在分割槽就可能會(huì)有較多發(fā)生錯(cuò)誤的機(jī)會(huì),如此不但效能較佳,根目錄所在的文件系統(tǒng)也較不容易發(fā)生問(wèn)題.)
根目錄(/)底下目錄FHS定義的說(shuō)明:
目錄應(yīng)放置文件內(nèi)容
/bin系統(tǒng)有很多放置執(zhí)行文件的目錄,但/bin比較特殊.因?yàn)?bin放置的是在單人維護(hù)模式下還能夠被操作的指令. 在/bin底下的指令可以被root與一般賬號(hào)所使用,主要有:cat, chmod, chown, date, mv, mkdir, cp, bash等等常用的指令.
/boot這個(gè)目錄主要在放置開機(jī)會(huì)使用到的文件,包括Linux核心文件以及開機(jī)選單與開機(jī)所需配置文件等等. Linux kernel常用的檔名為:vmlinuz,如果使用的是grub這個(gè)開機(jī)管理程序, 則還會(huì)存在/boot/grub/這個(gè)目錄喔!
/dev在Linux系統(tǒng)上,任何裝置與接口設(shè)備都是以文件的型態(tài)存在于這個(gè)目錄當(dāng)中的. 你只要透過(guò)存取這個(gè)目錄底下的某個(gè)文件,就等于存取某個(gè)裝置啰~ 比要重要的文件有/dev/null, /dev/zero, /dev/tty, /dev/lp*, /dev/hd*, /dev/sd*等等
/etc系統(tǒng)主要的配置文件幾乎都放置在這個(gè)目錄內(nèi),例如人員的賬號(hào)密碼文件、 各種服務(wù)的啟始檔等等.一般來(lái)說(shuō),這個(gè)目錄下的各文件屬性是可以讓一般使用者查閱的, 但是只有root有權(quán)力修改.FHS建議不要放置可執(zhí)行文件(binary)在這個(gè)目錄中喔.比較重要的文件有: /etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/ 等等.另外,其下重要的目錄有:/etc/init.d/:所有服務(wù)的預(yù)設(shè)啟動(dòng) script 都是放在這里的,例如要啟動(dòng)或者關(guān)閉 iptables 的話:『 /etc/init.d/iptables start』、『/etc/init.d/iptables stop』
/etc/xinetd.d/:這就是所謂的super daemon管理的各項(xiàng)服務(wù)的配置文件目錄.
/etc/X11/:與 X Window 有關(guān)的各種配置文件都在這里,尤其是 xorg.conf 這個(gè) X Server 的配置文件.
/home這是系統(tǒng)默認(rèn)的用戶家目錄(home directory).在你新增一個(gè)一般使用者賬號(hào)時(shí), 默認(rèn)的用戶家目錄都會(huì)規(guī)范到這里來(lái).比較重要的是,家目錄有兩種代號(hào)喔:
~:代表目前這個(gè)用戶的家目錄,而
~dmtsai :則代表 dmtsai 的家目錄!
/lib系統(tǒng)的函式庫(kù)非常的多,而/lib放置的則是在開機(jī)時(shí)會(huì)用到的函式庫(kù), 以及在/bin或/sbin底下的指令會(huì)呼叫的函式庫(kù)而已. 什么是函式庫(kù)呢?妳可以將他想成是『外掛』,某些指令必須要有這些『外掛』才能夠順利完成程序的執(zhí)行之意. 尤其重要的是/lib/modules/這個(gè)目錄, 因?yàn)樵撃夸洉?huì)放置核心相關(guān)的模塊(驅(qū)動(dòng)程序)喔!
/mediamedia是『媒體』的英文,顧名思義,這個(gè)/media底下放置的就是可移除的裝置啦! 包括軟盤、光盤、DVD等等裝置都暫時(shí)掛載于此.常見的檔名有:/media/floppy, /media/cdrom等等.
/mnt如果妳想要暫時(shí)掛載某些額外的裝置,一般建議妳可以放置到這個(gè)目錄中. 在古早時(shí)候,這個(gè)目錄的用途與/media相同啦!只是有了/media之后,這個(gè)目錄就用來(lái)暫時(shí)掛載用了.
/opt這個(gè)是給第三方協(xié)力軟件放置的目錄.什么是第三方協(xié)力軟件啊? 舉例來(lái)說(shuō),KDE這個(gè)桌面管理系統(tǒng)是一個(gè)獨(dú)立的計(jì)劃,不過(guò)他可以安裝到Linux系統(tǒng)中,因此KDE的軟件就建議放置到此目錄下了. 另外,如果妳想要自行安裝額外的軟件(非原本的distribution提供的),那么也能夠?qū)⒛愕能浖惭b到這里來(lái). 不過(guò),以前的Linux系統(tǒng)中,我們還是習(xí)慣放置在/usr/local目錄下呢!
/root系統(tǒng)管理員(root)的家目錄.之所以放在這里,是因?yàn)槿绻M(jìn)入單人維護(hù)模式而僅掛載根目錄時(shí), 該目錄就能夠擁有root的家目錄,所以我們會(huì)希望root的家目錄與根目錄放置在同一個(gè)分割槽中.
/sbinLinux有非常多指令是用來(lái)設(shè)定系統(tǒng)環(huán)境的,這些指令只有root才能夠利用來(lái)『設(shè)定』系統(tǒng),其他用戶最多只能用來(lái)『查詢』而已. 放在/sbin底下的為開機(jī)過(guò)程中所需要的,里面包括了開機(jī)、修復(fù)、還原系統(tǒng)所需要的指令. 至于某些服務(wù)器軟件程序,一般則放置到/usr/sbin/當(dāng)中.至于本機(jī)自行安裝的軟件所產(chǎn)生的系統(tǒng)執(zhí)行文件(system binary), 則放置到/usr/local/sbin/當(dāng)中了.常見的指令包括:fdisk, fsck, ifconfig, init, mkfs等等.
/srvsrv可以視為『service』的縮寫,是一些網(wǎng)絡(luò)服務(wù)啟動(dòng)之后,這些服務(wù)所需要取用的數(shù)據(jù)目錄. 常見的服務(wù)例如WWW, FTP等等.舉例來(lái)說(shuō),WWW服務(wù)器需要的網(wǎng)頁(yè)數(shù)據(jù)就可以放置在/srv/www/里面.
/tmp這是讓一般使用者或者是正在執(zhí)行的程序暫時(shí)放置文件的地方. 這個(gè)目錄是任何人都能夠存取的,所以你需要定期的清理一下.當(dāng)然,重要數(shù)據(jù)不可放置在此目錄??! 因?yàn)镕HS甚至建議在開機(jī)時(shí),應(yīng)該要將/tmp下的數(shù)據(jù)都刪除??!
除上 FHS 中定義的目錄說(shuō)明外, 底下是幾個(gè)在Linux當(dāng)中非常重要的目錄:
目錄應(yīng)放置文件內(nèi)容
/lost+found這個(gè)目錄是使用標(biāo)準(zhǔn)的ext2/ext3文件系統(tǒng)格式才會(huì)產(chǎn)生的一個(gè)目錄,目的在于當(dāng)文件系統(tǒng)發(fā)生錯(cuò)誤時(shí), 將一些遺失的片段放置到這個(gè)目錄下.這個(gè)目錄通常會(huì)在分割槽的最頂層存在, 例如你加裝一顆硬盤于/disk中,那在這個(gè)系統(tǒng)下就會(huì)自動(dòng)產(chǎn)生一個(gè)這樣的目錄『/disk/lost+found』
/proc這個(gè)目錄本身是一個(gè)『虛擬文件系統(tǒng)(virtual filesystem)』喔!他放置的數(shù)據(jù)都是在內(nèi)存當(dāng)中, 例如系統(tǒng)核心、行程信息(process)、周邊裝置的狀態(tài)及網(wǎng)絡(luò)狀態(tài)等等.因?yàn)檫@個(gè)目錄下的數(shù)據(jù)都是在內(nèi)存當(dāng)中, 所以本身不占任何硬盤空間??!比較重要的文件例如:/proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/* 等等.
/sys這個(gè)目錄其實(shí)跟/proc非常類似,也是一個(gè)虛擬的文件系統(tǒng),主要也是記錄與核心相關(guān)的信息. 包括目前已加載的核心模塊與核心偵測(cè)到的硬件裝置信息等等.這個(gè)目錄同樣不占硬盤容量喔!
不可與根目錄分開的目錄(與開機(jī)過(guò)程有關(guān)):
根目錄與開機(jī)有關(guān),開機(jī)過(guò)程中僅有根目錄會(huì)被掛載, 其他分割槽則是在開機(jī)完成之后才會(huì)持續(xù)的進(jìn)行掛載的行為.就是因?yàn)槿绱?因此根目錄下與開機(jī)過(guò)程有關(guān)的目錄, 就不能夠與根目錄放到不同的分割槽去!
/etc:配置文件
/bin:重要執(zhí)行檔
/dev:所需要的裝置文件
/lib:執(zhí)行檔所需的函式庫(kù)與核心所需的模塊
/sbin:重要的系統(tǒng)執(zhí)行文件
/usr 的意義與內(nèi)容:
概要:
依據(jù)FHS的基本定義,/usr里面放置的數(shù)據(jù)屬于可分享的與不可變動(dòng)的(shareable, static), 如果你知道如何透過(guò)網(wǎng)絡(luò)進(jìn)行分割槽的掛載,那么/usr確實(shí)可以分享給局域網(wǎng)絡(luò)內(nèi)的其他主機(jī)來(lái)使用!
usr(Unix Software Resource 即Unix操作系統(tǒng)軟件資源) FHS建議所有軟件開發(fā)者,應(yīng)該將他們的數(shù)據(jù)合理的分別放置到這個(gè)目錄下的次目錄,而不要自行建立該軟件自己獨(dú)立的目錄.
所有系統(tǒng)默認(rèn)的軟件(distribution發(fā)布者提供的軟件)都會(huì)放置到/usr底下,因此這個(gè)目錄有點(diǎn)類似Windows 系統(tǒng)的『C:\Windows\ + C:\Program files\』這兩個(gè)目錄的綜合體,系統(tǒng)剛安裝完畢時(shí),這個(gè)目錄會(huì)占用最多的硬盤容量.
一般來(lái)說(shuō),/usr的次目錄建議有底下這些:
目錄應(yīng)放置文件內(nèi)容
/usr/X11R6/為X Window System重要數(shù)據(jù)所放置的目錄,之所以取名為X11R6是因?yàn)樽詈蟮腦版本為第11版,且該版的第6次釋出之意.
/usr/bin/絕大部分的用戶可使用指令都放在這里!請(qǐng)注意到他與/bin的不同之處.(是否與開機(jī)過(guò)程有關(guān))
/usr/include/c/c++等程序語(yǔ)言的檔頭(header)與包含檔(include)放置處,當(dāng)我們以tarball方式 (*.tar.gz 的方式安裝軟件)安裝某些數(shù)據(jù)時(shí),會(huì)使用到里頭的許多包含檔喔!
/usr/lib/包含各應(yīng)用軟件的函式庫(kù)、目標(biāo)文件(object file),以及不被一般使用者慣用的執(zhí)行檔或腳本(script). 某些軟件會(huì)提供一些特殊的指令來(lái)進(jìn)行服務(wù)器的設(shè)定,這些指令也不會(huì)經(jīng)常被系統(tǒng)管理員操作, 那就會(huì)被擺放到這個(gè)目錄下啦.要注意的是,如果你使用的是X86_64的Linux系統(tǒng), 那可能會(huì)有/usr/lib64/目錄產(chǎn)生喔!
/usr/local/系統(tǒng)管理員在本機(jī)自行安裝自己下載的軟件(非distribution默認(rèn)提供者),建議安裝到此目錄, 這樣會(huì)比較便于管理.舉例來(lái)說(shuō),你的distribution提供的軟件較舊,你想安裝較新的軟件但又不想移除舊版, 此時(shí)你可以將新版軟件安裝于/usr/local/目錄下,可與原先的舊版軟件有分別啦! 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib...的次目錄喔!
/usr/sbin/非系統(tǒng)正常運(yùn)作所需要的系統(tǒng)指令.最常見的就是某些網(wǎng)絡(luò)服務(wù)器軟件的服務(wù)指令(daemon)啰!
/usr/share/放置共享文件的地方,在這個(gè)目錄下放置的數(shù)據(jù)幾乎是不分硬件架構(gòu)均可讀取的數(shù)據(jù), 因?yàn)閹缀醵际俏谋疚募铮≡诖四夸浵鲁R姷倪€有這些次目錄:/usr/share/man:聯(lián)機(jī)幫助文件
/usr/share/doc:軟件雜項(xiàng)的文件說(shuō)明
/usr/share/zoneinfo:與時(shí)區(qū)有關(guān)的時(shí)區(qū)文件
/usr/src/一般原始碼建議放置到這里,src有source的意思.至于核心原始碼則建議放置到/usr/src/linux/目錄下.
/var 的意義與內(nèi)容:
概要:
/var目錄主要針對(duì)常態(tài)性變動(dòng)的文件,包括緩存(cache)、登錄檔(log file)以及某些軟件運(yùn)作所產(chǎn)生的文件, 包括程序文件(lock file, run file),或者例如MySQL數(shù)據(jù)庫(kù)的文件等等. 所以/var在系統(tǒng)運(yùn)作后才會(huì)漸漸占用硬盤容量的目錄
常見的次目錄有:
目錄應(yīng)放置文件內(nèi)容
/var/cache/應(yīng)用程序本身運(yùn)作過(guò)程中會(huì)產(chǎn)生的一些暫存檔;
/var/lib/程序本身執(zhí)行的過(guò)程中,需要使用到的數(shù)據(jù)文件放置的目錄.在此目錄下各自的軟件應(yīng)該要有各自的目錄. 舉例來(lái)說(shuō),MySQL的數(shù)據(jù)庫(kù)放置到/var/lib/mysql/而rpm的數(shù)據(jù)庫(kù)則放到/var/lib/rpm去!
/var/lock/某些裝置或者是文件資源一次只能被一個(gè)應(yīng)用程序所使用,如果同時(shí)有兩個(gè)程序使用該裝置時(shí), 就可能產(chǎn)生一些錯(cuò)誤的狀況,因此就得要將該裝置上鎖(lock),以確保該裝置只會(huì)給單一軟件所使用. 舉例來(lái)說(shuō),刻錄機(jī)正在刻錄一塊光盤,你想一下,會(huì)不會(huì)有兩個(gè)人同時(shí)在使用一個(gè)刻錄機(jī)燒片? 如果兩個(gè)人同時(shí)刻錄,那片子寫入的是誰(shuí)的數(shù)據(jù)?所以當(dāng)?shù)谝粋€(gè)人在刻錄時(shí)該刻錄機(jī)就會(huì)被上鎖, 第二個(gè)人就得要該裝置被解除鎖定(就是前一個(gè)人用完了)才能夠繼續(xù)使用啰.
/var/log/重要到不行!這是登錄文件放置的目錄!里面比較重要的文件如/var/log/messages, /var/log/wtmp(記錄登入者的信息)等.
/var/mail/放置個(gè)人電子郵件信箱的目錄,不過(guò)這個(gè)目錄也被放置到/var/spool/mail/目錄中! 通常這兩個(gè)目錄是互為鏈接文件啦!
/var/run/某些程序或者是服務(wù)啟動(dòng)后,會(huì)將他們的PID放置在這個(gè)目錄下喔! 至于PID的意義我們會(huì)在后續(xù)章節(jié)提到的.
/var/spool/這個(gè)目錄通常放置一些隊(duì)列數(shù)據(jù),所謂的『隊(duì)列』就是排隊(duì)等待其他程序使用的數(shù)據(jù)啦! 這些數(shù)據(jù)被使用后通常都會(huì)被刪除.舉例來(lái)說(shuō),系統(tǒng)收到新信會(huì)放置到/var/spool/mail/中, 但使用者收下該信件后該封信原則上就會(huì)被刪除.信件如果暫時(shí)寄不出去會(huì)被放到/var/spool/mqueue/中, 等到被送出后就被刪除.如果是工作排程數(shù)據(jù)(crontab),就會(huì)被放置到/var/spool/cron/目錄中!
針對(duì)FHS,各家distributions的異同:
由于FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內(nèi)容應(yīng)該要放置的文件或目錄數(shù)據(jù), 因此,在其他次目錄層級(jí)內(nèi),就可以隨開發(fā)者自行來(lái)配置了.舉例來(lái)說(shuō),CentOS的網(wǎng)絡(luò)設(shè)定數(shù)據(jù)放在 /etc/sysconfig/network-scripts/ 目錄下,但是SuSE則是將網(wǎng)絡(luò)放置在 /etc/sysconfig/network/ 目錄下,目錄名稱可是不同的呢!不過(guò)只要記住大致的FHS標(biāo)準(zhǔn),差異性其實(shí)有限啦!
目錄樹(directory tree):
在Linux底下,所有的文件與目錄都是由根目錄開始的!然后再一個(gè)一個(gè)的分支下來(lái),有點(diǎn)像是樹枝狀.因此,我們也稱這種目錄配置方式為:『目錄樹(directory tree)』它主要的特性有:
目錄樹的啟始點(diǎn)為根目錄 (/, root);
每一個(gè)目錄不止能使用本地端的 partition 的文件系統(tǒng),也可以使用網(wǎng)絡(luò)上的 filesystem 。舉例來(lái)說(shuō), 可以利用 Network File System (NFS) 服務(wù)器掛載某特定目錄等。
每一個(gè)文件在此目錄樹中的文件名(包含完整路徑)都是獨(dú)一無(wú)二的。
如果我們將整個(gè)目錄樹以圖標(biāo)的方法來(lái)顯示,并且將較為重要的文件數(shù)據(jù)列出來(lái)的話,那么目錄樹架構(gòu)有點(diǎn)像這樣:
圖釋一:
圖釋二: