Linux 在运行可执行文件时的命令行行为(Ubunto/Deb)

Linux 在运行可执行文件时的命令行行为(Ubunto/Deb)
@user-123:~$ Downloads/execfile-3.4/execfile
@user-123:~$ 
@user-123:~$ cd Downloads/execfileparentdir-3.4/
@user-123:~/Downloads/execfileparentdir-3.4$ execfile
execfile: command not found
@user-123:~/Downloads/execfileparentdir-3.4$ ./execfile
@user-123:~/Downloads/execfileparentdir-3.4$ 

./使用后面的具体原因是什么execfile

请注意,我不是在询问 的功能./。换句话说,我想知道为什么为了从终端运行可执行文件,它需要从当前目录到给定文件的地址?为什么当我们在当前目录中时,像终端在其他情况下的行为方式一样,自动识别文件名,以便我们只需键入文件名而不是在文件名./后面添加 和 来运行它?

编辑:

原因之一可能是安全性并防止用户意外执行另一个(可能是恶意的)文件。然而,这是一个非常可信的理由,但他们不是为了它而牺牲了规则的一致性吗?难道没有其他方法来处理这个问题并且不在统一规则中例外(当前目录中文件名的预测)吗?这听起来像是一次微不足道的交流,但我想确定这是否是最小的一次。

答案1

这是 UNIX 和 Linux 中的体系结构决定。主要原因是安全。您不想仅仅因为您位于文件所在的目录中就执行随机文件。这使您可以更精确地控制可执行文件的可信来源。

当然,您可以在路径中添加当前目录并具有类似 MS Windows 的行为。该命令如下所示,但不要这样做,因为它存在安全风险

导出路径=$路径:.

相关内容