[知识] 为什么默认不把当前目录加入PATH

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

[知识] 为什么默认不把当前目录加入PATH

#1

帖子 cuihao » 2011-08-10 14:13

许多刚接触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知道的,分享一下。
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
头像
tenzu
论坛版主
帖子: 36924
注册时间: 2008-11-21 20:26

Re: [知识] 为什么默认不把当前目录加入PATH

#2

帖子 tenzu » 2011-08-10 14:18

进来学习的
rediscover
帖子: 3173
注册时间: 2010-01-13 23:26

Re: [知识] 为什么默认不把当前目录加入PATH

#3

帖子 rediscover » 2011-08-10 21:29

人工置顶。
Here I am.
Ubuntu 桌面培训 - 全中文官方文档,含汉化截图,提供PDF
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: [知识] 为什么默认不把当前目录加入PATH

#4

帖子 cuihao » 2011-08-10 21:35

谢谢楼上的鹳鲤猿“人工置顶” :em04
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
回复