我在我的 Mac 电脑的主目录中:
$ pwd
/Users/lukas
当我cd
四处走动时,我不会(也不能)以以下内容开始路径/
:
$ cd Documents/
/Users/lukas/Documents
$ cd /Documents
-bash: cd: /Documents: No such file or directory
除非我在/
:
$ pwd
/
$ cd Users
/Users
$ cd /Users
/Users
为什么从到时可以/
在路径前面使用,但在任何后续级别中却不能使用?这是 macOS 特有的还是这是标准的 Unix 行为?/
/Users
答案1
这是标准的 Unix 行为。
路径开头/
的 表示磁盘的根目录(或文件系统树的起始/最上层)。由于Documents
不在根目录下,/Documents
因此无法找到。
/Users
不在根目录下,所以不会发生这个问题。
您可以使用cd /Users/lukas/Documents
来改变该路径。
或者,您可以使用相对寻址。基于 Unix 的文件系统有 2 个特殊目录:
.
意思是“这个目录”,..
意思是父目录。
如果您在/Users/lukas
,cd ./Documents
将带您到正确的地方。
假设您在/Users/Lukas/Documents
并且想要前往/Users/Janes/Documents
,您可以发出一个命令cd ../../Janes/Documents
- 使用..
会带您返回一个级别 - 因此您需要执行两次,然后才能进入新的相对路径。
答案2
/Users/lukas
是“绝对”路径。前导/
表示文件系统的根目录。
lukas
是“相对”路径。由于它不锚定到根,因此意味着“在当前的目录”。除非当前目录是/Users
(或其中包含的其他目录lukas
),否则这将失败。
那么,让我们来探讨一下您的示例,假设您在/Users/lukas
:
$ cd Documents/
/Users/lukas/Documents
给定相对路径 => 更改为其中的目录“Documents” /Users/lukas
。
$ cd /Documents
-bash: cd: /Documents: No such file or directory
给出绝对路径 => 改变到目录/Documents
。
$ pwd
/
这表明您现在已将工作目录更改为根目录/
(尽管cd
未显示执行此操作的命令)。
$ cd Users
/Users
给定相对路径 => 更改为其中的目录“Users” /
。
$ cd /Users
/Users
给出绝对路径 => 改变到目录/Users
。
每次的关键都是以 开头/
。有它,路径就是绝对路径。没有它,路径就是相对路径。这个规则是明确的,因为所有绝对路径都以 开头/
(因为根目录总是被称为/
)。
下面是一些粗略描述该算法的伪代码:
MakePathAbsolute(path):
if <path> starts with '/'
return <path>
else
return <current directory>/<path>
您传递的参数cd
会经过该算法;您最终改变到的目录是算法返回的路径。
进一步阅读:
- Unix 文件和目录教程
约瑟夫·扎卡里
“科学编程简介”