在 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
准确地看到内核认为该目录的名称。