Macbook / Linux 目录上的八进制转储

Macbook / Linux 目录上的八进制转储

我正在阅读《Unix 编程环境》。其中对目录的讨论经常使用命令od来获取目录内容的八进制转储。但自 1984 年以来,odMacBook 上的目录使用已被禁用(返回“是目录”)。似乎 Linux 上的目录也已禁用该命令。

我可以使用其他命令吗?

答案1

OS X 内核禁止read(2)对目录进行操作,因此您永远无法使用用户空间工具直接读取目录条目。

如果要从用户空间读取目录条目,则需要直接打开底层块设备,读取其超级块,找到根 inode,读取条目以递归方式查找链中的下一个目录以找到您感兴趣的目录,然后然后您可以读取目录条目。本质上,您将编写一个用户空间文件系统驱动程序来执行此任务。

旧的 Unix 系统有很多巧妙之处,但这绝对是一个尴尬的部分——当时创建目录的唯一方法是通过mkdir(1) 命令,即 setuid-root,因为创建目录必须通过mknod(2)系统调用来完成。因此程序会定期调用它system("mkdir /path/to/foo"); chdir("/path/to/foo");以创建新目录。

答案2

根据http://www.unix.com/unix-advanced-expert-users/35034-using-od-directory.html这是 gnu od 命令的限制,并且在 FreeBSD 版本中也存在“问题”(我认为 Darwin 是基于 FreeBSD 的)。

根据网站所述,它可能与文件系统有关。它还表示,在 Solaris 上使用时,它可以在目录上工作。

基本上,这些说明似乎取决于您使用的 UNIX 版本。我找不到任何已知的解决方法来让其在目录中运行。

相关内容