Linux 文件系統結構介紹
Linux中的文件是什麼?它的文件系統又是什麼?那些配置文件又在哪裡?我下載好的程序保存在哪裡了?在 Linux 中文件系統是標準結構的嗎?好了,上圖簡明地闡釋了Linux的文件系統的層次關係。當你苦於尋找配置文件或者二進位文件的時候,這便顯得十分有用了。我在下方添加了一些解釋以及例子,不過「篇幅較長,可以有空再看」。
另外一種情況便是當你在系統中獲取配置以及二進位文件時,出現了不一致性問題,如果你是在一個大型組織中,或者只是一個終端用戶,這也有可能會破壞你的系統(比如,二進位文件運行在舊的庫文件上了)。若然你在你的Linux系統上做安全審計的話,你將會發現它很容易遭到各種攻擊。所以,保持一個清潔的操作系統(無論是Windows還是Linux)都顯得十分重要。
Linux的文件是什麼?
對於UNIX系統來說(同樣適用於Linux),以下便是對文件簡單的描述:
在UNIX系統中,一切皆為文件;若非文件,則為進程
這種定義是比較正確的,因為有些特殊的文件不僅僅是普通文件(比如命名管道和套接字),不過為了讓事情變的簡單,「一切皆為文件」也是一個可以讓人接受的說法。Linux系統也像UNIX系統一樣,將文件和目錄視如同物,因為目錄只是一個包含了其他文件名的文件而已。程序、服務、文本、圖片等等,都是文件。對於系統來說,輸入和輸出設備,基本上所有的設備,都被當做是文件。
題圖版本歷史:
- Version 2.0 – 17-06-2015
- – Improved: 添加標題以及版本歷史
- – Improved: 添加/srv,/meida和/proc
- – Improved: 更新了反映當前的Linux文件系統的描述
- – Fixed: 多處的列印錯誤
- – Fixed: 外觀和顏色
- Version 1.0 – 14-02-2015
- – Created: 基本的圖表
- – Note: 摒棄更低的版本
下載鏈接
以下是大圖的下載地址。如果你需要其他格式,請跟原作者聯繫,他會嘗試製作並且上傳到某個地方以供下載
注意: PDF格式文件是列印的最好選擇,因為它畫質很高。
Linux 文件系統描述
為了有序地管理那些文件,人們習慣把這些文件當做是硬碟上的有序的樹狀結構,正如我們熟悉的'MS-DOS'(磁碟操作系統)就是一個例子。大的分枝包括更多的分枝,分枝的末梢是樹的葉子或者普通的文件。現在我們將會以這樹形圖為例,但晚點我們會發現為什麼這不是一個完全準確的一幅圖。
目錄 | 描述 |
---|---|
/ |
主層次 的根,也是整個文件系統層次結構的根目錄 |
/bin |
存放在單用戶模式可用的必要命令二進位文件,所有用戶都可用,如 cat、ls、cp等等 |
/boot |
存放引導載入程序文件,例如kernels、initrd等 |
/dev |
存放必要的設備文件,例如/dev/null |
/etc |
存放主機特定的系統級配置文件。其實這裡有個關於它名字本身意義上的的爭議。在貝爾實驗室的UNIX實施文檔的早期版本中,/etc表示是「其他(etcetera)目錄」,因為從歷史上看,這個目錄是存放各種不屬於其他目錄的文件(然而,文件系統目錄標準 FSH 限定 /etc 用於存放靜態配置文件,這裡不該存有二進位文件)。早期文檔出版後,這個目錄名又重新定義成不同的形式。近期的解釋中包含著諸如「可編輯文本配置」或者「額外的工具箱」這樣的重定義 |
/etc/opt |
存儲著新增包的配置文件 /opt/ . |
/etc/sgml |
存放配置文件,比如 catalogs,用於那些處理SGML(譯者註:標準通用標記語言)的軟體的配置文件 |
/etc/X11 |
X Window 系統11版本的的配置文件 |
/etc/xml |
配置文件,比如catalogs,用於那些處理XML(譯者註:可擴展標記語言)的軟體的配置文件 |
/home |
用戶的主目錄,包括保存的文件,個人配置,等等 |
/lib |
/bin/ 和 /sbin/ 中的二進位文件的必需的庫文件 |
/lib<架構位數> |
備用格式的必要的庫文件。 這樣的目錄是可選的,但如果他們存在的話肯定是有需要用到它們的程序 |
/media |
可移動的多媒體(如CD-ROMs)的掛載點。(出現於 FHS-2.3) |
/mnt |
臨時掛載的文件系統 |
/opt |
可選的應用程序軟體包 |
/proc |
以文件形式提供進程以及內核信息的虛擬文件系統,在Linux中,對應進程文件系統(procfs )的掛載點 |
/root |
根用戶的主目錄 |
/sbin |
必要的系統級二進位文件,比如, init, ip, mount |
/srv |
系統提供的站點特定數據 |
/tmp |
臨時文件 (另見 /var/tmp ). 通常在系統重啟後刪除 |
/usr |
二級層級存儲用戶的只讀數據; 包含(多)用戶主要的公共文件以及應用程序 |
/usr/bin |
非必要的命令二進位文件 (在單用戶模式中不需要用到的);用於所有用戶 |
/usr/include |
標準的包含文件 |
/usr/lib |
庫文件,用於/usr/bin/ 和 /usr/sbin/ 中的二進位文件 |
/usr/lib<架構位數> |
備用格式庫(可選的) |
/usr/local |
三級層次 用於本地數據,具體到該主機上的。通常會有下一個子目錄, 比如, bin/ , lib/ , share/ . |
/usr/local/sbin |
非必要系統的二進位文件,比如用於不同網路服務的守護進程 |
/usr/share |
架構無關的 (共享) 數據. |
/usr/src |
源代碼,比如內核源文件以及與它相關的頭文件 |
/usr/X11R6 |
X Window系統,版本號:11,發行版本:6 |
/var |
各式各樣的(Variable)文件,一些隨著系統常規操作而持續改變的文件就放在這裡,比如日誌文件,離線文件,還有臨時的電子郵件文件 |
/var/cache |
應用程序緩存數據. 這些數據是由耗時的I/O(輸入/輸出)的或者是運算本地生成的結果。這些應用程序是可以重新生成或者恢複數據的。當沒有數據丟失的時候,可以刪除緩存文件 |
/var/lib |
狀態信息。這些信息隨著程序的運行而不停地改變,比如,資料庫,軟體包系統的元數據等等 |
/var/lock |
鎖文件。這些文件用於跟蹤正在使用的資源 |
/var/log |
日誌文件。包含各種日誌。 |
/var/mail |
內含用戶郵箱的相關文件 |
/var/opt |
來自附加包的各種數據都會存儲在 /var/opt/ . |
/var/run |
存放當前系統上次啟動以來的相關信息,例如當前登入的用戶以及當前運行的daemons(守護進程). |
/var/spool |
該spool主要用於存放將要被處理的任務,比如列印隊列以及郵件外發隊列 |
/var/mail |
過時的位置,用於放置用戶郵箱文件 |
/var/tmp |
存放重啟後保留的臨時文件 |
Linux的文件類型
大多數文件僅僅是普通文件,他們被稱為regular
文件;他們包含普通數據,比如,文本、可執行文件、或者程序、程序的輸入或輸出等等
雖然你可以認為「在Linux中,一切你看到的皆為文件」這個觀點相當保險,但這裡仍有著一些例外。
目錄
:由其他文件組成的文件特殊文件
:用於輸入和輸出的途徑。大多數特殊文件都儲存在/dev
中,我們將會在後面討論這個問題。鏈接文件
:讓文件或者目錄出現在系統文件樹結構上多個地方的機制。我們將詳細地討論這個鏈接文件。(域)套接字
:特殊的文件類型,和TCP/IP協議中的套接字有點像,提供進程間網路通訊,並受文件系統的訪問控制機制保護。命名管道
: 或多或少有點像sockets(套接字),提供一個進程間的通信機制,而不用網路套接字協議。
現實中的文件系統
對於大多數用戶和常規系統管理任務而言,「文件和目錄是一個有序的類樹結構」是可以接受的。然而,對於電腦而言,它是不會理解什麼是樹,或者什麼是樹結構。
每個分區都有它自己的文件系統。想像一下,如果把那些文件系統想成一個整體,我們可以構思一個關於整個系統的樹結構,不過這並沒有這麼簡單。在文件系統中,一個文件代表著一個inode
(索引節點),這是一種包含著構建文件的實際數據信息的序列號:這些數據表示文件是屬於誰的,還有它在硬碟中的位置。
每個分區都有一套屬於他們自己的inode,在一個系統的不同分區中,可以存在有相同inode的文件。
每個inode都表示著一種在硬碟上的數據結構,保存著文件的屬性,包括文件數據的物理地址。當硬碟被格式化並用來存儲數據時(通常發生在初始系統安裝過程,或者是在一個已經存在的系統中添加額外的硬碟),每個分區都會創建固定數量的inode。這個值表示這個分區能夠同時存儲各類文件的最大數量。我們通常用一個inode去映射2-8k的數據塊。當一個新的文件生成後,它就會獲得一個空閑的inode。在這個inode裡面存儲著以下信息:
- 文件屬主和組屬主
- 文件類型(常規文件,目錄文件......)
- 文件許可權
- 創建、最近一次讀文件和修改文件的時間
- inode里該信息被修改的時間
- 文件的鏈接數(詳見下一章)
- 文件大小
- 文件數據的實際地址
唯一不在inode的信息是文件名和目錄。它們存儲在特殊的目錄文件。通過比較文件名和inode的數目,系統能夠構造出一個便於用戶理解的樹結構。用戶可以通過ls -i查看inode的數目。在硬碟上,inodes有他們獨立的空間。
via: http://www.blackmoreops.com/2015/06/18/linux-file-system-hierarchy-v2-0/
譯者:tnuoccalanosrep 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive