Symlink
符號連結的大小
當然,符號連結確實需要空間,但只是儲存名稱和目標以及用於其他元數據的幾個字節的空間
我的問題是,我們能否確定一個符號連結佔用了多少字節?
$ touch alfa.txt $ ln -s alfa.txt bravo.txt
du 和 ls 都報告 8,即“alfa.txt”:
$ du -b bravo.txt 8 bravo.txt $ ls -l bravo.txt lrwxrwxrwx 1 Steven None 8 Mar 8 18:17 bravo.txt -> alfa.txt
是否有一些命令可以列印符號連結的真實大小,其中包含“其他元數據的幾個字節”?
有點,但請注意,文件的大小在該精度級別上沒有明確定義。
符號連結涉及四個部分:
- 連結的名稱,儲存在作為條目的目錄中。
- 每個目錄條目都存在的其他元數據,用於定位其餘的元數據。這通常是 inode 的位置。此外,每個目錄條目會花費更多字節,例如填充文件名和維護平衡樹或散列等資料結構。
- 符號連結本身的其他元數據,例如時間戳。此元數據也存在於其他文件類型(例如空的正常文件)。
- 連結的目標。
如果文件系統允許符號連結有多個硬連結,則前兩部分是每個目錄條目,後兩部分每個符號連結只出現一次。
在 ext2/ext3/ext4中,如果符號連結的目標最長為 60 個字節,則它會儲存在 inode 中。您可以通過詢問來確認
du
:對於目標小於等於 60 字節的符號連結,它報告 0,對於更大的目標,它報告一個塊。就像正常文件一樣,由 報告的數字
du
不包括目錄條目和 inode 的儲存。如果您想確切知道符號連結佔用了多少空間,您還必須計算這些空間。大多數經典文件系統在文件系統創建時分配 inode,因此成本是分攤的:目錄條目的大小與數據塊的數量相關,inode 與 inode 池的大小相關。對於目錄條目本身的大小,條目佔用的確切字節數可能取決於目錄中存在哪些其他條目。但是,一個目錄通常會佔用整數個塊,因此如果您創建越來越多的條目,目錄的大小將保持不變,直到條目不再適合一個塊並分配第二個塊,依此類推。要準確查看目錄條目是如何儲存在塊中的,您需要一個文件系統調試器和對文件系統格式的通俗理解,或者對文件系統格式的良好理解以及對存在哪些其他條目的了解在目錄中,可能還有它們的創建順序和刪除其他條目的順序。
總之,“其他元數據的幾個字節”是:
- 目錄條目,大小可變。創建符號連結可能沒有區別,也可能添加一個塊。
- 索引節點。
除此之外,目標可能佔據從 0 到 1 個塊的任何位置。