使用 OS X Yosemite,使用以下命令,我得到以下信息:
$ touch .a
$ touch b
$ /bin/ls
b
$ /bin/ls -A
.a b
$ sudo /bin/ls
.a b
Run Code Online (Sandbox Code Playgroud)
它在被 root 调用时显示隐藏文件(名称以点开头),而在以普通用户身份运行时不显示它们(如预期)。这与lsLinux(来自coreutils)上的不同。
为什么会ls这样?
kir*_*gin 404
事实证明,此功能不是 Apple 特有的。这通常是 BSD 系统的一个特性。
/* Root is -A automatically. */
if (!getuid())
f_listdot = 1;
Run Code Online (Sandbox Code Playgroud)
最初,我能够将其追溯到4.4BSD-Lite的来源。它已经存在于1994 年的FreeBSD 提交中,它正在导入这些源。
该功能也存在于 OpenBSD 中,可以在1995 年的提交中找到,声称从 NetBSD 导入代码,所以这已经存在于NetBSD 中。
然后发现 1993 年的 NetBSD 提交声称从386BSD导入代码,并且该功能已经存在。此外,这个提交表明它在 1991 年 386BSD 0.0 版的开发过程中存在,据我所知,该版本从 BSD 4.3 左右分叉出来。
该评论在4.3BSD-Reno的开发过程中第一次出现在这个名为“新 ls 的第一个工作版本”的提交(1989 年 6 月 27 日)中。原评论说:
/* root sees all files automatically */
Run Code Online (Sandbox Code Playgroud)
当天晚些时候将其更改为(不过,我不确定此存储库中的时间戳是否完全正确):
/* root is -A automatically */
Run Code Online (Sandbox Code Playgroud)
仅在 1992 年才添加了大写字母和句号,将评论变成了我们现在所拥有的:
/* Root is -A automatically. */
Run Code Online (Sandbox Code Playgroud)
但是该行为在 1979 年 5 月 9 日出现在 2BSD 中,如下面的快照所示:
Aflg = getuid() == 0;
Run Code Online (Sandbox Code Playgroud)
我找不到那个时代的任何实际历史,但也有1977 年 1BSD 的快照,没有这些行。而且-A实际上没有国旗。
因此,该功能似乎是在 1977 年 11 月(当时正在开发 1BSD)和 1979 年 5 月发布 2BSD 之间的某个时间引入的。
我在这次调查中还发现了 2005 年添加到 FreeBSD 以覆盖此行为的-I标志,并在稍后重新设计。
| 归档时间: |
|
| 查看次数: |
7548 次 |
| 最近记录: |