为什么`.`被`ls`显示?

Ars*_*nko 7 cd-command directory-structure

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

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

Tim*_*edy 16

背后的原因ls -a显示.,并..没有任何与公用事业和一切与UNIX(和Linux)文件系统。

一切都是一个文件。

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

  • 第一个称为.,是对当前工作目录的引用。人们几乎每天都在使用它,当他们通过./scriptname.
  • 第二个调用..是对 CWD 父目录的引用。像.,..每天都被希望通过 将目录更改为父目录的每个人使用cd ..

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

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

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

但是,当您对奇怪的权限问题进行故障排除时,能够有一些选项来查看它们肯定会有所帮助。

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


1. 至少,Ubuntu 手册页getdents()似乎有示例代码。


Gil*_*il' 9

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

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