【BASH】运行可行性文件

本文介绍了如何在Linux或Unix系统中使用Bash执行程序。详细解释了Bash如何通过$PATH变量查找并执行命令,以及将当前目录(dot directory)添加到$PATH中的潜在风险。

 

问题:

需要在Linux或者Unix系统下执行某个程序。

 

解决方案:

使用bash,在bash的提示符后敲入你要执行的命令。

 

讨论:

这表面上看起来简单,但是简单的背后有一系列的事情是我们没有看到的。理解bash的重点就是要知道bash的基本操作就是加载和执行可执行程序。当然bash还有其他的成分,比如shell变量,控制语句(forif/them/else),还有控制输入输出的方法,不过这些都不过是程序运行的大蛋糕中的一小块而已。

 

那么bash是怎样让程序跑起来的呢?

bash首先使用$PATH来找到你的程序,$PATH变量是一个使用分号分隔的文件目录列表。bash在这些目录中查找你指定名称的文件,目录在$PATH中的顺序也就很重要了—bash是根据这个来查找的,并且执行第一个找到的文件。

$ echo $PATH

/bin:/usr/bin:/usr/local/bin:.

$

在上面这个示例中,$PATH中包含了4个目录,最后是一个点(叫做dot directory或者直接叫做dot),表示当前目录。在Linux或者Unix文件系统下面,你在任何地方都可以找到这个dot目录。比如你从某个位置copy文件到dot目录(i.e. Cp /other/place/file .),这样你就将文件拷贝到了当前目录。通过把dot目录放到path中,bash就会在当前目录查找命令(当然是在查找path前面的目录并且没有找到之后)。

 

很多人认为把dot加入到$PATH会带来很大的安全隐患,你可能执行有的人写的恶意程序而不是你期待的程序。比如dot已经加入到了$PATH,那么其他人的ls可能替代正常的ls,并且你可能执行这个命令,如果不相信的话,看下面的例子。

$ bash

$ cd

$ touch ls

$ chmod 755 ls

$ PATH=".:$PATH"

$ ls

$

 

这个时候,你会突然发现ls在你的主目录下面不工作了,得不到任何的输出,如果你改变到其他目录,ls是正常的。这是为什么呢?因为在你的主目录下面有一个空的ls,在你主目录下面会执行这个空的ls而不是/bin/ls

 

如果你把dot放到了$PATH的最后,至少不会得到向上面那样的错误,但是最好的方法是不要把dot加到$PATH中,在执行当前目录下面的程序的时候,可以使用下面的形式

$ ./myscript

这是最佳的选择。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值