Linux系统中"/"与"//"目录存在什么区别?
关于
cd /与cd //路径差异的解答 这既不是别名也不是bug,是符合POSIX标准的设计特性,二者访问的是完全相同的文件系统目录,差异仅存在于路径字符串的处理逻辑层面。
具体规则说明
- 内核层面的路径解析:Linux虚拟文件系统(VFS)会自动合并路径中任意数量的连续斜杠为单个斜杠,因此
/和//指向的是同一个根目录,所有基于这两个路径的文件操作效果完全一致,不存在功能差异。 - 用户态的路径处理规则:POSIX标准明确约定:路径开头的两个连续斜杠可以被实现保留为特殊路径格式,而路径中其他位置的连续斜杠、以及开头三个及以上的连续斜杠必须被合并为单个斜杠。
大部分Linux发行版的shell会遵循该约定,不会合并开头的两个斜杠,因此:- 执行
cd //后,shell记录的逻辑工作路径为//,默认执行pwd时会输出这个逻辑路径 - 从
//进入子目录时,shell会将子目录名拼接在逻辑路径后,因此得到//boot、//home这类输出 - 如果需要查看内核识别的真实物理路径,执行
pwd -P,无论通过cd /还是cd //进入根目录,输出都为/
- 执行
设计背景
开头双斜杠的保留设计最初是为了兼容旧系统的特殊路径格式(比如早期部分系统的网络文件系统挂载路径),目前主流Linux发行版没有使用该特殊定义,因此普通用户感知不到二者的功能差异,仅会看到pwd输出的区别。
内容的提问来源于stack exchange,提问作者IndiGan
相关产品推荐
相关产品推荐

