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


1

我一直在搜索“ .android”文件夹并ls在各处使用,直到我决定使用locate(在之后updatedb)并发现它一直在我的/home/johndoe/文件夹中。当我ls在文件夹上时,该.android文件夹未列出。有人可以解释一下为什么我不喜欢用我的ls命令将其列出吗?

Answers:


2

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

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


3

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

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

几乎所有的图形文件管理器也都使用该前缀。CtrlH在GNOME中切换“隐藏”文件。


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

很久以前,随着Unix文件系统的设计工作的日渐深入,条目开始了。和..出现,使导航更容易。我不确定,但我相信..是在版本2重写期间加入的,当时文件系统已变为分层结构(早期的结构非常不同)。但是,当键入ls时,这些文件就会出现,因此Ken或Dennis都向程序添加了一个简单的测试。当时是在汇编程序中,但是有问题的代码等效于以下内容:

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

该语句比应有的语句短一些,即

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

但是,这很容易。

结果有两件事。

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

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


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.