使用cd时使用/


12

我在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

为什么///Users却在任何后续级别中都不能使用路径的前面?这是特定于macOS还是标准的Unix行为?


11
我认为有关相对路径和绝对路径的问题已在befofre
之前

6
@adamczi很明显,OP不知道相对路径是什么,或其语法如何,因此他无法查找它。
恢复莫妮卡

12
@ K.Gkinis这不是不作为重复关闭的原因。它可以帮助发问者获得好的答案(假设答案是好的),并帮助发问者维护更少的相同内容版本。
user202729 '18

9
@ K.Gkinis从某种意义上说,这是重复题中很大一部分的观点:人们会以很多不同的方式提出问题,因此指向单个答案的很多问题(匹配这些方式)都是好东西 在这样的情况下(OP不知道要搜索的术语),按原样关闭并不是对它们的批评,而只是处理人们提出问题的最佳方式。
TripeHound18年

1
@adamczi他们已经问过(谢谢你联系!),但我的问题,特别是这里给出的伟大的答案是方式更详细,更好地解释这一概念比你链接的答案。不知道以重复方式结束是否很重要,但这可能是一个考虑因素。
LukasKawerau

Answers:


45

这是标准的Unix行为。

/在路径的开始表示磁盘(或文件系统树的开始/最上层)的根。由于Documents不是没有根,/Documents所以找不到。

/Users 不在根目录下,因此不会发生此问题。

您可以cd /Users/lukas/Documents用来更改该路径。

或者,您可以使用相对寻址。基于Unix的文件系统有2个特殊目录:

  • . 意思是“这个目录”,
  • .. 这意味着父目录。

如果您在/Users/lukascd ./Documents将带您到正确的地方。

假设您已经进入/Users/Lukas/Documents并想要转到/Users/Janes/Documents,您可以发出一条命令cd ../../Janes/Documents-使用..将使您返回一个级别-因此您需要执行两次,然后再进入新的相对路径。


1
注意:正如@davidgo所说,当in时Users/lukascd Documents需要相对路径cd /Users/Lukas/Documents调用绝对路径(调用此命令时,无论您使用的是什么目录都可以使用)。
Shan-x

1
尽管问题是关于Mac(这是Unix系统),但这也是标准的MS-DOS / Windows行为(用/\ 代替),因为DOS(通过漫长而复杂的历史)是从Unix借来的。
FreeMan

2
同样取决于您使用的外壳,cd $ HOME / Documents或cd〜/ Documents也可以使用。shell变量HOME(通过$ HOME访问)是主目录的常规存储位置(〜是$ HOME的特殊别名)。
pboss3010 '18

13

/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

给定的相对路径=>更改为inside的目录“ Users” /

$ cd /Users
/Users

给定的绝对路径=>更改为目录/Users

每次的关键是领先/。有了它,路径是绝对的。没有它,路径是相对的。该规则是明确的,因为所有绝对路径都以/(因为始终调用根目录/)开头。

以下是一些伪代码,大致描述了该算法:

MakePathAbsolute(path):
   if <path> starts with '/'
      return <path>
   else
      return <current directory>/<path>

您传递给该参数的参数cd将通过此算法;最终更改到的目录是算法返回的路径。


进一步阅读:


这也是一个很好的演练,确实有助于理解这种行为。谢谢!:)
LukasKawerau
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.