sudo ls 在 Linux 上不显示隐藏文件

sudo ls 在 Linux 上不显示隐藏文件

今天我发现在 OS X 上sudo ls显示隐藏文件(即那些名称以 开头的文件.)。这让我非常惊讶,以至于我问了一个问题对于这种行为,我仍然觉得有些奇怪和意外。

事实证明,这种行为可以追溯到1979 年获得 2BSD

鉴于此,现在我想问以下问题。为什么 Linux 上没有ls这样的行为?
是否有一段时间ls其他类型的 *nix 也有这种行为?是否有任何文档、提交消息、电子邮件解释谁以及为什么决定根本不应该复制此功能,或者如果最初复制它就应该删除它?

答案1

POSIX 标准规定:

“以 ( '.' ) 开头的文件名和任何相关信息不应被写出,除非明确引用、提供 -A 或 -a 选项,或者实现定义的条件导致它们被写入。”

lsroot 身份显然不被认为是导致隐藏文件被通常打包在 Linux 发行版中的GNU Coreutils 实现写入的条件。

有充分的理由不让程序的行为受到全局变量的影响,例如有效的用户 ID。以非 root 身份开发的脚本在以 root 身份运行时会改变行为。

隐藏以点开头的文件不是一种安全机制;它不应该连接到安全上下文。它隐藏了我们通常不希望看到的内容,例如源文件.git中的目录.c或其他内容。如果您对其他用户的目录具有读取权限,则可以列出他们的隐藏文件。 该点隐藏了预期出现且无趣的项目,而不是其存在旨在保密的项目。

..除和之外的点目录项.没有特殊的操作系统状态;只是ls特殊对待他们。

我刚刚尝试过 Solaris 10;它ls也没有这样的行为。它不是普遍的“Unixism”,这解释了为什么 POSIX 要求是这样表述的。

相关内容