Linux

目錄的八進制轉儲

  • February 5, 2017

我從一次舊貨銷售中得到了 Kernighan 和 Pike 的《Unix 程式環境》的副本。我對有關 UNIX 文件系統的章節非常感興趣。當然,我也覺得這段話很有趣:

是時候查看目錄中的字節了:

$ od -cb .
0000000    4    ;    .   \0   \0   \0   \0   \0   \0   \0   \0   \0   \0   \0   \0   \0
          064  073  056  000  000  000  000  000  000  000  000  000  000  000  000  000
....

真的很長,所以我不會把整件事都寫出來。它的要點是它以儲存在系統上的方式顯示目錄。我迅速沖到我的筆記型電腦(Debian)上嘗試一下。我輸入了書中的命令。

$ od -cb .
od: .: read error: Is a directory
0000000

顯然它不會讓我查看目錄的原始內容。所以這是我的問題。

Linux 核心儲存目錄的方式是否與原始 UNIX 核心不同?如果不是,為什麼需要對使用者隱藏目錄的實際字節?

每種文件系統類型以不同的方式儲存目錄。有許多不同的文件系統類型具有不同的特性——有利於高吞吐量、有利於高並發、有利於記憶體有限的環境、讀寫性能之間、複雜性和穩定性之間的不同折衷等等。你的書描述了早期使用的文件系統Unix系統。現代系統支持許多不同的文件系統。

Unix 的早期版本在核心之外有很多文件系統操作。例如,mkdir通過rmdir直接編輯一些文件系統資料結構來工作。這很快被統一的目錄訪問介面opendir/ readdir/closedir系列所取代,它允許應用程序操作目錄而無需知道它們是如何在後台實現的。

Linux下不能讀取目錄內容的原因不是因為它們必須被隱藏,而是因為特性只有實現了才存在,而這個特性是沒有意義的,而且是有代價的。鑑於格式取決於文件​​系統,這是一個相當無意義的功能:程序無法知道它正在讀取的內容的格式。支持它也不是一個完全微不足道的功能:一些文件系統以不僅僅是字節流的方式組織目錄,例如它可能被組織為B-tree。一些 Unix 變體仍然允許應用程序直接讀取目錄內容,以實現向後兼容性,但 Linux 沒有此功能(據我回憶,從未有過 — 它在 1990 年代初期已經過時)。

引用自:https://unix.stackexchange.com/questions/264669