我的困惑
a.out是我在 Ubuntu 12.10 中执行的程序的输出。在 Red Hat 系统中,当我a.out在终端中执行时它会执行。在 Ubuntu 中,我必须执行./a.out才能获得输出。'a.out' 不起作用。
有人可以解释命令之间的区别吗?
Tho*_*man 18
您遇到的行为很可能取决于环境变量的差异$PATH。在$PATH本质上是目录,其被按顺序搜索特定可执行程序的情况下使用调用的冒号分隔的列表exec操作系统调用。在$PATH可以包含相对路径的部件,典型地.或空字符串,这既指当前工作目录。如果当前目录是 的一部分$PATH,则当前工作目录中的文件可以仅通过它们的名称来执行,例如a.out. 如果当前目录不在 中$PATH,则必须指定可执行文件的相对或绝对路径,例如./a.out.
具有相对路径组件$PATH具有潜在的安全隐患,因为前面目录中的$PATH可执行文件在列表后面的目录中覆盖了可执行文件。考虑例如在当前工作目录路径的系统上的攻击.preceeds/bin在$PATH。例如,如果攻击者设法将与常用系统实用程序共享名称的恶意脚本放置ls在当前目录中(这通常比替换 root-owned 中的二进制文件要容易得多/bin),用户将在目的是调用系统ls。即使.只附加在末尾$PATH,用户可能会被诱骗无意中调用当前目录中的可执行文件,该可执行文件与在该特定系统上找不到的通用实用程序共享名称。这就是为什么通常不将相对路径组件作为默认$PATH.