Linux 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”

Posted 学点技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”相关的知识,希望对你有一定的参考价值。

一、PATH 是环境变量,里面保存了执行文件路径(通常会包含多个路径,各路径之间以冒号“:”进行间隔)。当执行一个可执行文件(命令)时,Linux 会优先到 PATH 环境变量中保存的路径下进行查找。使用export $PATH命令可以查看环境变量的内容。

二、“.”表示当前目录,Windows/Dos 的默认搜索路径(即 PATH 环境变量)里有当前目录,所以不需要加。其实加上也是一样的效果。因为 Linux 的默认搜索目录里没有当前目录,所以如果你在当前目录需要执行程序就要加上路径。

三、理论上,如果要让当前目录下的文件不需添加“./”即可运行,只需将“./”加入路径参数PATH中即可,如下所示:

export PATH=$PATH:./

但通常不建议这样做,这是基于安全性的考虑。若系统管理者所在的目录中有可运行文件,而该文件有问题时,被执行后会发生不可预测的问题。例如:任何用户对 /tmp 都有 w 的权限,若某用户在 /tmp 之下新增 ls 这文件,而文件内容如下:

/usr/sbin/useradd -m adm0
/bin/ls

同时,将 PATH 的路径设为export PATH=./:$PATH,则当 root 进入 /tmp 并执行 ls 时,就会优先执行 /tmp/ls,而非系统默认的 /bin/ls,这样不知不觉中新增了一个用户 adm0。因此即使要将当前目录加入路径参数中,export PATH=$PATH:./的安全性也将优于export PATH=./:$PATH

以上是关于Linux 下执行本目录的可执行文件(命令)为什么需要在文件名前加“./”的主要内容,如果未能解决你的问题,请参考以下文章

linux当前目录下的可执行文件不能直接执行的原因

小黑的日常折腾-复制外部命令的可执行文件和依赖库文件到指定目录下的对应目录

Mac 命令行中添加命令直接调用可执行文件

linux chmod命令怎样把某个目录下的所有文件都添加可执行权限?

Linux学习(第一篇)

10 Linux环境变量