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

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

我一直在搜索“ .android”文件夹,ls到处都用到了,直到我决定使用locate(在 之后updatedb),发现它一直在我的/home/johndoe/文件夹中。当我ls打开文件夹时,.android文件夹没有列出。有人能解释一下为什么我用我心爱的ls命令没有列出它吗?

答案1

.在典型的类 UNIX 操作系统中,以 开头的文件和文件夹是隐藏文件。

用于ls -a列出所有文件。

答案2

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

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

几乎所有的图形文件管理器也都支持这个前缀;CtrlH在 GNOME 中切换“隐藏”文件。


罗布·派克在 Google+ 上撰写,这是一个偶然的特征:

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

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

这句话比它应该的要短一点,

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

但嘿,这很容易。

由此产生了两件事。

首先,这开创了一个不好的先例。许多其他懒惰的程序员通过进行同样的简化引入了错误。以句点开头的实际文件经常被跳过,而这些文件应该被计算在内。

其次,更糟糕的是,“隐藏”或“点”文件的概念被创造出来。结果,更多懒惰的程序员开始将文件放入每个人的主目录中。我用来输入这些内容的机器上并没有安装那么多东西,但我的主目录中有大约一百个点文件,我甚至不知道其中大多数是什么,也不知道它们是否仍然需要。通过我的主目录进行的每个文件名评估都会因这些累积的污泥而变慢。

答案3

您需要传递“-a”“全部”ls 显示点文件的参数。

相关内容