为什么“ls”显示“.”?

为什么“ls”显示“.”?

读完问题后当你输入“ls -a”时,“.”的含义是什么?和 ”..”?,我有一个类似的。

为什么要显示.?我的意思是,是否有任何目录cd .不起作用?每次都看到这一行对用户有什么帮助?

答案1

ls -a显示的原因...实用程序无关,与 Unix(和 Linux)文件系统有关。

一切都是文件。

目录实际上是包含文件列表的文件。任何给定目录的“内部”,因为这是用户的视角,如果不完全是文件系统的视角,则有两个特殊文件。

  • 第一个称为.,是对当前工作目录的引用。人们几乎每天都会使用它,当他们通过 . 在当前目录中运行命令时./scriptname
  • 第二个称为..对 CWD 父目录的引用。就像 一样...每个希望通过 更改目录到父目录的人每天都会使用cd ..

系统调用getdents()是 系统端的主力ls,它简单地枚举目录中的所有文件。 (记住:一切都是文件。设备、目录、套接字等,所以它们都会显示出来)

从实用性方面来看,该ls命令的作者提供了许多选项和选项组合,使我们能够过滤掉某些信息或类型的信息,例如@Gilles 上面评论的ls -A将显示所有信息点文件,但.和除外..。所有这些选项都可以被视为后处理选项。它们影响显示的内容ls,而不影响发现的内容ls

默认情况下,确实没有理由明确列出...,因为我们都知道它们在那里、它们的用途以及何时使用它们。

当您解决奇怪的权限问题时,能够有一些选项来查看它们肯定会很有帮助。

查看联机帮助页getdents()1.它详细解释了它的工作原理,并包含可以使用 进行编译的示例程序的源代码gcc -Wall,其中列出了目录中的所有文件。


1. 至少,Ubuntu 的联机帮助页getdents()似乎有示例代码。

答案2

ls通常不显示...。默认ls隐藏所有名称以 a 开头的文件.(点文件)ls -a显示它们是因为您要求显示所有内容。某些版本的ls选项略有不同,ls -A,显示所有点文件,但不显示...

.如果您列出的不仅仅是姓名,那么显示会很有用;例如,ls -la报告当前目录及其父目录以及目录中文件的权限和所有权。

相关内容