Luk*_*rau 12 linux mac terminal command-line
我在我的 mac 上的主目录中:
$ pwd
/Users/lukas
Run Code Online (Sandbox Code Playgroud)
当我cd在附近时,我不会(也不能)以以下方式开始路径/:
$ cd Documents/
/Users/lukas/Documents
$ cd /Documents
-bash: cd: /Documents: No such file or directory
Run Code Online (Sandbox Code Playgroud)
除非我在/:
$ pwd
/
$ cd Users
/Users
$ cd /Users
/Users
Run Code Online (Sandbox Code Playgroud)
为什么我可以/在从/to时在路径前面使用/Users但在任何后续级别中都不能使用?这是特定于 macOS 还是标准的 Unix 行为?
dav*_*dgo 45
这是标准的 Unix 行为。
的/在路径的开始表示磁盘(或文件系统树的开始/最上层)的根。由于Documents未脱根,/Documents无法找到。
/Users 不在根目录下,所以不会出现这个问题。
您可以使用cd /Users/lukas/Documents更改为该路径。
或者,您可以使用相对寻址。基于 Unix 的文件系统有 2 个特殊目录:
. 意思是“这个目录”,.. 这意味着父目录。如果你在/Users/lukas,cd ./Documents会带你到正确的地方。
假设您在/Users/Lukas/Documents并且想要去/Users/Janes/Documents,您可以发出一个命令cd ../../Janes/Documents- 使用..会带你回到一个级别 - 所以在进入新的相对路径之前你会做两次。
Lig*_*bit 13
/Users/lukas是“绝对”路径。前导/代表文件系统的根目录。
lukas是“相对”路径。由于它没有锚定到根,这意味着“在当前目录中查找它”。除非当前目录是/Users(或其他带有 a 的目录lukas),否则这将失败。
所以,让我们探索你的例子,假设你在/Users/lukas:
$ cd Documents/
/Users/lukas/Documents
Run Code Online (Sandbox Code Playgroud)
给定的相对路径 => 更改为/Users/lukas.
$ cd /Documents
-bash: cd: /Documents: No such file or directory
Run Code Online (Sandbox Code Playgroud)
给定的绝对路径 => 更改为目录/Documents。
$ pwd
/
Run Code Online (Sandbox Code Playgroud)
这表明您现在已将工作目录更改为根目录/(尽管cd未显示执行此操作的命令)。
$ cd Users
/Users
Run Code Online (Sandbox Code Playgroud)
给定的相对路径 => 更改为/.
$ cd /Users
/Users
Run Code Online (Sandbox Code Playgroud)
给定的绝对路径 => 更改为目录/Users。
每次的关键是领先/。有了它,路径是绝对的。没有它,路径是相对的。此规则是明确的,因为所有绝对路径都以 开头/(因为根目录始终称为/)。
下面是一些伪代码,粗略地描述了该算法:
MakePathAbsolute(path):
if <path> starts with '/'
return <path>
else
return <current directory>/<path>
Run Code Online (Sandbox Code Playgroud)
你传递给的参数cd通过这个算法;您最终更改到的目录是算法返回的路径。
进一步阅读:
| 归档时间: |
|
| 查看次数: |
3327 次 |
| 最近记录: |