INODE索引節點
在Linux中,一切皆文件,都是以文件形式進行存儲。
對於文件,它有兩個屬性,一個是自身屬性,又稱文件的元數據,表明這個文件自身的屬性情況,如 文件的創建者是誰,所屬組是哪個,文件的權限是什麼,創建的時間,修改的時間...可以通過stat命令進行文件自身屬性的查詢,具體用法stat file;file是你要查詢的文件。
另一個屬性是寫入文件中的內容,又稱它的數據屬性,該屬性可以通過cat,vim等命令進行數據 查看或者修改。文件的主要作用就是用來存儲數據的,但是如果缺少文件的自身屬性這些信息,那麼文件的查看,修改,移動等操作就會變得極其複雜,同樣也會加重系統資源的消耗,所以文件的元數據也是極其重要的。
Linux中存放着大量的文件,爲了方便對文件進行查詢等操作,創建文件節點號inode是非常有必 要的。inode節點號就相當於文件的"門牌號",當要進行文件讀寫等操作時,就需要先獲取該文件 的"門牌號",然後就可以根據這個"門牌號"直接找到文件所在位置,這些複雜的尋址操作都發生在系統內部,不需要人爲進行參與。
如上圖所示,通過stat命令就可以查看該文件的元數據信息。
從上圖,我們可以對inode表結構有個更清晰的瞭解,表結構中存儲了文件自身屬性相關信息,以 及指向數據塊的指針,通過查看文件系統可以瞭解到每個數據塊具體的大小,就能夠知道,一個索引節點能夠存儲多大的信息,如果直接塊指針就能將文件中的所有數據"安排"到指定的數據塊中,那麼就不需要動用到間接塊指針,如果文件過大,直接塊指針使用完了,但是還有數據沒有存儲到數據塊中,那麼間接塊指針就會啓用,它指向的不是具體的數據塊,而是指向下一個文件塊的指針,再由下一個文件塊的指針指向數據塊,這樣該索引節點的存儲能力就比它實際存儲能力擴大了一倍,三重指針也是這個原理。
一個目錄就是目錄下的文件名和文件inode號的映射。
一般inode表會佔用文件系統磁盤空間的1%。
cp與inode
分配一個空閒的inode號,在inode表中生成新的條目,在目錄中創建一個目錄項,將名稱與inode號關聯,拷貝數據生成新文件。
rm與inode
鏈接數遞減,從而釋放的inode號可以被重用
把數據塊彷彿空閒列表中
刪除目錄項
數據實際上不會馬上被刪除,但當另一個數據使用這個數據塊時將被覆蓋
mv與inode
用新的文件名創建對應新的目錄項
刪除舊目錄條目對應的就得文件名
不影響inode表(除時間戳)或磁盤上的位置,沒有數據被移動
如果目標和源不在一個文件系統上,那麼mv相當於cp+rm
2.軟硬鏈接
2.1 硬鏈接
創建硬鏈接會增加額外的記錄項以引用文件
對應於同一文件系統上一個物理文件
每個目錄引用相同的inode號
創建時鏈接數遞增
刪除文件時:
rm命令遞減計數的鏈接
文件要存在,至少有一個鏈接,當鏈接數爲0時,該文件被刪除,沒有指針指向該文件所在的數據塊,無法被讀取。
不能跨越驅動器或者分區
ln filename [linkname]font
2.2 軟鏈接
一個符號鏈接指向另一個文件
ls -l 顯示鏈接的名稱和引用的文件
一個軟鏈接的內容是它引用文件的名稱
可以對目錄進行
可以跨分區
指向的是另一個文件的路徑,其大小爲指向路徑的字符串長度,不增加或減少目標文件inode引用計數
ln -s filename [linkname]