当我使用 nautilus 浏览目录时(这个目录中的具体示例是 /media 文件夹)我什么也看不到,但是当我ls -a
在终端中输入时它显示:
.
..
穿蓝色衣服。我知道蓝色突出显示是目录,.
并且..
可以象征父目录和工作目录,但为什么它们在/media
文件夹中?
当我使用 nautilus 浏览目录时(这个目录中的具体示例是 /media 文件夹)我什么也看不到,但是当我ls -a
在终端中输入时它显示:
.
..
穿蓝色衣服。我知道蓝色突出显示是目录,.
并且..
可以象征父目录和工作目录,但为什么它们在/media
文件夹中?
如果 Nautilus 什么都不显示,
ls -a
只显示.
and..
,则该目录中没有任何内容。Directory
.
表示当前目录,它是一种使用相对路径引用文件和目录的方式。例如./subdir1/subdir2/somefile
当你发出命令
ls
时,在引擎盖下这被翻译成ls .
也一样
..
,是引用父目录的一种方式。例如../../etc/cron.d
。这两个条目是您机器上文件系统不可或缺的一部分,并且存在于内核的低级目录列表函数返回的列表中。
正如其他人所说,
..
是指向父目录.
的链接,并且是指向当前目录的链接。某些前端(例如 nautilus)隐藏了这两个条目,因为它们在图形环境中并不真正相关,但它们仍然存在。
它们为什么存在?
这些是为了方便起见的快捷方式。它们在您的整个文件系统中实施,以确保无论您使用哪个应用程序,它们都能正常工作——它们不依赖于个别应用程序的支持。它们将在允许目录路径的任何地方工作,包括配置文件。
该快捷方式允许您使用、其祖父级 using等
..
来引用目录的父级。directory/..
directory/../..
如果应用程序要求您指定要在其中搜索的一个(或多个)目录,并且您想在当前目录中搜索,则该
.
快捷方式允许您明确引用当前目录。例如,
.
可以添加到PATH
环境变量中,默认情况下允许在当前目录中搜索匹配的可执行文件。或者,如果它不存在于 中PATH
,您可以使用./myscript
在当前目录中运行脚本,即使PATH
环境变量不会以其他方式在当前目录中查找可执行文件。它们是如何实施的
在大多数传统文件系统中,
.
和..
条目在磁盘上作为目录条目实现,目录条目与它们指向的目录共享一个索引节点——也就是说,它们就像到当前目录和父目录的硬链接,除了它们不能被删除或修改.在操作系统内核的帮助下,该
..
条目甚至可以跨挂载点工作,确保挂载点的根目录将有一个..
条目实现为挂载所在的父目录的链接。无论文件系统类型如何,都会发生这种情况 - 即使在像/proc
..
并且..
是保留的文件名 - 不可能创建一个实际的文件或目录并将其命名为.
or..
(尽管您可以使用这些字符作为文件名的开头)。存在的原因和
.
用途..
.
并且..
是通常存在于每个目录中的条目。它们的含义与进程(如 shell)的工作目录无关,而是与条目所在的目录相关。..
提供目录树结构的双向链接,而.
是引用目录本身的方便名称。路径directory/.
与directory
. 从理论上讲,可以选择一个空字符串来引用目录本身,但实际上它不是这样的:ls ''
不起作用并且空字符串的含义会不明确,因为在 a 路径的开头它引用根目录already:/file1
是指file1
在根目录中还是file1
在当前工作目录中?正如 thomasrutter 所展示的,重要的是您可以在路径中使用
.
和作为普通目录条目。..
例如./-filename
,可用于避免将破折号字符解释为-
命令行选项的介绍。有效路径directory1/../directory2
与./directory2
which 相同 与 相同directory2
。为什么是
.
和..
隐藏?开头的文件(和目录)名称按照
.
惯例隐藏在类 Unix 系统中,因此默认情况下大多数工具不会显示.
和..
目录。这很有用,因为我们已经知道.
和..
通常存在于每个目录中。该命令
ls -a
显示所有目录条目。在 Nautilus Ctrl+H中打开隐藏条目的显示,但有例外,.
因为..
它们在图形文件管理器中通常不是很有用。对于命令行上的类似行为,您可以使用ls -A
..
和..
真实的目录条目?是的,在常用的文件系统中它们是。(正如 Jonathan Leffler 提醒的那样)我们如何检查?
引用目录/文件本身的数据结构的 inode 编号(第 1 列)对于同一目录
testdir1
和testdir1/.
. 链接计数(第 3 列)显示引用 inode(目录/文件)的目录条目数在创建目录后立即为 2,因为有testdir1
in/tmp
和.
in/tmp/testdir1
。/tmp/testdir1/..
( )的索引节点/tmp
有 14 个链接,因为它有 12 个子目录,包含..
+ 每个目录的 2 个条目。该实用程序
debugfs
直接从磁盘扇区读取 ext2(和更新版本)文件系统数据(绕过 Linux 内核中的文件系统)。如果您不相信目录列表,
debugfs
您可以检查目录的原始转储并检查.
和..
条目是否真的存在。简短回答:
.
指的是您当前的目录,..
指的是它上面的目录,也就是父目录。/media
用于在驱动器上安装 USB 和分区等内容。除非您明确连接了 USB 或自己在其中安装了一些东西,否则该目录将保持为空。.
是当前目录,..
是父目录。以下面的目录层次结构为例:foo/.
并且foo/bar/..
是foo
。