为什么 Linux 不允许“cat”目录?

为什么 Linux 不允许“cat”目录?

我在《UNIX 操作系统的设计》中读到,目录是包含其所包含的每个文件的名称的文件。所以我尝试cat在我的 Mac 上运行一个,结果出现错误:cat: ./: Is a directory

但后来我在 System 7 UNIX 中测试了它,它起作用了。

cat ./ 在 System 7 UNIX 中

为什么这在现代操作系统中不起作用?目录不再是文件,还是有人决定我们不应该读取它们?

答案1

我相信版本 7 Unix 只支持单个文件系统。现代操作系统(包括 Linux)支持很多很多文件系统。 Linux 内核中有一个“虚拟文件系统”代码层,可以使所有这些不同的文件系统表现得像 Posix 和 Linux 程序所期望的那样。例如。 Linux 可以使用各种 MS-DOS 文件系统和 NTFS,并且这些系统中的文件所拥有的权限并不完全是 Linux 想要的用户/组/其他、读/写/执行。因此,虚拟文件​​系统代码负责协调它们。由于某些文件系统(例如 MS-DOS FAT 文件系统和 ReiserFS)没有将目录视为文件,因此虚拟文件系统代码不会将目录视为带有特殊标记的文件,就像版本 7 UFS 那样。您可以open()对目录执行系统调用,但必须使用getdents()系统调用从目录中读取条目。

答案2

从“UNIX(和 Linux)中的一切都是文件”的意义上来说,它们仍然是文件。该cat程序变得更加聪明,并意识到“这是一种目录类型的文件,因此将其显示为文本文件是没有意义的”,因此出现了更新的行为。

相关内容