为什么在Linux中必须总是在可执行文件之前键入“ ./”?


8

当我通过以下方式编译egxc时:

GCC x.c -o x

要执行结果,我必须编写:

./x

只需输入:

x

失败此消息:

x:找不到命令

这意味着Linux不会在当前目录中搜索它!这种行为背后是否存在任何合理的问题?


因为这是规则。
Daniel R Hicks

@DanH:然后请解释“规则”。
Torben Gundtofte-Bruun

Answers:


13

因为默认情况下,当前工作目录不在PATH变量中。

这是一种安全/便利措施。如果你有二进制文件/脚本调用例如cdls等你当前的工作目录,就好像他们是在默认情况下运行是非常烦人。


4
答案只有部分正确。如果当前目录仅用作最后一个选项,则可能会解决该问题。然后仍将首先找到标准工具。
用户未知

1
此外,除非您以`。'开头,否则shell内置程序将具有优先权(即,当您键入cdbash,它将执行bash内部的例程,而不是bash /bin/cd
LawrenceC

3
原始* nix安全措施之一,它强制执行系统分配的路径命令中的系统或管理员编译的二进制文件。就像有人以root身份登录服务台问题,转到用户目录,键入ls并发现他们装载了用户留下的炸弹一样,这没什么不好的。
Fiasco Labs

7
@userunknown:第一次输入错误时sl,您会遇到相同的问题。仅应在受信任的目录中,$PATH并且相对路径(例如.永远都不是交互式外壳的受信任目录)。

2
@Basic:如果我输入的rm -r target时间rm -f target通常没有区别。如果按我的rm -f target意思输入rm -r target,则没有区别,或者彻底删除失败。此外,我认为每次输入之前rm尤其是如果要添加-f-r或通配符时,就其性质而言,这是一种危险的命令。lsing 之前没有人思考。


1

您可以通过将当前目录(以单点表示)添加到PATH环境变量中来解决此问题。
具体方法取决于您使用的外壳。
如果您使用的是bash,则可以将该行添加 export PATH=$PATH:..bashrc主目录中的文件中。
如果您使用的是csh或tcsh,则将该行添加 set PATH = ($PATH .)到主目录中的.cshrc文件中。
恕我直言,对于家用台式计算机,这是可以接受的事情-安全方面。


我不知道我们可以补充。但是,这样做会降低安全性,对吗?
Yasser Zamani '04年
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.