如何查看unix/linux文件的目录结构信息?

如何查看unix/linux文件的目录结构信息?

在 Unix 文件系统中,目录只是具有特殊目录结构的特殊文件,其中包含子文件名、文件名大小和 inode 引用号。

除此之外的实际文件元数据通常存储在 inode 本身中。

我的问题是。如何以原始形式而不是解释形式读取实际的特殊目录结构。

是的,我知道您可以使用 ls 来查看那里的文件。那不是我要找的。

答案1

简单的答案是,您想要做的是使用 、 或 等命令读取cat .目录cat /etc文件cat mydir。当然,由于这是“原始”数据,因此您需要使用更适合以人性化方式显示非 ASCII 数据的程序;例如,hexdumpod

不幸的是,正如所讨论的目录何时停止作为文件读取?,过去二十年左右发布的大多数 Unix 版本都不允许这样做。所以你的问题的答案可能是“找到一个仍然允许读取目录的 Unix 版本”。 AIX、大多数版本的 BSD 以及除最新版本之外的所有 Solaris 都可能符合资格。找到一个允许它的 Linux 可能需要使用时间机器。

答案2

该结构完全取决于所使用的特定文件系统,读取它的唯一方法是直接从磁盘读取(即 /dev/sda1 ),并自己解释文件系统。

答案3

我知道这是一个老问题,但我正在寻找有关目录结构的信息并发现了这个。

要获取目录文件中的原始数据,您可以使用debugfs.例如:

sudo debugfs /dev/sda1

您可以照常使用lscd、 等,或者cat目录。这不是很可读,所以你可以使用:

dump / dumproot

dumproot这将在您调用的位置创建一个名为debugfs.要获取它的原始内容,您可以使用xxd.例如:

xxd dumproot | head -n2

00000000: 0200 0000 0c00 0102 2e00 0000 0200 0000  ................
00000010: 0c00 0202 2e2e 0000 0b00 0000 1400 0a02  ................

这显示了我的目录的.和条目,它们的索引节点号都是 2,即开头的 02000000。对于较大的索引节点编号,您可以在小尾数法的条目开头看到它们。 是十六进制 2e,所以在那里也可见。我不太确定“0c00 0102”代表什么,或者如何指定条目的结尾。当我发现这个线程时,这就是我正在寻找的东西。../.

答案4

文件系统为 inode 提供的几乎所有信息都可以通过统计数据命令。这可以看作是文件和目录的索引节点的原始信息。

stat FILE

可以找到很多关于Linux中inode的信息这里

如果您想检查文件系统的一般创建过程,请尝试以下操作:

  • 创建一个约100kB的空文件
  • 使用所需的文件系统格式化文件
  • 备份这个原始文件
  • 安装为循环设备
  • 创建一些目录和文件
  • 使用 hexdiff 或 hexeditor 分析你的 coice 的变化

作为 root 执行以下操作:

mkdir mountpoint
dd if=/dev/zero of=file_s.img bs=50k count=2
mkfs.ext2 file_s.img
cp file_s.img file_s_orig.img
mount -o loop file_s.img  mountpoint
bless file_s.img

相关内容