运行当前目录下的可执行文件,为什么要加上“./“在前面?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
微风成长
帖子: 644
注册时间: 2008-12-14 18:43
联系:

运行当前目录下的可执行文件,为什么要加上“./“在前面?

#1

帖子 微风成长 » 2009-08-26 17:55

我记得多年前曾经看过相关的报道。
可惜现在忘了,哪位达人帮忙解释下?
谢谢了。
头像
luojie-dune
帖子: 22033
注册时间: 2007-07-30 18:28
系统: Linux
来自: 空气中

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#2

帖子 luojie-dune » 2009-08-26 18:05

乱猜个, 没有不行,没有就相当于 子文件夹了,有个 /也不行同理。所以就造了个 ./ 也对应 /.

瞎猜
『这个世界都是我的 ,我爱你们』

ENTP ⥂ INTP ⥄ INFP ⇦ INTJ

在此发布的文章使用 Creative Commons Attribution-ShareAlike 4.0 协议
头像
daf3707
论坛版主
帖子: 12730
注册时间: 2007-06-13 15:57
来自: 在他乡

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#3

帖子 daf3707 » 2009-08-26 18:06

PATH里不包含当前目录吧
头像
wangdu2002
帖子: 13284
注册时间: 2008-12-13 19:39
来自: 物华天宝人杰地灵

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#4

帖子 wangdu2002 » 2009-08-26 18:07

./----明确指定为当前目录下的文件,省得再去查目录。
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
dshbusiness
帖子: 1831
注册时间: 2009-04-03 15:10

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#5

帖子 dshbusiness » 2009-08-26 18:07

这是由于直接输入可执行文件的文件名的时候,shell会在系统设置的一些默认路径下寻找这个可执行文件,如果没有,就会返回错误信息了,默认路径一般是/usr/bin,如果要执行当前目录下的可执行文件,就必须指定路径,也就是在可执行文件名称前面加上“./”
头像
kinzess
帖子: 319
注册时间: 2007-04-11 10:39

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#6

帖子 kinzess » 2009-08-26 19:53

是没有当前路径,
也不推荐加上去,很容易引发安全问题,
例如当前目录刚好有个同名的木马就惨了..
头像
jioyo源
帖子: 3476
注册时间: 2008-10-08 13:48

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#7

帖子 jioyo源 » 2009-08-26 20:06

默认只搜PATH里的,你不加路径,PATH里没有,他就认为没有这个文件……
--------------------------------------
论坛精华贴全集:http://forum.ubuntu.org.cn/viewtopic.php?f=48&t=199845
book:http://forum.ubuntu.org.cn/viewtopic.php?f=21&t=198286
头像
xiajing
帖子: 30
注册时间: 2009-06-10 21:52

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#8

帖子 xiajing » 2009-08-26 20:39

如果你想执行当前目录的这个文件,但PATH指向的文件夹下有与此文件同名的文件,不加./ 那就执行PATH指向的文件夹下的文件,
所以允许不加./就可执行的话,容易执行非当前目录下的文件,为避免该错误,所以要加./。
头像
ciciluter
帖子: 50
注册时间: 2009-08-19 21:51

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#9

帖子 ciciluter » 2009-08-26 22:10

wangdu2002 写了:./----明确指定为当前目录下的文件,省得再去查目录。
正解。
. 当前目录
.. 当前目录的上一级目录

操作系统基本都这样默认的
头像
微风成长
帖子: 644
注册时间: 2008-12-14 18:43
联系:

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#10

帖子 微风成长 » 2009-08-26 22:48

我记得好像是安全问题。
如果不是安全问题的话,完全可以做成Windows命令行的那种形式:不管path里还是当前目录里,只要有该文件就立刻被执行。
6楼好像有点这个意思,但太模糊。
谁能说说具体原因?
头像
微风成长
帖子: 644
注册时间: 2008-12-14 18:43
联系:

Re: 运行当前目录下的可执行文件,为什么要加上“./“在前面?

#11

帖子 微风成长 » 2009-08-26 23:07

想起来一点了:
我记得那篇文章是这样说的:
如果当前目录下的可执行文件与path默认目录里的文件重名的话,那么系统一定会先执行当前目录里的文件。
如果恰好是某个终端用户上传的一个和系统命令重名的文件,例如:cp,那么恰好管理员用户工作在这个目录下要使用cp命令的话,就会执行那个终端用户上传的cp文件。这样如果这个cp是木马的话,那么系统就会轻而易举的被夺取控制权,所以不安全。
为了解决这个问题,就在当前目录可执行文件名前加"./"用以区分系统命令,也就是默认path里的可执行文件名。

windows为什么没有这个问题呢?我想原因如下:
首先,windows不是一个多用户操作系统。windows不能让两个或两个以上的用户同时进行操作。
特别是GUI方面。所以在用户权限管理方面比较松懈。
其次,windows控制权不需要系统管理员权限来执行木马服务端就可以轻易获取。
再次,我想windows有更多严重的安全问题有待考虑,所以这种安全细节自然还没排上日程。

这是我的一点不成熟的看法,大家怎么看windows命令行设计的这种区别呢?
回复