今天我发现在 OS X 上sudo ls
显示隐藏文件(即那些名称以 开头的文件.
)。这让我非常惊讶,以至于我问了一个问题对于这种行为,我仍然觉得有些奇怪和意外。
事实证明,这种行为可以追溯到1979 年获得 2BSD。
鉴于此,现在我想问以下问题。为什么 Linux 上没有ls
这样的行为?
是否有一段时间ls
其他类型的 *nix 也有这种行为?是否有任何文档、提交消息、电子邮件解释谁以及为什么决定根本不应该复制此功能,或者如果最初复制它就应该删除它?
答案1
POSIX 标准规定:
“以 ( '.' ) 开头的文件名和任何相关信息不应被写出,除非明确引用、提供 -A 或 -a 选项,或者实现定义的条件导致它们被写入。”
ls
root 身份显然不被认为是导致隐藏文件被通常打包在 Linux 发行版中的GNU Coreutils 实现写入的条件。
有充分的理由不让程序的行为受到全局变量的影响,例如有效的用户 ID。以非 root 身份开发的脚本在以 root 身份运行时会改变行为。
隐藏以点开头的文件不是一种安全机制;它不应该连接到安全上下文。它隐藏了我们通常不希望看到的内容,例如源文件.git
中的目录.c
或其他内容。如果您对其他用户的目录具有读取权限,则可以列出他们的隐藏文件。 该点隐藏了预期出现且无趣的项目,而不是其存在旨在保密的项目。
..
除和之外的点目录项.
没有特殊的操作系统状态;只是ls
特殊对待他们。
我刚刚尝试过 Solaris 10;它ls
也没有这样的行为。它不是普遍的“Unixism”,这解释了为什么 POSIX 要求是这样表述的。