将 Unix 目录内容打印为普通文本文件
Printing Unix directory content as normal text file
我很好奇 unix 系统是如何工作的,现在我对作为文件集合的目录感兴趣,尤其是两个项目的集合,如文件名和 table 的索引(编号)该文件的 i 节点,我想知道是否有任何 hack 可以将目录打印为普通文本文件以查看目录内容...
有什么想法吗?
您可以使用
ls /path/to/directory > file.txt
还有树实用程序可以打印出视觉上更吸引人的目录结构表示。
stat命令可能就是您要找的。
例如
$ stat .
File: ‘.’
Size: 0 Blocks: 40 IO Block: 65536 directory
Device: 177383d6h/393446358d Inode: 562949953432553 Links: 1
Access: (0775/drwxrwxr-x) Uid: ( 18/ SYSTEM) Gid: ( 18/ SYSTEM)
Access: 2015-04-08 16:27:53.211425700 +0100
Modify: 2015-04-08 16:27:53.211425700 +0100
Change: 2015-04-08 16:27:53.211425700 +0100
Birth: 2011-01-15 06:23:35.436641100 +0000
在旧的 *nix 系统上,您可以在目录上调用 VI 并查看目录文件的内容。也许还在。当然,这只会加载带有可识别字符串的二进制乱码,并且不是很有用。
所以是的,目录是二进制的。您可以尝试将目录作为文件打开以读取其内容,但解析它们的最佳解决方案是使用 getdents(这是已经提到的 readdir 的原语,尽管 readdir 会跳过未使用的 inode 和填充字节)。
这是一个非常小的抽象层(例如文件系统类型!),对于 *nix 本机文件系统来说非常接近磁盘上的数据。简单地以可读格式转储记录字段将为您提供一个很好的表示。
某些 EXT*fs 工具可能已经准备好使用此类功能,我建议您研究一下,最值得注意的是 debugfs.
我很好奇 unix 系统是如何工作的,现在我对作为文件集合的目录感兴趣,尤其是两个项目的集合,如文件名和 table 的索引(编号)该文件的 i 节点,我想知道是否有任何 hack 可以将目录打印为普通文本文件以查看目录内容...
有什么想法吗?
您可以使用
ls /path/to/directory > file.txt
还有树实用程序可以打印出视觉上更吸引人的目录结构表示。
stat命令可能就是您要找的。
例如
$ stat .
File: ‘.’
Size: 0 Blocks: 40 IO Block: 65536 directory
Device: 177383d6h/393446358d Inode: 562949953432553 Links: 1
Access: (0775/drwxrwxr-x) Uid: ( 18/ SYSTEM) Gid: ( 18/ SYSTEM)
Access: 2015-04-08 16:27:53.211425700 +0100
Modify: 2015-04-08 16:27:53.211425700 +0100
Change: 2015-04-08 16:27:53.211425700 +0100
Birth: 2011-01-15 06:23:35.436641100 +0000
在旧的 *nix 系统上,您可以在目录上调用 VI 并查看目录文件的内容。也许还在。当然,这只会加载带有可识别字符串的二进制乱码,并且不是很有用。
所以是的,目录是二进制的。您可以尝试将目录作为文件打开以读取其内容,但解析它们的最佳解决方案是使用 getdents(这是已经提到的 readdir 的原语,尽管 readdir 会跳过未使用的 inode 和填充字节)。
这是一个非常小的抽象层(例如文件系统类型!),对于 *nix 本机文件系统来说非常接近磁盘上的数据。简单地以可读格式转储记录字段将为您提供一个很好的表示。
某些 EXT*fs 工具可能已经准备好使用此类功能,我建议您研究一下,最值得注意的是 debugfs.