Linux 檔案系統結構介紹
Linux中的檔案是什麼?它的檔案系統又是什麼?那些配置檔案又在哪裡?我下載好的程式儲存在哪裡了?在 Linux 中檔案系統是標準結構的嗎?好了,上圖簡明地闡釋了Linux的檔案系統的層次關係。當你苦於尋找配置檔案或者二進位制檔案的時候,這便顯得十分有用了。我在下方添加了一些解釋以及例子,不過“篇幅較長,可以有空再看”。
另外一種情況便是當你在系統中獲取配置以及二進位制檔案時,出現了不一致性問題,如果你是在一個大型組織中,或者只是一個終端使用者,這也有可能會破壞你的系統(比如,二進位制檔案執行在舊的庫檔案上了)。若然你在你的Linux系統上做安全審計的話
https://www.blackmoreops.com/2015/02/15/in-light-of-recent-linux-exploits-linux-security-audit-is-a-must/
你將會發現它很容易遭到各種攻擊。所以,保持一個清潔的作業系統(無論是Windows還是Linux)都顯得十分重要。
Linux的檔案是什麼?
對於UNIX系統來說(同樣適用於Linux),以下便是對檔案簡單的描述:
在UNIX系統中,一切皆為檔案;若非檔案,則為程序
這種定義是比較正確的,因為有些特殊的檔案不僅僅是普通檔案(比如命名管道和套接字),不過為了讓事情變的簡單,“一切皆為檔案”也是一個可以讓人接受的說法。Linux系統也像UNIX系統一樣,將檔案和目錄視如同物,因為目錄只是一個包含了其他檔名的檔案而已。程式、服務、文字、圖片等等,都是檔案。對於系統來說,輸入和輸出裝置,基本上所有的裝置,都被當做是檔案。
題圖版本歷史:
下載連結
以下是大圖的下載地址。如果你需要其他格式,請跟原作者聯絡,他會嘗試製作並且上傳到某個地方以供下載
大圖 (PNG 格式) – 2480×1755 px – 184KB
最大圖 (PDF 格式) – 9919x7019 px – 1686KB
注意: PDF格式檔案是列印的最好選擇,因為它畫質很高。
Linux 檔案系統描述
為了有序地管理那些檔案,人們習慣把這些檔案當做是硬碟上的有序的樹狀結構,正如我們熟悉的'MS-DOS'(磁碟作業系統)就是一個例子。大的分枝包括更多的分枝,分枝的末梢是樹的葉子或者普通的檔案。現在我們將會以這樹形圖為例,但晚點我們會發現為什麼這不是一個完全準確的一幅圖。
Linux的檔案型別
大多數檔案僅僅是普通檔案,他們被稱為regular檔案;他們包含普通資料,比如,文字、可執行檔案、或者程式、程式的輸入或輸出等等
雖然你可以認為“在Linux中,一切你看到的皆為檔案”這個觀點相當保險,但這裡仍有著一些例外。
目錄:由其他檔案組成的檔案
特殊檔案:用於輸入和輸出的途徑。大多數特殊檔案都儲存在/dev中,我們將會在後面討論這個問題。
連結檔案:讓檔案或者目錄出現在系統檔案樹結構上多個地方的機制。我們將詳細地討論這個連結檔案。
(域)套接字:特殊的檔案型別,和TCP/IP協議中的套接字有點像,提供程序間網路通訊,並受檔案系統的訪問控制機制保護。
命名管道 : 或多或少有點像sockets(套接字),提供一個程序間的通訊機制,而不用網路套接字協議。
現實中的檔案系統
對於大多數使用者和常規系統管理任務而言,“檔案和目錄是一個有序的類樹結構”是可以接受的。然而,對於電腦而言,它是不會理解什麼是樹,或者什麼是樹結構。
每個分割槽都有它自己的檔案系統。想象一下,如果把那些檔案系統想成一個整體,我們可以構思一個關於整個系統的樹結構,不過這並沒有這麼簡單。在檔案系統中,一個檔案代表著一個inode(索引節點),這是一種包含著構建檔案的實際資料資訊的序列號:這些資料表示檔案是屬於誰的,還有它在硬碟中的位置。
每個分割槽都有一套屬於他們自己的inode,在一個系統的不同分割槽中,可以存在有相同inode的檔案。
每個inode都表示著一種在硬碟上的資料結構,儲存著檔案的屬性,包括檔案資料的實體地址。當硬碟被格式化並用來儲存資料時(通常發生在初始系統安裝過程,或者是在一個已經存在的系統中新增額外的硬碟),每個分割槽都會建立固定數量的inode。這個值表示這個分割槽能夠同時儲存各類檔案的最大數量。我們通常用一個inode去對映2-8k的資料塊。當一個新的檔案生成後,它就會獲得一個空閒的inode。在這個inode裡面儲存著以下資訊:
檔案屬主和組屬主
檔案型別(常規檔案,目錄檔案......)
檔案許可權
建立、最近一次讀檔案和修改檔案的時間
inode裡該資訊被修改的時間
檔案的連結數(詳見下一章)
檔案大小
檔案資料的實際地址