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