轉自:http://myhat.blog.51cto.com/391263/107931/
-
*根目錄(/)的意義與內容:
根目錄是整個系統最重要的一個目錄,因為不但所有的目錄都是由根目錄衍生出來的,同時根目錄也與開機/還原/系統修復等動作有關。 由於系統開機時需要特定的開機軟體、核心檔案、開機所需程式。函式庫等等檔案資料,若系統出現錯誤時,根目錄也需要包含有能夠修復檔案系統的程式才行。 因為根目錄是這么的重要,所以在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有權限修改。 FHS建議不要放置可執行檔(binary)在這個目錄中哦。比較重要的檔案有:/etc/inittab,/etc/init.d,/etc/modprobe.conf,/etc/X11,/etc/fstab,/etc/sysconfig等等。另外,其下重要的目錄有:
-
/etc/init.d/:所有服務的預設啟動 . 都是放在這里的,例如要啟動或關閉iptables 的話:『 /etc/init.d/iptables start』、『/etc/init.d/iptables stop』
-
/etc/xinetd.d/:這就是所謂的super daemon管理各項服務的設定檔。
-
/etc/X11/:與Xwindow有關的各種設定檔,尤其是 xorg.conf 或 XF86Config 這兩個 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的軟體就建議放置到此目錄下了。 另外,如果你想要自行安裝額外的軟體(非原本的distribution提供的),那么也能夠將你的軟體安裝到這里來,不過,以前的Linux系統中,我們還是習慣放置在/user/local目錄下。 |
/root |
系統管理員(root)的家目錄。 之所以放在這里,是因為如果進入單人維護模式而僅掛載根目錄時,該目錄就能夠擁有root的家目錄,所以我們會希望root的家目錄與根目錄放置在同一個分割槽中。 |
/sbin |
Linux有非常多指令時用來設定系統環境的, 這些指令只有root 才能夠用來【設定】系統,其他使用者最多只能用來【查詢】而已。 放在/sbin 底下的為開機過程中所需要的,里面包括了開機、修復、還原系統所需要的指令。 至於某些服務器軟體程式,一般則放置到/user/sbin當中。 至於本機自行安裝的軟體所產生的系統執行檔(system binary),則放置到/user/local/sbin、當中了。 常見的指令包括: fdisk,fsck,ifconfig,init,mkfs 等等。 |
/srv |
srv可以視為【service】的縮寫,是一些網路服務啟動之后,這些服務所需要取用的資料目錄。 常見的服務例如WWW,FTP等等。舉例來說,WWW服務器需要的網頁資料就可以放置在/srv/www里面。 |
/tmp |
這是讓一般使用者或者是正在執行的程序暫時放置檔案的地方。這個目錄是人和人都能夠存取的,所以你需要定期的清理一下。 當然,重要資料不可放置在此目錄。 因為FHS甚至建議在開機時,應該要將/tmp下的資料都刪除! |
事實上FHS針對根目錄所定義的標准就僅有上面的東西,不過我們的Linux底下還有許多目錄你也需要了解一下的。 底下是幾個在Linux當中也是非常重要的目錄哦:
目錄 |
應放置檔案內容 |
/lost+found |
這個目錄是使用標準的ext2/ext3檔案系統格式才會產生的一個目錄,目的在於當檔案系統發生錯誤時, 將一些遺失的片段放置到這個目錄下。這個目錄通常會在分割槽的最頂層存在, 例如你加裝一顆硬碟於/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以及/var囉!先看/usr裡面有些什麼東西:
依據FHS的基本定義,/usr裡面放置的資料屬於可分享的與不可變動的(shareable, static), 如果你知道如何透過網路進行分割槽的掛載(例如在伺服器篇會談到的NFS伺服器),那麼/usr確實可以分享給區域網路內的其他主機來使用喔!
很多讀者都會誤會/usr為user的縮寫,其實usr是Unix Software Resource的縮寫, 也就是『Unix作業系統軟體資源』所放置的目錄,而不是使用者的資料啦!這點要注意。 FHS建議所有軟體開發者,應該將他們的資料合理的分別放置到這個目錄下的次目錄,而不要自行建立該軟體自己獨立的目錄。
因為是所有系統預設的軟體(distribution發佈者提供的軟體)都會放置到/usr底下,因此這個目錄有點類似Windows 系統的『C:\Windows\ + C:\Program files\』這兩個目錄的綜合體,系統剛安裝完畢時,這個目錄會佔用最多的硬碟容量。 一般來說,/usr的次目錄建議有底下這些:
目錄 |
應放置檔案內容 |
/usr/X11R6/ |
為X Window System重要資料所放置的目錄,之所以取名為X11R6是因為最後的X版本為第11版,且該版的第6次釋出之意。 |
/usr/bin/ |
絕大部分的使用者可使用指令都放在這裡!請注意到他與/bin的不同之處。(是否與開機過程有關) |
/usr/include/ |
c/c++等程式語言的檔頭(header)與包含檔(include)放置處,當我們以tarball方式 (*.tar.gz 的方式安裝軟體)安裝某些資料時,會使用到裡頭的許多包含檔喔! |
/usr/lib/ |
包含各應用軟體的函式庫、目標檔案(object file),以及不被一般使用者慣用的執行檔或腳本(.)。 某些軟體會提供一些特殊的指令來進行伺服器的設定,這些指令也不會經常被系統管理員操作, 那就會被擺放到這個目錄下啦。要注意的是,如果你使用的是X86_64的Linux系統, 那可能會有/usr/lib64/目錄產生喔! |
/usr/local/ |
系統管理員在本機自行安裝自己下載的軟體(非distribution預設提供者),建議安裝到此目錄, 這樣會比較便於管理。舉例來說,你的distribution提供的軟體較舊,你想安裝較新的軟體但又不想移除舊版, 此時你可以將新版軟體安裝於/usr/local/目錄下,可與原先的舊版軟體有分別啦! 你可以自行到/usr/local去看看,該目錄下也是具有bin, etc, include, lib...的次目錄喔! |
/usr/sbin/ |
非系統正常運作所需要的系統指令。最常見的就是某些網路伺服器軟體的服務指令(daemon)囉! |
/usr/share/ |
放置共享文件的地方,在這個目錄下放置的資料幾乎是不分硬體架構均可讀取的資料, 因為幾乎都是文字檔案嘛!在此目錄下常見的還有這些次目錄:
|
/usr/src/ |
一般原始碼建議放置到這裡,src有source的意思。至於核心原始碼則建議放置到/usr/src/linux/目錄下。 |
如果/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/ |
某些裝置或者是檔案資源一次只能被一個應用程式所使用,如果同時有兩個程式使用該裝置時, 就可能產生一些錯誤的狀況,因此就得要將該裝置上所(lock),以確保該裝置只會給單一軟體所使用。 舉例來說,燒錄機正在燒錄一塊光碟,你想一下,會不會有兩個人同時在使用一個燒錄機燒片? 如果兩個人同時燒錄,那片子寫入的是誰的資料?所以當第一個人在燒錄時該燒錄機就會被上鎖, 第二個人就得要該裝置被解除鎖定(就是前一個人用完了)才能夠繼續使用囉。 |
/var/log/ |
重要到不行!這是登錄檔放置的目錄!裡面比較重要的檔案如/var/log/messages, /var/log/wtmp(記錄登入者的資訊)等。 |
/var/mail/ |
放置個人電子郵件信箱的目錄,不過這個目錄也被放置到/var/spool/mail/目錄中! 通常這兩個目錄是互為連結檔啦! |
/var/run/ |
某些程式或者是服務啟動後,會將他們的PID放置在這個目錄下喔! 至於PID的意義我們會在後續章節提到的。 |
/var/spool/ |
這個目錄通常放置一些佇列資料,所謂的『佇列』就是排隊等待其他程式使用的資料啦! 這些資料被使用後通常都會被刪除。舉例來說,系統收到新信會放置到/var/spool/mail/中, 但使用者收下該信件後該封信原則上就會被刪除。信件如果暫時寄不出去會被放到/var/spool/mqueue/中, 等到被送出後就被刪除。如果是工作排程資料(crontab),就會被放置到/var/spool/cron/目錄中! |
建議在你讀完整個基礎篇之後,可以挑戰FHS官方英文文件 ,相信會讓你對於Linux作業系統的目錄有更深入的瞭解喔!
由於FHS僅是定義出最上層(/)及次層(/usr, /var)的目錄內容應該要放置的檔案或目錄資料, 因此,在其他次目錄層級內,就可以隨開發者自行來配置了。舉例來說,CentOS的網路設定資料放在 /etc/sysconfig/network-.s/ 目錄下,但是SuSE則是將網路放置在 /etc/sysconfig/network/ 目錄下,目錄名稱可是不同的呢!不過只要記住大致的FHS標準,差異性其實有限啦!
PS.
FHS:Filesystem Hierarchy Standard(文件系統目錄標准),FHS采用樹形結構組織文件,定義了系統中每個區域的用途、所需要的最小構成的文件和目錄同時還給出了例外處理與矛盾處理。