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


15

最初我以为这是一个巧合,但是现在我看到了甚至还有一个标签:所有隐藏的文件名都以点开头。这是惯例吗?为什么选择它?可以更改吗?或换句话说(如相关问题@evilsoup所暗示的,这暗示着其他答案):我可以隐藏文件而不重命名文件(.用作文件名的第一个字符)吗?


如果愿意,也可以选择“为什么所有隐藏文件名都以点开头?”。
JMCF125

2
是的,这是一个约定,关于为什么选择谁知道呢,请问UNIX先驱者,这是一个古老的约定。
terdon


我以为Linux是完全可定制的...
JMCF125

1
@ JMCF125实际上,该评论比我本来要讽刺得多,对此感到抱歉。您实际上是在问:“我可以不重命名而隐藏文件吗?” -如果是这种情况,则应将其编辑为问题。
evilsoup

Answers:


26

根据维基百科

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

...因此它开始时是一个错误,然后被接受为一项功能(为了记录起见,.它是指向当前目录..的链接,并且是指向其上方目录的链接,但是我敢肯定,您已经知道)。由于这种隐藏文件的方法实际上在大多数情况下已经足够好了,因此我认为没有人会费心去实现Windows风格的文件隐藏。

还有一个事实是,实现不同的行为会对* nix世界产生更大的碎片化,这是任何人都想要的最后一件事。

还有另一种隐藏文件的方法,该方法涉及重命名,但是它仅适用于GUI文件管理器(并且在这些文件管理器中并不通用-主要的Linux文件管理器使用它,但我不认为OSX的Finder可以使用,利基Linux文件管理器越不支持这种行为):您可以创建一个名为的文件.hidden,然后将要隐藏的文件名放在文件中,每行一个。ls和外壳问题不会尊重这一点,但是它可能仍然对您有用。


但是,这种隐藏在Unity上不起作用。但是当您直接回答所有问题时,我会将其标记为可接受的答案(尽管我同时支持两个答案)。
JMCF125

3
Wikipedia页面不再包含有关此信息。但是,罗伯·派克(Rob Pike)在贝尔实验室(Bell Labs)从事UNIX方面的工作,并
亚历山大

OS X ”,而不是“ OSX”。
Peter Mortensen

14

默认情况下,以“。” 开头的文件将命令“ ls” 忽略,该命令具有与“隐藏”文件大致相同的效果,但效果不同(其他命令可能选择是否相同)。以“。”开头的文件不是“隐藏”的,因为“隐藏”不是其属性之一。与DOS / Windows中不同,“隐藏”不是Unix中的属性。Unix中有许多属性(“ man chattr”将告诉您所有属性),但隐藏属性不是其中之一。

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


我确实尝试过man chattr,尽管我想也许我需要一些软件包或特定程序才能使其他隐藏文件成为可能。
JMCF125

0

是否可以隐藏文件以及在什么条件下取决于所使用的文件系统及其驱动程序。传统的Unix文件系统没有文件的“隐藏”属性。

当文件系统驱动程序为用于获取目录列表的系统调用提供结果时,只需省略其名称,即可隐藏所需的任何文件。正如塞尔古特在他的回答中所述,以点开头的文件并未真正隐藏。

(这也是rootkit可以隐藏其文件的方式:它们挂接到产生目录列表的系统调用中,并过滤出要隐藏的文件。)

例如,在Oracle ACFS群集文件系统中,该目录<filesystem mountpoint>/.ACFS/确实是隐藏的:根本不会列出该目录,甚至不会列出该目录ls -a。但是,如果您知道它在那里,就可以访问它。

如果使用ACFS文件系统的快照功能,则可以通过该.ACFS目录访问该文件系统的任何现有文件系统快照。如果没有隐藏,则备份程序可能最终会备份文件系统的当前内容和所有现有快照的内容,这可能是不希望的。通常,您需要备份当前状态或一个特定快照的状态。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.