为什么隐藏以点开头的文件名?我可以在不使用点作为第一个字符的情况下隐藏文件吗?

JMC*_*125 15 filesystems filenames dot-files

起初我认为这是一个巧合,但现在我看到它甚至有一个标签:所有隐藏的文件名都以点开头。这是公约吗?为什么被选中?可以改变吗?或者换句话说(作为一个相关的问题@evilsoup 建议暗示对一堆其他人的答案):我可以隐藏文件而不重命名它们(.用作其名称的第一个字符)?

evi*_*oup 27

根据维基百科

文件名以 . 应该隐藏是 Unix 早期软件错误的结果。当将特殊...目录条目添加到文件系统时,决定 ls 命令不应显示它们。但是,该程序被错误地编写为排除任何名称以.字符开头的文件,而不是确切的名称....

...所以它开始是一个错误,然后它被作为一个特性接受(为了记录,.是一个指向当前目录..的链接,是一个指向它上面目录的链接,但我相信你已经知道了)。由于这种隐藏文件的方法在大多数情况下实际上已经足够好了,我想没有人会费心去实现 Windows 风格的文件隐藏。

还有一个事实是,实施不同的行为会给 *nix 世界带来更大的碎片化,这是任何人都不想要的。

还有另一种涉及重命名文件的隐藏文件的方法,但它仅适用于 GUI 文件管理器(并且在这些文件管理器中并不通用——主要的 Linux 使用它,但我认为 OSX 的 Finder 不会,并且更小众的 Linux 文件管理器不太可能支持这种行为):您可以创建一个名为 的文件.hidden,并将您想要隐藏的文件名放入其中,每行一个。ls并且 shell globs 不会尊重这一点,但它仍然可能对您有用。

  • 维基百科页面不再包含这方面的信息。然而,Rob Pike 在贝尔实验室从事 UNIX 工作,并就该主题发表了一篇简短的文章:https://plus.google.com/u/0/+RobPikeTheHuman/posts/R58WgWwN9jp (3认同)

ser*_*gut 14

默认情况下,以点开头的文件会命令“ls”忽略,它或多或少与“隐藏”文件的效果相同但不一样(其他命令可能会选择这样做或不这样做)。以点开头的文件不是“隐藏”的,因为“隐藏”不是它们的属性之一。与 DOS/Windows 不同,“隐藏”在 Unix 中不是一个属性。Unix 中有许多属性(“man chattr”会告诉您所有这些属性),但 hidden 不是其中之一。

“ls”忽略点文件的原因实际上很有趣/令人尴尬。这不是设计决定,而是Unix 早期软件错误的结果。当特殊。和 .. 目录条目已添加到文件系统中,因此决定 ls 命令不应显示它们,因为它们妨碍了。但是,该程序被匆忙编写以排除任何名称以 . 字符,而不是确切的名称“。” 或者 ”..”。它开创了一个先例,从那时起在 Unix 中一直沿用。有趣的是,当 Unix 人员继续创建 Plan 9 时,他们并没有故意将点文件放入其中