使用 cd 时使用 /

使用 cd 时使用 /

我在我的 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/lukascd ./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会经过该算法;您最终改变到的目录是算法返回的路径。


进一步阅读:

相关内容