读完问题后当你输入“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
报告当前目录及其父目录以及目录中文件的权限和所有权。