我正在观看一些有关如何浏览文件系统的教程,但无论我观看哪个教程,似乎都有一件事无人回答。
我理解这.
是当前目录。我理解这/
是根目录,或者只是表示当前目录的结尾。
那么,如果我想在当前目录中运行程序,我必须执行 吗./ProgramName
?这仅仅是因为ProgramName
中可能存在$PATH
,而我必须指定我想在当前目录中运行的版本吗?如果 中没有等效版本,为什么 Ubuntu 不会自动运行当前目录的版本$PATH
?
如果可以,为什么我在遍历目录时可以省略./
?例如,我可以cd DropBox
从我的主目录中执行。我也可以这样做cd ./DropBox
,而且似乎有效,但为什么不是./
必需的?
答案1
让我试着解释一下,以回答这种cd
情况。现在我们有.
-- current directory
,然后/
--root
目录,现在请记住,在 Linux 中,当它启动路径地址时,它/
用于指示而不是相对路径。现在在你的例子中;absolute path
当您使用时,
cd folder_name
您正在使用relative path
该(当前)目录的地址,因此无需指定路径,您已经在那里了。当您使用时,
cd ./folder_name
它会将我移动到folder_name
当前(.
)目录中同名的文件夹中。您在当前目录中运行一个程序
.
,并./program.sh
显示“don't bother searching in the standard paths
查看当前.
文件夹”。这是标准的 Linux 设置。此外(感谢 Sergiy),我想补充的是,在使用
globstar
处理文件时,应该使用它,./
因为它更安全。假设您运行类似 的命令ls *
,并且您有类似 的文件名-231.txt
。ls 命令会认为这-2
是一个命令开关,但 ls 上有一个类似的开关,因此您会收到错误。使用ls ./*
它就可以正常工作。因此,./
不仅用于cd
某个地方或运行脚本
答案2
当您使用 cd 时,它明确表示您想要更改目录,因此操作系统将查看当前目录的子目录。运行程序时,“./”表明它是一个程序,而不是命令。