为什么需要./来运行可运行文件?


9

我使用的是ubuntu,我注意到我的许多可运行脚本都不会运行,除非在主题之前加./

例如,如果我有一个perl脚本:/home/me/script.pl并且我目前在/home/me,则键入script.pl不会执行操作,但是./script.pl会执行。

这是为什么?


@David B :runnable file => executable file
拉泽尔

Answers:


13

要执行脚本,您需要输入脚本的完整路径,除非该脚本存在于$PATH环境变量中列出的目录之一中。通常(默认情况下).(当前目录)不在您的中$PATH,因此您需要键入./script执行它。


21

因为当前目录不在您的路径中。这是一项安全功能。如果它在您的路径中,则有人可能会删除一个通用命令的恶意副本,例如,当您在该目录中而不是运行真实的sudo时,您将运行伪造的sudo。那将是一件坏事。


3
这有点误导。只要.之后/usr/bin/,它就不会取代真实的sudo。这是为了确保您不会意外地将程序添加到路径中,但这并不是要取代现有的程序。
马修·弗拉申

相反sudo,我会使用lsrm。被调用的可能性更大。
亚伦·迪古拉

@aaron:肯定但ls不会询问您的密码,并且用户是否可以使用sudo密码很有趣...;)
laurent 2010年

1
@马修。是的,它仍然很难利用,但确实存在安全风险。可以说,我放入了一个脚本sl,该脚本执行不良操作,然后调用ls,然后删除自身。您无法覆盖系统工具,但可以“ typosquat”
Rich Homolka 2010年

@laurent:我想到的是:cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"。无需知道密码。
亚伦·迪古拉

4
echo $PATH

您的路径中必须具有当前目录(单个点),此功能才能起作用。

如果需要,可以使用以下命令将其添加到路径中。

sh / bash: export PATH=$PATH:.

tcsh / csh: set PATH = ($PATH .)


3

Shell在路径中搜索可执行文件,默认情况下./不在路径中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.