Linux文件系統
Linux文件系統就是通過各種機制把硬件存儲設備轉換成邏輯的層次路徑結構。然後通過各條路徑來存放數據文件,這就叫做文件路徑。
設備文件創建文件系統的過程叫做格式化,也叫初始化。
在Linux文件系統中只有掛載了才能使用,通過mount掛載到掛載點。每個掛載點都可以是一個不同的文件系統。
Linux文件系統是一個倒植的樹狀結構。所有的文件或目錄都在"/"下。除第一個"/"的斜線其他都叫做路徑分隔符。如/var/spool/mail/root。 最後一個叫做葉子節點。前面的成爲分叉節點(目錄)。
文件由數據和元數據組成
目錄只是目錄中文件的數據和元數據的容器。(目錄也是一種文件)
Linux文件系統嚴格區分大小寫(跟操作系統無關)。
文件名可以是出了"/"和NUL以外的所有字符,但並不推薦使用。
文件名稱最長4095個字節,用/分隔的路徑不能超過255個字節。
linux的文件類型有
-:普通文件
d: 目錄文件
b: 塊設備
c: 字符設備
l: 符號鏈接文件
p: 管道文件pipe
s: 套接字文件socket
文件路徑分爲絕對路徑和相對路徑
絕對路徑以"/"開始
相對路徑是不以"/"開始
由於發行版衆多所有"/"下的一級子目錄都由LSB(Linux Standard Base)來統一
/boot:引導文件存放目錄,內核文件(vmlinuz)、引導加載器(bootloader, grub)都存放於此目錄
/bin:供所有用戶使用的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序 (CentOS7中/bin是/usr/bin軟鏈接)
/sbin:管理類的基本命令;不能關聯至獨立分區,OS啓動即會用到的程序(CentOS7中/sbin是/usr/sbin的軟鏈接)
/lib:啓動時程序依賴的基本共享庫文件以及內核模塊文件(/lib/modules)(CentOS7中/lib是/usr/lib的軟鏈接)
/lib64:專用於x86_64系統上的輔助共享庫文件存放位置 ((CentOS7中/lib64是/usr/lib64的軟鏈接))
/etc:配置文件目錄
/home/USERNAME:普通用戶家目錄
/root:管理員的家目錄
/media:便攜式移動設備掛載點
/mnt:臨時文件系統掛載點
/dev:設備文件及特殊文件存儲位置
b: block device,隨機訪問
c: character device,線性訪問
/opt:第三方應用程序的安裝位置
/srv:系統上運行的服務用到的數據
/tmp:臨時文件存儲位置
/usr:包含所有的命令、程序庫、文檔和其它文件。(是Linux最重要的目錄之一)
/var:系統可變的數據文件,如日誌等。
/proc: 用於輸出內核與進程信息相關的虛擬文件系統
/sys: 用於輸出當前系統上硬件設備相關信息虛擬文件系統
inode工作原理
在講inode之前我們要先了解元數據是什麼!!
元數據(Metadata),又稱中介數據、中繼數據,爲描述數據的數據(data about data),主要是描述數據屬性(property)的信息,用來支持如指示存儲位置、歷史數據、資源查找、文件記錄等功能。元數據算是一種電子式目錄,爲了達到編制目錄的目的,必須在描述並收藏數據的內容或特色,進而達成協助數據檢索的目的。都柏林核心集(Dublin Core Metadata Initiative,DCMI)是元數據的一種應用,是1995年2月由國際圖書館電腦中心(OCLC)和美國國家超級計算應用中心(National Center for Supercomputing Applications,NCSA)所聯合贊助的研討會,在邀請52位來自圖書館員、電腦專家,共同制定規格,創建一套描述網絡上電子文件之特徵。(百度百科)
inode的內容主要記錄得屬性以及該文件實際數據是放置在哪個block內。inode中細緻記錄了權限、屬主和屬組、文件大小、時間戳、文件真正內容的指向。每個inode大小均爲128bytes,每個文件都僅會佔用一個inode節點,因此文件的數量是跟inode有關。
系統讀取文件是通過文件名和它的inode號來找取文件,而目錄是目錄下文件和inode號之間的映射。根據分析inode的權限和用戶是否符合,若符合才能夠開始實際讀取block內的數據。
inode要記錄的東西非常多,但只有128bytes,直接指向block號碼要花掉4個bytes,因爲inode數量有限,文件大小不定,所以系統很聰明的將inode記錄block號碼的區域定義爲12個直接、一個間接、一個雙間接和一個三間接記錄區。如圖所示:
12直接指向指向12個數據塊。間接指向就是再拿出一個數據塊來做指向數據塊的記錄區,再指向數據塊。雙間接就是拿一個數據塊做指向記錄區再指向兩個記錄區,最後指向數據。以此類推!
12個直接指向爲12*4=48K
1個間接指向大小爲(4K/4)*4K=4M
1個雙重間接指向爲(4K/4)*(4K/4)*4K=4T
1個三重間接指向爲(4K/4)*(4K/4)*(4K/4)*4K=4P
數據塊的大小依文件系統而定。有1K,2K,4K,8K等。
文件cp,rm,mv和inode;
使用cp命令是將一個空閒的inode號,在inode表生成新條目在目錄中創建一個目錄項,將名稱與inode編號關聯拷貝數據從而生成新的文件。
使用rm命令是刪除inode指向,從而釋放inode號再利用,數據不會立即刪除而是放置列表中,知道別的數據重用數據塊。(恢復數據就是根據此原理)
使用mv命令是當在同一個文件系統中,只有文件名更改,而inode表不變。如果不是統一個文件系統就相當於cp,和rm。 文件名可自定,但inode會重新生成新的inode號。
軟鏈接和硬鏈接的區別在於:
硬鏈接:
創建硬鏈接會增加硬鏈接條目
刪除原文件鏈接文件依然能使用
不同文件系統不能做硬鏈接
目錄不能做硬鏈接
inode節點號
軟鏈接:
軟鏈接不會增加鏈接條目
刪除源文件鏈接文件不能使用
不同系統都可做軟鏈接
目錄也可以做軟鏈接
inode節點號不相同
創建軟鏈接加 -l參數
軟鏈接的鏈接路徑不是指當前路徑,而是源文件的相對路徑。
創建的鏈接文件用ls -l 顯示爲l(鏈接文件),顏色爲淺藍色