Linux中的双点(..)和单点(.)是啥?
Posted
技术标签:
【中文标题】Linux中的双点(..)和单点(.)是啥?【英文标题】:What is double dot(..) and single dot(.) in Linux?Linux中的双点(..)和单点(.)是什么? 【发布时间】:2014-06-08 03:37:08 【问题描述】:ls -ai
命令显示.
和..
的inode 分别与当前目录和父目录相同。
.
和 ..
到底是什么?
它们是真实文件还是硬链接?但据我所知,不允许创建指向目录的硬链接。
【问题讨论】:
三点在哪里!?不小心被mv
和...
一起使用了,相关目录就不见了!
找到了。它在同一个目录中,名为...
,因此被隐藏,因为它以点开头:)
这就是为什么很多命令你可以通过.
例如git add .
,将暂存当前目录(及其子目录)中的所有内容,而 git add ..
将暂存父目录(及其子目录)中的所有内容
对于在此处重定向的 Windows 问题,请注意“.”和“..”条目(仅存在于非根目录中)在 Windows 中是虚拟的。内核对象管理器、I/O 管理器和文件系统驱动程序不实现它们(除了在相对符号链接的目标路径中)。在规范化路径中,“.”和“..”组件由用户模式运行时库使用基于规则的路径操作解析。如果它们在逐字“\\?\”路径中直接传递给内核模式,文件系统会按字面意思处理它们,无论是作为保留名称 (NTFS) 还是作为功能失调的名称 (FAT32)。
【参考方案1】:
.
表示您正在使用的当前目录,并且
..
代表父目录。
例子:
假设您在目录/etc/mysql
中,并且您想移动到父目录,即/etc/
。然后使用cd..
:
/etc/mysql> cd ..
如果你想设置当前目录bash文件中的一个文件的路径,使用.
,文件名如下:./filename
【讨论】:
你说的“在当前目录bash文件中”是什么意思?你能详细说明一下吗? @PeterMortensen 这意味着,如果你想设置当前目录中的文件的路径。 @Deva 当您说“设置路径”时,会执行文件还是将包含文件的目录的绝对路径添加到 PATH 环境变量中? @DaCruzR,在 bash 文件中说设置路径,如果我们需要访问另一个文件,那么我们正在设置路径。甚至 ./filename 也用于执行文件。【参考方案2】:它们不是硬链接。您可以将其更多地视为此目录 (.) 和此目录的父目录 (..) 的简写。
尝试删除或重命名.
或..
。然后你就明白为什么它不是硬链接了。
【讨论】:
在大多数 UNIX 文件系统中,它们是硬链接,但是,由于它们内置在文件系统中,因此您无法删除它们。【参考方案3】:它们是特殊的 name-inode 映射,虽然它们不是真正的硬链接,但它们确实算作硬链接(它们确实增加了链接数),因为正如你所说,目录不能有硬链接.在这里阅读更多:Hard links and Unix file system nodes (inodes)
【讨论】:
【参考方案4】:.
代表你所在的目录,..
代表父目录。
来自dot definition:
这是一个短字符串(即字符序列),添加到 文件的基本名称(即名称的主要部分)的结尾 或目录以指示文件或目录的类型。
在类 Unix 操作系统上,每个目录至少包含 一个对象用一个点表示,另一个用两个点表示 连续的点。 前者是指目录本身和 后者指的是其父目录(即, 包含它)。这些项目是自动创建在每个 目录,可以通过使用带有 -a 选项的 ls 命令看到 (指示它显示其所有内容,包括隐藏的 项目)。
【讨论】:
它们是作为目录硬链接的真实文件吗? @Cubarco:- 这些不是硬链接! 我不知道为什么这个答案有这么多的赞成票。这些问题专门询问“究竟. 和.. 是什么?”不是“他们代表什么”或“他们做了什么”以上是关于Linux中的双点(..)和单点(.)是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Git diff 提交范围中的双点“..”和三点“...”有啥区别? [复制]