有没有理由“。”执行 ls -a 后出现“..”?

有没有理由“。”执行 ls -a 后出现“..”?

如果我跑ls -a

user@users-MacBook-Pro:~$ ls -a
.           ..

我得到...(当前目录和父目录?)

他们出现之后有什么原因ls -a他们做了什么有趣的事吗?

答案1

因为-a意味着显示所有文件。与 结合使用时很有用-l。至于为什么在不使用时显示那些无用的文件-l,是因为一致性,并且因为 Unix 不会尝试双重猜测什么对你有好处。

有一个选项-A(至少对于 GNU 而言ls)可以排除这两个(..、 和.)。

有趣的是,Unix 中隐藏文件的想法源于ls它试图隐藏这两个文件的一个错误。为了使代码简单,原始实现仅检查第一个字符。人们用它来隐藏文件,然后它成为一个功能,并-a添加了显示隐藏文件的选项。后来有人想知道,和你一样,为什么 ...被显示出来,我们知道它们在那里。这个-A选项诞生了。

注意:Unix 中的文件含义比您想象的要宽松得多。
FILE bas {普通文件、目录、命名管道、unix 套接字、符号链接、设备}。

答案2

他们出现在那里有什么意义吗?

它们显示所有权和权限。当您有两个用户并且其中一个用户说他们无法看到他们期望的其他人的文件时,这通常是最重要的检查事项。

答案3

如图所示https://ss64.com/bash/ls.html 当您添加-a参数时,ls
您将获得所有条目,甚至是那些以.;开头的条目。它们被认为是隐藏条目,并且不以简单的ls.

答案4

他们出现之后有什么原因吗ls -a

我敢打赌这只是一个历史意外,就像很多事情一样。


根据一个故事由 Rob Pike 撰写,“隐藏”文件(点文件)是由一次意外创建的:

很久以前,当 Unix 文件系统的设计正在制定时,条目...就出现了,以使导航更容易。我不确定,但我相信..在版本 2 重写期间,当文件系统变得分层时(它早期有一个非常不同的结构)。然而,当输入 时ls,这些文件就会出现,因此 Ken 或 Dennis 向程序添加了一个简单的测试。当时是用汇编程序编写的,但有问题的代码相当于这样:

if (name[0] == '.') continue;

该声明比应有的内容短了一点,即

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

但是嘿,这很容易。

结果有两件事。

[...]其次,更糟糕的是,创建了“隐藏”或“点”文件的想法。结果,更多懒惰的程序员开始将文件放入每个人的主目录中。

ls -a基于此,猜测随后添加的内容是为了显示那些懒惰的程序员创建的点文件似乎并不牵强。简单的实现就是依次禁用上述测试,从而再次产生...显示。

无论历史如何,显示它们都是在标准现在:

-a
写出所有目录条目,包括名称以 <句点> ( '.' ) 开头的条目。

但还需ls -A要做一些稍微理智的事情。我不知道那个更新了多少:

-A
写出所有目录条目,包括名称以 <句点> ( '.' ) 开头的条目,但不包括点和点-点条目(如果存在)。


他们做了什么有趣的事吗?

用普通的方式列出它们ls并不是很有趣。

但是寻找eg .in/path/subdir给出的inode 与寻找subdirin 的inode 相同/path。目录的所有权和权限控制谁可以访问其中的文件,因此也可以通过 获得信息.。但是,如果需要目录本身的属性,人们总是可以ls -ld .这样做。ls -ld /path/subdir

相关内容