JMC*_*125 15 filesystems filenames dot-files
起初我认为这是一个巧合,但现在我看到它甚至有一个标签:所有隐藏的文件名都以点开头。这是公约吗?为什么被选中?可以改变吗?或者换句话说(作为一个相关的问题@evilsoup 建议暗示对一堆其他人的答案):我可以隐藏文件而不重命名它们(.
用作其名称的第一个字符)?
evi*_*oup 27
文件名以 . 应该隐藏是 Unix 早期软件错误的结果。当将特殊
.
和..
目录条目添加到文件系统时,决定 ls 命令不应显示它们。但是,该程序被错误地编写为排除任何名称以.
字符开头的文件,而不是确切的名称.
或..
.
...所以它开始是一个错误,然后它被作为一个特性接受(为了记录,.
是一个指向当前目录..
的链接,是一个指向它上面目录的链接,但我相信你已经知道了)。由于这种隐藏文件的方法在大多数情况下实际上已经足够好了,我想没有人会费心去实现 Windows 风格的文件隐藏。
还有一个事实是,实施不同的行为会给 *nix 世界带来更大的碎片化,这是任何人都不想要的。
还有另一种不涉及重命名文件的隐藏文件的方法,但它仅适用于 GUI 文件管理器(并且在这些文件管理器中并不通用——主要的 Linux 使用它,但我认为 OSX 的 Finder 不会,并且更小众的 Linux 文件管理器不太可能支持这种行为):您可以创建一个名为 的文件.hidden
,并将您想要隐藏的文件名放入其中,每行一个。ls
并且 shell globs 不会尊重这一点,但它仍然可能对您有用。
ser*_*gut 14
默认情况下,以点开头的文件会被命令“ls”忽略,它或多或少与“隐藏”文件的效果相同但不一样(其他命令可能会选择这样做或不这样做)。以点开头的文件不是“隐藏”的,因为“隐藏”不是它们的属性之一。与 DOS/Windows 不同,“隐藏”在 Unix 中不是一个属性。Unix 中有许多属性(“man chattr”会告诉您所有这些属性),但 hidden 不是其中之一。
“ls”忽略点文件的原因实际上很有趣/令人尴尬。这不是设计决定,而是Unix 早期软件错误的结果。当特殊。和 .. 目录条目已添加到文件系统中,因此决定 ls 命令不应显示它们,因为它们妨碍了。但是,该程序被匆忙编写以排除任何名称以 . 字符,而不是确切的名称“。” 或者 ”..”。它开创了一个先例,从那时起在 Unix 中一直沿用。有趣的是,当 Unix 人员继续创建 Plan 9 时,他们并没有故意将点文件放入其中。