是否可以在不指定完整路径或前面的“./”的情况下执行二进制文件?

是否可以在不指定完整路径或前面的“./”的情况下执行二进制文件?

在 shell 之外,例如运行其他进程,该术语是什么current directory意思?是否可以在不指定完整路径或前面的“./”的情况下执行二进制文件(假设包含current directory可执行文件)?

答案1

是的,可以通过适当地设置搜索路径(显式包含工作目录或包含“./”)来实现,但最好在程序名称前面添加“./”。原因是安全性:恶意软件可以使用常用程序的名称(例如,ls)编写可执行文件,并且下一次调用ls将执行本地副本而不是/bin/ls.因此,UNIX 下的标准 PATH 设置不包含“./”。

答案2

您应该更好地定义什么是“其他进程”以及它使用什么方法来启动程序。

无论如何,当前工作目录是每个正在运行的进程的属性,因此它可用于定位要运行的程序。以这种方式实施是否安全值得怀疑。

答案3

一个快速的解决方法是创建一个别名。可以将此创建添加到 .bashrc 以在启动期间添加它。

答案4

Unix/Linux/*BSD 内核始终跟踪工作目录。自从 C 语言出现以来,chdir()和系统调用就已经存在了。fchdir()

如果您编写 C 语言程序并使用execve(),则由您的程序指定filename的参数execve()。内核将在当前工作目录中查找可执行文件,或者相对于当前工作目录,如果您给出诸如“some_executable”或“subdir/some_executable”之类的文件名参数,内核将查找可执行文件(如果它存在并且可执行)。

我意识到现代 shell(至少是 zsh)稍微模糊了当前工作目录,以便能够cd进入符号链接,并cd ..备份到包含符号链接的目录,但是当前工作目录的基于内核的跟踪是仍然存在。在 Linux 机器上,您可以ls -l /proc/$$/cwd准确地看到内核认为该目录的名称。

相关内容