在/
目录中并使用ls -a
结果将包含.
和..
我可以理解 的存在,.
它是目录本身的指针。目录..
中有/
而 却没有父目录,这是什么意思/
?
答案1
许多软件都是基于这样的假设,不是事实上 POSIX.1 已经向他们保证了这一点,但传统上 UNIX 系统的情况也是如此,并在许多 UNIX 文献中有所体现,即(引用其中一篇 UNIX 文献):
每个目录都包含文件名点和点点(.
和..
),其 inode 编号分别是目录和其父目录的 inode 编号。[…]该程序初始化文件系统,mkfs
以便根目录具有文件系统的根 inode 编号。.
..
— 莫里斯·J·巴赫(1986 年)。UNIX 操作系统的设计。 普伦蒂斯霍尔 (Prentice Hall),第 73 页
例如:旧的getcwd()
库函数(在没有提供特殊内核支持的系统上)依赖于此来知道何时停止在编写当前目录名称时跟踪条目链..
。当到达其自身父目录或无法遍历到时,它会停止..
。
因此,根目录具有(或至少对于应用程序模式程序而言)出现通过系统 API 可以看到)的..
条目是很多东西都基于以下假设每一个目录有..
,并且..
根目录中的循环可用于检测是否位于根目录中。
POSIX.1 实际上并不保证根目录有..
,只是指定程序必须考虑循环的可能性,如果根目录中有一个..
。这是为了让非 UNIX 系统也能符合 POSIX 标准。有些文件系统缺席表示..
目录是根目录。正如 Bach 自己所讨论的,有些系统中有一个目录多于根,POSIX.1 在讨论以以下项开头的绝对路径名时允许使用二斜线(类似于 Microsoft 局域网系统中使用的通用命名约定)。
然而,Linux(以及 Ubuntu Linux)提供了 UNIX 范式的更严格保证。
答案2
很简单:通过文件目录,./
意味着此文件夹,而../
意味着文件在哪里(例如,当我在目录中时user/home/me/Desktop
,../
将带我到/user/home/me
)。