Linux 檔案系統的目錄結構

newdayhope發表於2006-04-28

作者:北南南北
來自:LinuxSir.Org
摘要: Linux檔案系統是呈樹形結構,瞭解Linux檔案系統的目錄結構,對於我們駕馭Linux還是有必要的。本文對Linux下比較重要的目錄加以解說,以答初學者所說的“雜亂無章”目錄結構,給一個簡要的說明。


目錄









++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++

Linux檔案系統結的結構是樹形結構,其入口從/開始,瞭解Linux檔案系統的結構,對於我們需要掌握的基礎知識點之一。


1、什麼是檔案系統;

請參見:


2、檔案系統的組織結構簡說;

當您使用Linux的時候,如果您透過ls -la / 就會發現,在/下包涵很多的目錄,比如etc、usr、var、bin ... ... 等目錄,而在這些目錄中,我們進去看看,發現也有很多的目錄或檔案。檔案系統在Linux下看上去就象樹形結構,所以我們可以把檔案系統的結構形象的稱為樹形結構。

檢視檔案系統的結構,我們可以透過tree命令來實現;

[root@localhost ~]# tree

不過tree 這個命令目前在Fedora Core 5.0 中已經消失,在Slackware 10.2的版本中仍有保留。不過其它版本的Linux應該有;由tree命令的輸出結果來看,最頂端應該是/,我們稱/為Linux的root,也就是Linux作業系統的檔案系統。Linux的檔案系統的入口就是/,所有的目錄、檔案、裝置都在/之下,/就是Linux檔案系統的組織者,也是最上級的領導者。

下面我們把Linux檔案系統的樹形結構的主要目錄列一下,主要


3、檔案系統的組織結構分析;

檔案系統的組織結構分析,我們能分析什麼呢?也就是當我們列/目錄時,所看到的/usr、/etc ... ... /var 等目錄是做什麼用的,這些目錄是不是有些特定的用途。無論哪個哪個版本的Linux系統,都有這些目錄,這些目錄應該是標準的。當然各個Linux發行版本也會存在一些小小的差異,但總體來說,還是大體差不多。

Linux發行版本之間的差別其實很少,差別主要表現在系統管理的特色工具以及軟體包管理方式的不同,除此之外,沒有什麼大的差別; 比如Fedora軟體包管理工具是rpm,而Slackware是pkgtool 或installpkg等;

言歸正傳,我們接著說檔案系統組織結構。

/ Linux檔案系統的入口,也是處於最高一級的目錄;

/bin 基礎系統所需要的那些命令位於此目錄,也是最小系統所需要的命令;比如 ls、cp、mkdir等命令;功能和/usr/bin類似,這個目錄中的檔案都是可執行的,普通使用者都可以使用的命令。做為基礎系統所需要的最基礎的命令就是放在這裡。

/boot Linux的核心及引導系統程式所需要的檔案,比如 vmlinuz initrd.img 檔案都位於這個目錄中。在一般情況下,GRUB或LILO系統引導管理器也位於這個目錄;

/dev 裝置檔案儲存目錄,比如音效卡、磁碟... ...

/etc 系統配置檔案的所在地,一些伺服器的配置檔案也在這裡;比如使用者帳號及密碼配置檔案;

/home 普通使用者家目錄預設存放目錄;

/lib 庫檔案存放目錄

/lost+found 在ext2或ext3檔案系統中,當系統意外崩潰或機器意外關機,而產生一些檔案碎片放在這裡。當系統啟動的過程中fsck工具會檢查這裡,並修復已經損壞的檔案系統。 有時系統發生問題,有很多的檔案被移到這個目錄中,可能會用手工的方式來修復,或移到檔案到原來的位置上。

/media 即插即用型儲存裝置的掛載點自動在這個目錄下建立,比如USB盤系統自動掛載後,會在這個目錄下產生一個目錄 ;CDROM/DVD自動掛載後,也會在這個目錄中建立一個目錄,類似cdrom 的目錄。這個只有在最新的發行套件上才有,比如Fedora Core 4.0 5.0 等。可以參看/etc/fstab的定義;

/misc

/mnt 這個目錄一般是用於存放掛載儲存裝置的掛載目錄的,比如有cdrom 等目錄。可以參看/etc/fstab的定義。有時我們可以把讓系統開機自動掛載檔案系統,把掛載點放在這裡也是可以的。主要看/etc/fstab中怎麼定義了;比如光碟機可以掛載到/mnt/cdrom 。

/opt 表示的是可選擇的意思,有些軟體包也會被安裝在這裡,也就是自定義軟體包,比如在Fedora Core 5.0中,OpenOffice就是安裝在這裡。有些我們自己編譯的軟體包,就可以安裝在這個目錄中;透過原始碼包安裝的軟體,可以透過 ./configure --prefix=/opt/目錄 。

/proc 作業系統執行時,程式(正在執行中的程式)資訊及核心資訊(比如cpu、硬碟分割槽、記憶體資訊等)存放在這裡。/proc目錄偽裝的檔案系統proc的掛載目錄,proc並不是真正的檔案系統,它的定義可以參見 /etc/fstab 。

/root Linux超級許可權使用者root的家目錄;

/sbin 大多是涉及系統管理的命令的存放,是超級許可權使用者root的可執行命令存放地,普通使用者無許可權執行這個目錄下的命令,這個目錄和/usr/sbin;/usr/X11R6/sbin或/usr/local/sbin目錄是相似的; 我們記住就行了,凡是目錄sbin中包含的都是root許可權才能執行的。

/tmp 臨時檔案目錄,有時使用者執行程式的時候,會產生臨時檔案。/tmp就用來存放臨時檔案的。/var/tmp目錄和這個目錄相似。

/usr 這個是系統存放程式的目錄,比如命令、幫助檔案等。這個目錄下有很多的檔案和目錄。當我們安裝一個Linux發行版官方提供的軟體包時,大多安裝在這裡。如果有涉及伺服器配置檔案的,會把配置檔案安裝在/etc目錄中。/usr目錄下包括涉及字型目錄/usr/share/fonts ,幫助目錄 /usr/share/man或/usr/share/doc,普通使用者可執行檔案目錄/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,超級許可權使用者root的可執行命令存放目錄,比如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;還有程式的標頭檔案存放目錄/usr/include。

/var 這個目錄的內容是經常變動的,看名字就知道,我們可以理解為vary的縮寫,/var下有/var/log 這是用來存放系統日誌的目錄。/var/www目錄是定義Apache伺服器站點存放目錄;/var/lib 用來存放一些庫檔案,比如MySQL的,以及MySQL資料庫的的存放地;

我們再補充一下一些比較重要的目錄的用途;

/etc/init.d 這個目錄是用來存放系統或伺服器以System V模式啟動的指令碼,這在以System V模式啟動或初始化的系統中常見。比如Fedora/RedHat;
/etc/xinit.d 如果伺服器是透過xinetd模式執行的,它的指令碼要放在這個目錄下。有些系統沒有這個目錄, 比如Slackware,有些老的版本也沒有。在Rehat/Fedora中比較新的版本中存在。

/etc/rc.d 這是Slackware發行版有的一個目錄,是BSD方式啟動指令碼的存放地;比如定義網路卡,伺服器開啟指令碼等。

/etc/X11 是X-Windows相關的配置檔案存放地;
比如下面的例子:

[root@localhost ~]# /etc/init.d/sshd start 注:啟動sshd伺服器
[root@localhost ~]# /etc/init.d/sshd stop 注:停止sshd伺服器
啟動 sshd: [確定]

這就是典型的sshd 伺服器 System V模式啟動指令碼,透過這執行這個指令碼可以啟動sshd伺服器了。

/usr/bin 這個目錄是可執行程式的目錄,普通使用者就有許可權執行; 當我們從系統自帶的軟體包安裝一個程式時,他的可執行檔案大多會放在這個目錄。比如安裝gaim軟體包時。相似的目錄是/usr/local/bin; 有時/usr/bin中的檔案是/usr/local/bin的連結檔案;

/usr/sbin 這個目錄也是可執行程式的目錄,但大多存放涉及系統管理的命令。只有root許可權才能執行;相似目錄是/sbin 或/usr/local/sbin或/usr/X11R6/sbin等;

/usr/local 這個目錄一般是用來存放使用者自編譯安裝軟體的存放目錄;一般是透過原始碼包安裝的軟體,如果沒有特別指定安裝目錄的話,一般是安裝在這個目錄中。這個目錄下面有子目錄。自己看看吧。

/usr/lib 和/lib 目錄相似,是庫檔案的儲存目錄;

/usr/share 系統共用的東西存放地,比如 /usr/share/fonts 是字型目錄,是使用者都共用的吧。

/usr/share/doc和/usr/share/man幫助檔案,也是共用的吧;

/usr/src 是核心原始碼存放的目錄,比如下面有核心原始碼目錄,比如 linux 、linux-2.xxx.xx 目錄等。有的系統也會把原始碼軟體包安裝在這裡。比如Fedora/Redhat,當我們安裝file.src.rpm的時候,這些軟體包會安裝在/usr/src/redhat相應的目錄中。請參考: 。另外Fedhat 4.0 5.0,他的核心原始碼包的目錄位於/usr/src/kernels目錄下的某個目錄中(只有安裝後才會生成相應目錄);

/var/adm 比如軟體包安裝資訊、日誌、管理資訊等,在Slackware作業系統中是有這個目錄的。在Fedora中好象沒有;自己看看吧。
/var/log 系統日誌存放,分析日誌要看這個目錄的東西;
/var/spool 印表機、郵件、代理伺服器等假離線目錄;


4、本文未盡事宜;

由於Linux發行版很多,總有一點差別,但總體上還是差不多。多列目錄看看就慢慢明白了。Windows的好多目錄,我們也不是一樣不知道它是用來做什麼的,但我們一樣用Windows。再說目前Linux一樣可以點滑鼠來檢視這些目錄,沒有什麼難的。如果不會用命令,點滑鼠總會看,對不對?


5、關於本文;

本文是Linux檔案系統的一個組成部份,對於一個系列文件來說,還是必不可缺的,它也是基礎文件之一。因為我想能過本文引出Linux檔案相關的操作的文章 。為新手寫的... ....


6、後記;

寫文件是一個堅持的過程,寫文件還是給了我很多的樂趣 ,許可權休閒而寫,並沒有感覺到有多痛苦;如果一件事被當成壓力,也沒有什麼樂趣而言,如果果真如此,不如不做。在隨後,我可能寫一寫Linux檔案相關的內容,比如建立、刪除、移動、屬性、許可權等;


7、參考文件

man fstab


8、相關文件

[@more@]
幾個重要的Linux核心檔案
作者: lili 釋出日期: 2006-3-15 檢視數:
120 出自:
Linux伺服器核心編譯基礎
--幾個重要的RedHat Linux核心檔案介紹
mynix編譯自之Linux HowTo之Kernel HowTo
在網路中,不少伺服器採用的是Linux系統。為了進一步提高伺服器的效能,可能需要根據特定的硬體及需求重新編譯Linux核心。編譯Linux核心,需要根據規定的步驟進行,編譯核心過程中涉及到幾個重要的檔案。比如對於RedHat Linux,在/boot目錄下有一些與Linux核心有關的檔案,進入/boot執行:ls –l。編譯過RedHat Linux核心的人對其中的System.map 、vmlinuz、initrd-2.4.7-10.img印象可能比較深刻,因為編譯核心過程中涉及到這些檔案的建立等操作。那麼這幾個檔案是怎麼產生的?又有什麼作用呢?本文對此做些介紹。
一、vmlinuz
vmlinuz是可引導的、壓縮的核心。“vm”代表“Virtual Memory”。Linux 支援虛擬記憶體,不像老的作業系統比如DOS有640KB記憶體的限制。Linux能夠使用硬碟空間作為虛擬記憶體,因此得名“vm”。vmlinuz是可執行的Linux核心,它位於/boot/vmlinuz,它一般是一個軟連結。
vmlinuz的建立有兩種方式。一是編譯核心時透過“make zImage”建立,然後透過:
“cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage /boot/vmlinuz”產生。zImage適用於小核心的情況,它的存在是為了向後的相容性。二是核心編譯時透過命令make bzImage建立,然後透過:“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage /boot/vmlinuz”產生。bzImage是壓縮的核心映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示“big zImage”。 bzImage中的b是“big”意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個壓縮檔案,而且在這兩個檔案的開頭部分內嵌有gzip解壓縮程式碼。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
核心檔案中包含一個微型的gzip用於解壓縮核心並引導它。兩者的不同之處在於,老的zImage解壓縮核心到低端記憶體(第一個640K),bzImage解壓縮核心到高階記憶體(1M以上)。如果核心比較小,那麼可以採用zImage 或bzImage之一,兩種方式引導的系統執行時是相同的。大的核心採用bzImage,不能採用zImage。
vmlinux是未壓縮的核心,vmlinuz是vmlinux的壓縮檔案。
二、 initrd-x.x.x.img
initrd是“initial ramdisk”的簡寫。initrd一般被用來臨時的引導硬體到實際核心vmlinuz能夠接管並繼續引導的狀態。比如,使用的是scsi硬碟,而核心vmlinuz中並沒有這個scsi硬體的驅動,那麼在裝入scsi模組之前,核心不能載入根檔案系統,但scsi模組儲存在根檔案系統的/lib/modules下。為了解決這個問題,可以引導一個能夠讀實際核心的initrd核心並用initrd修正scsi引導問題。initrd-2.4.7-10.img是用gzip壓縮的檔案,下面來看一看這個檔案的內容。

initrd實現載入一些模組和安裝檔案系統等。
initrd映象檔案是使用mkinitrd建立的。mkinitrd實用程式能夠建立initrd映象檔案。這個命令是RedHat專有的。其它Linux發行版或許有相應的命令。這是個很方便的實用程式。具體情況請看幫助:man mkinitrd
下面的命令建立initrd映象檔案:
三、 System.map
System.map是一個特定核心的核心符號表。它是你當前執行的核心的System.map的連結。
核心符號表是怎麼建立的呢? System.map是由“nm vmlinux”產生並且不相關的符號被濾出。對於本文中的例子,編譯核心時,System.map建立在/usr/src/linux-2.4/System.map。像下面這樣:
nm /boot/vmlinux-2.4.7-10 > System.map
下面幾行來自/usr/src/linux-2.4/Makefile:
nm vmlinux | grep -v '(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)' | sort > System.map
然後複製到/boot:
cp /usr/src/linux/System.map /boot/System.map-2.4.7-10
在進行程式設計時,會命名一些變數名或函式名之類的符號。Linux核心是一個很複雜的程式碼塊,有許許多多的全域性符號。
Linux核心不使用符號名,而是透過變數或函式的地址來識別變數或函式名。比如不是使用size_t BytesRead這樣的符號,而是像c0343f20這樣引用這個變數。
對於使用計算機的人來說,更喜歡使用那些像size_t BytesRead這樣的名字,而不喜歡像c0343f20這樣的名字。核心主要是用c寫的,所以編譯器/聯結器允許我們編碼時使用符號名,當核心執行時使用地址。
然而,在有的情況下,我們需要知道符號的地址,或者需要知道地址對應的符號。這由符號表來完成,符號表是所有符號連同它們的地址的列表。Linux 符號表使用到2個檔案:
/proc/ksyms
System.map
/proc/ksyms是一個“proc file”,在核心引導時建立。實際上,它並不真正的是一個檔案,它只不過是核心資料的表示,卻給人們是一個磁碟檔案的假象,這從它的檔案大小是0可以看出來。然而,System.map是存在於你的檔案系統上的實際檔案。當你編譯一個新核心時,各個符號名的地址要發生變化,你的老的System.map具有的是錯誤的符號資訊。每次核心編譯時產生一個新的System.map,你應當用新的System.map來取代老的System.map。
雖然核心本身並不真正使用System.map,但其它程式比如klogd, lsof和ps等軟體需要一個正確的System.map。如果你使用錯誤的或沒有System.map,klogd的輸出將是不可靠的,這對於排除程式故障會帶來困難。沒有System.map,你可能會面臨一些令人煩惱的提示資訊。
另外少數驅動需要System.map來解析符號,沒有為你當前執行的特定核心建立的System.map它們就不能正常工作。
Linux的核心日誌守護程式klogd為了執行名稱-地址解析,klogd需要使用System.map。System.map應當放在使用它的軟體能夠找到它的地方。執行:man klogd可知,如果沒有將System.map作為一個變數的位置給klogd,那麼它將按照下面的順序,在三個地方查詢System.map:
/boot/System.map
/System.map
/usr/src/linux/System.map
System.map也有版本資訊,klogd能夠智慧地查詢正確的映象(map)文

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/181629/viewspace-831220/,如需轉載,請註明出處,否則將追究法律責任。

相關文章