+ -
当前位置:首页 → 问答吧 → 学好嵌入式

学好嵌入式

时间:2011-08-10

来源:互联网

许多刚接触Linux shell的人,会使用下列命令编译运行程序:
代码:
cuihao@cuihao-arch mysh $ gcc mysh.c
cuihao@cuihao-arch mysh $ a.out
zsh: command not found: a.out

然后果断碰壁了,他就会来论坛求助。
原因是很简单的:当前目录“.”不在PATH变量中。命令都在PATH中搜索,所以PATH中找不到a.out命令。

正确做法:
代码:
cuihao@cuihao-arch mysh $ ./a.out
..........


但为什么不把当前目录加入PATH呢?貌似Windows的cmd和DOS神马的都这样做,其实旧的UNIX什么的也是这样做的。

其实主要是安全问题。当前目录是会变化的,用户完全可能进入某个未知的目录,然后使用系统命令。但万一当前目录下有一个与系统命令名字一样的文件,实际执行的就可能不是想要用的系统命令。

如果当前目录在PATH中,我cd进某个人人可访问目录,而某个坏人在这里放了一个恶意程序,并命名为cat,为了查看某个文件我输入了cat,然后伪cat提示我输入密码(虽然很奇怪,但是愚蠢的人类也许一粗心就没注意),然后我输入了密码...... 我就杯具了。如果我用了root,那就更杯具了。

虽然把当前目录放在PATH最后可以避免覆盖系统程序。但自己扩充PATH时,一般都是放在最后,所以还是有被覆盖的风险。所以最好还是别放进PATH了,多输入一个“./”又累不死人。

看APUE知道的,分享一下。

作者: cuihao   发布时间: 2011-08-10

进来学习的

作者: tenzu   发布时间: 2011-08-10