为什么“ls”不会列出以“.”开头的文件 在Linux中

N8s*_*Bug 2 linux

我一直在寻找一个“ .android”文件夹并ls在各处使用,直到我决定使用locate(在 后updatedb)并发现它一直在我的/home/johndoe/文件夹中。当我ls打开该文件夹时,该.android文件夹未列出。有人可以解释一下为什么这没有用我心爱的ls命令列出来吗?

use*_*686 5

传统上,在 UNIX 和类 UNIX 操作系统中,该.前缀表示隐藏文件,类似于 Windows 中的“隐藏”标志。它可以在任何地方工作,但它的主要用途是隐藏主目录中的配置文件(例如~/.cache/\ ~/.planxe2\x80\x93,它们通常称为“点文件”)。

\n

要强制ls显示隐藏文件,您需要该-a选项。

\n

几乎所有图形文件管理器也都遵循此前缀;CtrlH切换 GNOME 中的“隐藏”文件。

\n
\n

正如 Rob Pike在 Google+ 上写道,这是一个偶然的功能:

\n
\n

很久以前,当 Unix 文件系统的设计正在制定时,条目 . 和..出现,使导航更容易。我不确定,但我相信..在版本2重写期间进入,当时文件系统变得分层(它早期有一个非常不同的结构)。然而,当输入 ls 时,这些文件就会出现,因此 Ken 或 Dennis 向程序添加了一个简单的测试。当时是用汇编程序编写的,但有问题的代码相当于这样:

\n

if (name[0] == \'.\') continue;

\n

该声明比应有的内容短了一点,即

\n

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

\n

但是嘿,这很容易。

\n

结果有两件事。

\n

首先,开了一个不好的先例。许多其他懒惰的程序员通过同样的简化引入了错误。以句点开头的实际文件在应该计数时通常会被跳过。

\n

其次,更糟糕的是,创建了“隐藏”或“点”文件的想法。结果,更多懒惰的程序员开始将文件放入每个人的主目录中。我在用来输入此内容的机器上没有安装那么多东西,但我的主目录有大约一百个点文件,我什至不知道其中大多数是什么,也不知道它们是否\还是需要的。通过我的主目录的每个文件名评估都会因这种积累的污泥而减慢。

\n
\n