双点(..)和单点(.)分别代表什么意思?

84
ls -ai 命令显示 ... 的索引节点与当前目录和父目录相同。
那么 ... 到底是什么呢?
它们是真实的文件吗,甚至是硬链接?但据我所知,不允许创建目录的硬链接。

1
三个点在哪里?不小心使用了 mv 命令和 ...,相关目录不见了! - user2023370
2
找到了。它在同一个目录下,命名为...,因此被隐藏了,因为它以点号开头 :) - user2023370
这就是为什么很多命令你可以直接传递 .,例如 git add .,它将会把当前目录(以及其子目录)中的所有内容都添加到暂存区,而 git add .. 则会把父级目录(以及其子目录)中的所有内容都添加到暂存区。 - mfaani
对于在此处重定向的Windows问题,请注意,Windows中的“.”和“..”条目(仅存在于非根目录中)是虚拟的。内核对象管理器、I/O管理器和文件系统驱动程序不实现它们(除了相对符号链接的目标路径)。在规范化路径中,“.”和“..”组件由用户模式运行时库使用基于规则的路径操作解析。如果它们直接传递到verbatim "\?"路径的内核模式中,则文件系统会将它们视为保留名称(NTFS)或失效名称(FAT32)并进行处理。 - Eryk Sun
也许还可以参考“./”和“~/”之间的区别,其中包含了文件系统组织方式的更一般性阐述,以及绝对路径和相对路径之间的区别。 - tripleee
1
@mfaani 嗯,使用Git四年后,我终于明白了git add .中的.是什么意思了,哈哈。 - M.Ed
4个回答

73

.代表当前所在的目录,..代表父目录。

来自于dot definition:

这是一个短字符串(即一系列字符),它被添加到文件或目录的基本名称(即名称的主要部分)的末尾,以指示文件或目录的类型。

在类Unix的操作系统中,每个目录至少包含一个由单个点表示的对象和另一个由两个连续点表示的对象。 前者指代该目录本身,后者指代其父目录(即包含它的目录)。 这些项目在每个目录中自动创建,在使用带有-a选项的ls命令(该选项指示它显示所有内容,包括隐藏项目)时可以看到。


3
它们是将目录硬链接为文件的真实文件吗? - Cubarco
@Cubarco:这些不是硬链接! - user3414693
6
我不知道为什么这个答案会有这么多赞。问题明确要求“..和.到底是什么?”,而不是“它们代表什么”或“它们有什么作用”。 - Gerard Simpson

19

它们是特殊的名称-索引映射,虽然它们不是真正的硬链接(因为目录不能有硬链接),但它们确实算作硬链接(会增加链接计数)。更多信息请点击这里了解:硬链接和Unix文件系统节点(inode)。


8

.代表当前正在使用的目录,而..代表上级目录。

例如:

假设您在目录/etc/mysql中,并且希望移动到上级目录,即/etc/。那么请使用cd..命令:

/etc/mysql> cd ..

如果您想要在当前目录bash文件中设置一个文件路径,请使用.加上文件名的方式,就像这样:./filename


“在当前目录的Bash文件”是什么意思?你能详细说明一下吗? - Peter Mortensen
@PeterMortensen 这意味着,如果您想设置当前目录中文件的路径。 - Deva
@Deva 当你说“设置路径”时,这会执行文件还是将包含该文件的目录的绝对路径添加到PATH环境变量中? - DaCruzR
@DaCruzR,在Bash文件中设置路径是必要的,如果我们需要访问另一个文件,那么就需要设置路径。甚至使用./filename也可以执行该文件。 - Deva

2

它们不是硬链接。您可以将其看作是当前目录(.)和父级目录(..)的简写。

尝试删除或重命名...,然后您就会理解为什么它不是硬链接。


1
在大多数UNIX文件系统中,它们是硬链接,但由于它们内置于文件系统中,因此您无法删除它们。 - yyny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接