hello2
我有一个在当前工作目录中命名的二进制文件。
要执行它,我需要按它./hello2
,它会显示输出。
但是当我使用以下命令时././hello2
它仍然有效。
你能解释一下 shell 是如何解释这个命令的吗?
答案1
当您运行命令时
$ ./hello2
hello2
shell在目录中查找文件.
,即在当前的目录。然后它根据一些规则运行脚本或二进制文件(在这种情况下这是无趣的)。
命令
$ ././hello2
还会导致 shell 执行该文件。
这是因为.
和./.
是同一个目录。
每个目录都有一个.
目录条目。该条目对应于目录本身。所以说与说等./
相同。././
././././
唯一的区别是系统可能必须执行一些额外的目录查找(除非 shell 很智能并发现明显的简化)。
每个目录还有一个..
指向其目录的条目家长目录。
这意味着如果调用当前目录alamin
,则以下内容也将执行该文件:
$ ../alamin/hello2
一样
$ ../alamin/./hello2
和
$ .././alamin/./hello2
根目录/
是一个特例。它的目录项与其目录项..
相同。.
这意味着您不能使用 来“超越”它/..
。
也可以看看:文件夹的链接数量并不能反映真实的状态?
答案2
当输入命令名称时,例如hello
,系统会在您的 中查找文件PATH
,该文件应该看起来像这样:
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
如果系统在这些目录中找不到该命令,您将收到command not found
错误消息。
通过添加./
到命令前面,您可以将搜索限制为当前目录。
每个目录都有一个.
对应于目录本身的条目,因此您通过键入所做的所有操作././hello
仍然限制在目录本身中查找命令(两次)。
尝试cd ./././././
。
答案3
答案是正确的,但我想告诉你另一件事。运行以下命令,
┌─[luvpreet@DHARI-Inspiron-3542] - [~/Desktop/drf-vogo] - [2017-09-01 08:57:42]
└─[0] ls -la
total 60
drwxrwxr-x 14 luvpreet luvpreet 4096 Aug 14 15:30 .
drwxr-xr-x 21 luvpreet luvpreet 4096 Sep 1 00:27 ..
您会注意到,前两行有.
和..
现在,这.
是指向您当前所在目录的指针。并且..
是指向其父目录的指针。
当你这样做时cd ..
,
monitoring-server@monitoring-server:~/kibana-project$ cd ..
monitoring-server@monitoring-server:~$
它移动到父目录。
当你这样做时cd .
,
monitoring-server@monitoring-server:~/kibana-project$ cd .
monitoring-server@monitoring-server:~/kibana-project$
它保留在同一目录中。
现在,../testfile.txt
, 指向testfile.txt
父目录中的文件。并./testfile.txt
指向当前目录中的测试文件。
因此,././././././././
尽可能将其保留在同一目录中。
并将../../../../
继续上一级到父目录。