Linux之目錄結構
一、概述
學習 Linux,不僅限於學習各種命令,了解整個 Linux 文件系統的目錄結構以及各個目錄的功能同樣至關重要。
使用 Linux 時,通過命令行輸入 ls -l /
可以看到,在 Linux 根目錄(/)下包含很多的子目錄(稱為一級目錄),例如 bin、boot、dev 等。同時,各一級目錄下還含有很多子目錄(稱為二級目錄),比如 /bin/bash、/bin/ed 等。Linux 文件系統目錄總體呈現樹形結構,/ 根目錄就相當於樹根。
由於 Linux 系統免費開源,使得 Linux 發行版本有很多,利用 Linux 開發產品的團隊也有很多,如果任由每個人都按照自己的想法來配置 Linux 系統文件目錄,后期可能會產生諸多的管理問題。試想,如果你進入一家公司,所用 Linux 系統的文件目錄結構與所學的完全不同,實在令人頭疼。
為了避免諸多使用者對 Linux 系統目錄結構天馬行空,Linux 基金會發布了 FHS 標准。多數 Linux 發行版系統都遵循這一標准。
FHS(Filesystem Hierarchy Standard),文件系統層次化標准,該標准規定了 Linux 系統中所有一級目錄以及部分二級目錄(/usr 和 /var)的用途。發布此標准的主要目的就是為了讓用戶清楚地了解每個目錄應該存放什么類型的文件。
一、基本介紹
-
Linux 的文件系統是采用級層式的樹狀目錄結構,在此結構中的最上層是根目錄“/”,然后在此目錄下再創建其他的
目錄。
-
深刻理解 Linux 樹狀文件目錄是非常重要的,這里我給大家說明一下。
-
記住一句經典的話:在 Linux 世界里,一切皆文件(!!)
-
示意圖
二、具體的目錄結構(不用背,知道即可)
FHS 認為,Linux 系統的根目錄(/)最為重要(沒有之一),其原因有以下 2 點:
- 所有目錄都是由根目錄衍生出來的;
- 根目錄與系統的開機、修復、還原密切相關;
因此,根目錄必須包含開機軟件、核心文件、開機所需程序、函數庫、修復系統程序等文件,如表 1 所示。
表 1 Linux一級目錄及其作用
一級目錄 | 功能(作用) |
---|---|
/bin/ | 存放系統命令,普通用戶和 root 都可以執行。放在 /bin 下的命令在單用戶模式下也可以執行 |
/boot/ | 系統啟動目錄,保存與系統啟動相關的文件,如內核文件和啟動引導程序(grub)文件等 |
/dev/ | 設備文件保存位置 |
/etc/ | 配置文件保存位置。系統內所有采用默認安裝方式(rpm 安裝)的服務配置文件全部保存在此目錄中,如用戶信息、服務的啟動腳本、常用服務的配置文件、環境變量配置文件等 |
/home/ | 普通用戶的主目錄(也稱為家目錄)。在創建用戶時,每個用戶要有一個默認登錄和保存自己數據的位置,就是用戶的主目錄,所有普通用戶的主目錄是在 /home/ 下建立一個和用戶名相同的目錄。如用戶 liming 的主目錄就是 /home/liming |
/lib/ | 系統調用的函數庫保存位置 |
/media/ | 掛載目錄。系統建議用來掛載媒體設備,如軟盤和光盤 |
/mnt/ | 掛載目錄。早期 Linux 中只有這一個掛載目錄,並沒有細分。系統建議這個目錄用來掛載額外的設備,如 U 盤、移動硬盤和其他操作系統的分區 |
/misc/ | 掛載目錄。系統建議用來掛載 NFS 服務的共享目錄。雖然系統准備了三個默認掛載目錄 /media/、/mnt/、/misc/,但是到底在哪個目錄中掛載什么設備可以由管理員自己決定。例如,筆者在接觸 Linux 的時候,默認掛載目錄只有 /mnt/,所以養成了在 /mnt/ 下建立不同目錄掛載不同設備的習慣,如 /mnt/cdrom/ 掛載光盤、/mnt/usb/ 掛載 U 盤,都是可以的 |
/opt/ | 第三方安裝的軟件保存位置。這個目錄是放置和安裝其他軟件的位置,手工安裝的源碼包軟件都可以安裝到這個目錄中。不過筆者還是習慣把軟件放到 /usr/local/ 目錄中,也就是說,/usr/local/ 目錄也可以用來安裝軟件 |
/root/ | root 的主目錄。普通用戶主目錄在 /home/ 下,root 主目錄直接在“/”下 |
/sbin/ | 保存與系統環境設置相關的命令,只有 root 可以使用這些命令進行系統環境設置,但也有些命令可以允許普通用戶查看 |
/srv/ | 服務數據目錄。一些系統服務啟動之后,可以在這個目錄中保存所需要的數據 |
/tmp/ | 臨時目錄。系統存放臨時文件的目錄,在該目錄下,所有用戶都可以訪問和寫入。建議此目錄中不能保存重要數據,最好每次開機都把該目錄清空 |
FHS 針對根目錄中包含的子目錄僅限於表 1,但除此之外,Linux 系統根目錄下通常還包含表 2 中的幾個一級目錄。
表 2 其他一級目錄及功能
一級目錄 | 功能(作用) |
---|---|
/lost+found/ | 當系統意外崩潰或意外關機時,產生的一些文件碎片會存放在這里。在系統啟動的過程中,fsck 工具會檢查這里,並修復已經損壞的文件系統。這個目錄只在每個分區中出現,例如,/lost+found 就是根分區的備份恢復目錄,/boot/lost+found 就是 /boot 分區的備份恢復目錄 |
/proc/ | 虛擬文件系統。該目錄中的數據並不保存在硬盤上,而是保存到內存中。主要保存系統的內核、進程、外部設備狀態和網絡狀態等。如 /proc/cpuinfo 是保存 CPU 信息的,/proc/devices 是保存設備驅動的列表的,/proc/filesystems 是保存文件系統列表的,/proc/net 是保存網絡協議信息的...... |
/sys/ | 虛擬文件系統。和 /proc/ 目錄相似,該目錄中的數據都保存在內存中,主要保存與內核相關的信息 |
-
Linux /usr目錄
usr(注意不是 user),全稱為 Unix Software Resource,此目錄用於存儲系統軟件資源。FHS 建議所有開發者,應把軟件產品的數據合理的放置在 /usr 目錄下的各子目錄中,而不是為他們的產品創建單獨的目錄。
Linux 系統中,所有系統默認的軟件都存儲在 /usr 目錄下,/usr 目錄類似 Windows 系統中 C:\Windows\ + C:\Program files\ 兩個目錄的綜合體。
FHS 建議,/usr 目錄應具備表 3 所示的子目錄。
表 3 /usr 子目錄及其功能
子目錄 | 功能(作用) |
---|---|
/usr/bin/ | 存放系統命令,普通用戶和超級用戶都可以執行。這些命令和系統啟動無關,在單用戶模式下不能執行 |
/usr/sbin/ | 存放根文件系統不必要的系統管理命令,如多數服務程序,只有 root 可以使用。 |
/usr/lib/ | 應用程序調用的函數庫保存位置 |
/usr/XllR6/ | 圖形界面系統保存位置 |
/usr/local/ | 手工安裝的軟件保存位置。我們一般建議源碼包軟件安裝在這個位置 |
/usr/share/ | 應用程序的資源文件保存位置,如幫助文檔、說明文檔和字體目錄 |
/usr/src/ | 源碼包保存位置。我們手工下載的源碼包和內核源碼包都可以保存到這里。不過筆者更習慣把手工下載的源碼包保存到 /usr/local/src/ 目錄中,把內核源碼保存到 /usr/src/linux/ 目錄中 |
/usr/include | C/C++ 等編程語言頭文件的放置目錄 |
-
Linux /var 目錄
/var 目錄用於存儲動態數據,例如緩存、日志文件、軟件運行過程中產生的文件等。通常,此目錄下建議包含如表 4 所示的這些子目錄。
表 4 /var子目錄及其功能
/var子目錄 | 功能(作用) |
---|---|
/var/lib/ | 程序運行中需要調用或改變的數據保存位置。如 MySQL 的數據庫保存在 /var/lib/mysql/ 目錄中 |
/var/log/ | 登陸文件放置的目錄,其中所包含比較重要的文件如 /var/log/messages, /var/log/wtmp 等。 |
/var/run/ | 一些服務和程序運行后,它們的 PID(進程 ID)保存位置 |
/var/spool/ | 里面主要都是一些臨時存放,隨時會被用戶所調用的數據,例如 /var/spool/mail/ 存放新收到的郵件,/var/spool/cron/ 存放系統定時任務。 |
/var/www/ | RPM 包安裝的 Apache 的網頁主目錄 |
/var/nis和/var/yp | NIS 服務機制所使用的目錄,nis 主要記錄所有網絡中每一個 client 的連接信息;yp 是 linux 的 nis 服務的日志文件存放的目錄 |
/var/tmp | 一些應用程序在安裝或執行時,需要在重啟后使用的某些文件,此目錄能將該類文件暫時存放起來,完成后再行刪除 |
根據以上各表列舉的各目錄及作用,如果我們要做一些實驗和練習,需要創建一些臨時文件,應該保存在哪里呢?
答案是用戶的主目錄或 /tmp/ 臨時目錄。但是要小心有些目錄中不能直接修改和保存數據,比如 /proc/fn/sys/ 目錄,因為它們是保存在內存中的,如果在這里寫入數據,那么你的內存會越來越小,直至死機;/boot/ 目錄也不能保存額外數據,因為 /boot/ 目錄會單獨分區作為啟動分區,如果沒有空閑空間,則會導致系統不能正常啟動。
總之,Linux 要在合理的目錄下進行操作和修改。