如何对我的目录中的文件进行八进制转储?

如何对我的目录中的文件进行八进制转储?

我正在读Unix 编程环境书。我遇到了这个od命令。当我运行它时,该命令适用于文件内容,但不适用于目录。但是,根据本书作者的演示,该命令似乎适用于目录。

当我运行以下命令时:

od -c .

我收到一条错误消息:

od: .: read error: Is a directory
0000000

为什么我会收到这个错误?

答案1

为什么od -c directory不起作用

目录指向零个、一个或一组文件,它本身并不是真正的文件,因此无法通过od或进行处理hd。大多数类 Unix 程序处理文件,而不是整个目录。

该怎么办

您可以使用 列出目录内容ls,然后使用od -chd -b命令转储要检查的每个文件。通过逐个执行这些操作,您将知道每个文件包含的内容。

od -c file1 file2将文件 1 和文件 2 塞在一起,然后转储整个内容。这使得它能够找到第一个文件结束的位置和下一个文件开始的位置。)

您还可以编写一个小脚本,逐个提供目录中每个文件的文件名,然后将其转储为八进制或十六进制。以下是示例:

 for f in *; do echo $f; od -c $f; done | less

for f in *依次将当前目录下的每个文件分配给 $f;在echo $f每次文件转储之前在终端上提供文件的名称;od -c $f生成转储;并done表示继续下一个文件,如果没有更多文件则完成。|less表示采取以上所有内容并通过“less”程序发送输出,让您一点一点地查看它,而不是让所有内容从屏幕顶部滚落。

此类脚本由名为“shell”的程序解释。当您在终端中输入命令时,您正在与“shell”对话。默认情况下,Ubuntu 使用“bash”shell。

如果您希望查看十六进制输出,则可以使用od -t x1 filenamehd filename。使用man odman hd获取更多选项。

答案2

  • 如果要对当前目录及以下的所有文件进行八进制转储,请使用find,例如:

    od -c `查找-类型 f`

请参阅man find或谷歌查看教程寻找了解更多信息。

答案3

为了能够将目录读取为文件,如书中所示Unix 编程环境(第 51 页)在较新版本的 Linux 中是不可能的。

正如这个答案中提到的(目录什么时候不再能作为文件被读取?) 在 Unix 和 Linux 子站点上,这似乎违反了 POSIX 标准,该标准允许将目录作为文件读取,只要它们以只读模式打开即可。

相关内容:如何检查unix / linux文件的目录结构信息?

答案4

od [options] [files] od --traditional [file] [[+] offset [[+] label] ]

将指定的文件转储到标准输出。默认以八进制格式转储,但可以指定其他格式。如果有多个文件,则按指定顺序连接它们。如果未指定文件或文件为 -,则从标准输入读取。对于第二种形式,使用 --traditional 选项,只能指定一个文件。1

阅读更多

1来源:Linux 命令目录

相关内容