Linux中國

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

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國