关于执行二进制的好奇心

时间:2011-12-13 14:15:03

标签: windows linux unix

这只是我对特定操作系统如何执行二进制文件的好奇心。 如果我在UNIX或Windows中将dir更改为某个路径,我只需输入其文件名即可执行程序。在Linux中,我必须输入./file_name(除非它包含在PATH中)。知道这是一个愚蠢的问题,但有什么理由吗?

2 个答案:

答案 0 :(得分:4)

没什么神奇的 - 它只是因为,默认情况下,Windows隐含地包含'。'在可执行搜索路径中。 * nix没有。

后者的行为显然更安全,如果不太方便的话。

您可以通过添加“。”来获取与* nix下的Windows类似的行为(在安全性方面付出一定代价)走向你的道路

例如,您可以将以下内容添加到.bash_profile:

export PATH=PATH:.

当然,这与完全与Windows相同,因为Windows(默认情况下再次)首先在CWD 中查找。您可以通过移动'。'在* nix中执行相同的操作。到系统路径的前面,但不要那样做

它会给您带来很大的安全风险。如果某人能够删除与系统实用程序同名的恶意程序(例如“ls”或“cp”),则该程序将运行而不是系统实用程序。你可以想象提供“恶作剧”的可能性!

答案 1 :(得分:2)

为了扩展Gregj所说的内容,Windows和Linux中都有一个PATH变量,它告诉操作系统在您没有明确说明可执行文件的位置时查找可执行文件的位置。出于安全考虑,Linux不包含当前目录(.);一个程序可能会在很多文件中隐藏一个具有公共实用程序(例如ls)名称的可执行文件,因此您可能会忽略它,然后它将运行而不是您想要的实用程序,可能导致损坏,丢失敏感数据等。为了方便起见,Windows会搜索.,即使它没有明确地在路径中,也不会因为安全性而缺乏关注。