目录文件包含哪些类型的信息?

目录文件包含哪些类型的信息?

我听说 Linux 中的所有内容(包括目录)都是文件。所以我尝试访问目录文件,但是当我尝试读取它时cat出现错误cat: xp: Is a directory。使用lessmorehead和给出了类似的结果tailnl而使用 Vim 则让我进入了某种导航菜单。

所以,既然我似乎无法找到自己,我就来到这里寻找答案。

所以...目录文件包含哪些类型的信息?

我假设答案包括某种指向该目录中文件的 inode 的链接,但它还包含哪些其他类型的信息?

还有一种方法可以访问该文件并可能对其进行编辑吗?

答案1

目录是文件,因为它们通常具有索引节点结构,并且像为任何其他文件一样保留数据块。

目录必须包含一些包含文件名和相应索引节点号的数据结构。该结构可能是一个简单的列表,或者某种树,这是一个实现细节。在某些文件系统上,一些 inode 数据(例如不变的文件类型)也会在目录中复制,以便更快地访问。 (当然,如果 FS 是 VFAT,那么目录项几乎也是 inode。)

Linux 不允许使用 读取目录的内容read(),可能是因为原始数据对于用户空间来说是无用的,因为它在不同的文件系统上会有所不同,并且用户空间程序需要了解所有文件系统的内部结构才能利用它。或者,内核需要让每个文件系统呈现一个兼容的目录视图,但这就是getdents()/readdir()调用的目的。

其他一些 Unixen 可能允许读取目录内容,例如至少旧版本的 FreeBSD 允许这样做。但即使在这些上,您可能也应该使用readdir().

大多数实用程序只是尝试像读取常规文件一样读取目录,从而导致该错误,但像 Vim 这样的智能编辑器以及可能的less某些脚本使用目录系统调用来代替并为您生成文本列表。

您可以使用特殊工具(例如debugfsext2/ext3/ext4)进行一些目录编辑。但我认为即使它也不允许对原始数据进行任意编辑,这听起来像是访问目录时出错或文件系统驱动程序崩溃的秘诀。

相关内容