0

2.12Linux下$PATH环境变量详解

Posted by 撒得一地 on 2015年10月24日 in Linux教程

在Linux下我们可以用ls这个命令查看文件的属性,而命令ls完整的命令路径一般是:/bin/ls,这是绝对路径。我们在任何地方都可以运行/bin/ls这个命令。当我们在任何目录下输入ls,其实最终找到的命令都是/bin/ls。那么为什么我们输入ls就可以找到/bin/ls命令呢,这个就是环境变量PATH起的作用了。

当我们运行一个命令,如ls这个命令,系统会根据PATH环境变量事先的配置去每个PATH定义的目录下搜寻可运行命令,如果PATH定义的目录包含多个ls可执行文件,则先找到的命令先被运行。

那么,$PATH环境变量存储的值是什么?我们可以用echo这个命令来输出这个环境变量的值,echo的作用是显示,输出。
具体做法如下:

超级管理员root执行

[root@lmode ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[ppp@lmode ~]# echo $PATH
/usr/local/bin:/bin:/usr/bin:/home/ppp/bin

PATH(这个命令要大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开,每个目录有先后之分,放在越前面的目录越先被查找。超级管理员用户root和普通用户自行echo $PATH打印出的目录会有所不同。不过,无论是超级管理员root还是普通用户都有/bin这个目录,也就说任何普通用户也好或者超级管理员用户也好,都可以使用/bin/ls这个命令。注意:/sbin、/usr/sbin和/usr/local/sbin这三个目录是超级管理员特有的,也就是说里面的命令也是超级管理员特有的。一般来说普通用户可以用绝对路径的方法来操作这些命令,比如当普通用户想查看网卡配置信息时,可以使用/sbin/ifconfig ehto来进行查看。

实例1:

假设在root用户下,将ls由/bin/ls移动到/root/ls,那么root用户还可使用ls这个命令吗?

[root@lmode ~]# mv /bin/ls /root

[root@lmode~]# ls
-bash: /bin/ls: No such file or directory

[root@lmode~]# /root/ls
sh-1.3.0-centos.zip

这个答案是否定的,root不可以使用ls这个命令,即使在/root目录下也不行,因为系统是根据PATH这个环境变量指定的目录去查找命令位置的,而/root这个目录不在PATH这个目录中。不过我们可以通过绝对路径/root/ls、或相对路径./ls来执行这个命令。

实例2:

如果想让/root这个目录也加到环境变量PATH里面,那么如何操作?

[root@lmode ~]# PATH="$PATH":/root

[root@lmode~]# ls
sh-1.3.0-centos.zip

将ls重新放回/bin下
[root@www ~]# mv /root/ls /bin

把/root加到环境变量PATH中,那么在任何目录都可以运行ls命令。注意,实验完了不要忘了将ls命令重新放回到/bin目录下。

实例3:

	为什么PATH搜寻的目录不加入本目录(.)?

	因为在Linux下/tmp是大家都能够写入的环境,如果一个黑客在/tmp底下做了一个命令,假设该命令可能会窃取使用者的一些数据,如果你使用root的身份来运行这个命令,那后果就很可怕。

最后,关于PATH环境变量,总结下:

1.不同用户默认的PATH不同,默认能够随意运行的命令也不同(如普通用户和超级管理员);

2.PATH是可以修改的,所以一般使用者还是可以透过修改PATH来运行某些位于/sbin或/usr/sbin下的命令来查询;

3.使用绝对路径或相对路径直接指定某个命令的可执行文件来运行,会比搜寻PATH来的正确;

4.命令应该要放置到正确的目录下,运行才会比较方便;

5.本目录(.)最好不要放到PATH当中。

 

标签:,

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

2 + 3 = ?

网站地图|XML地图

Copyright © 2015-2018 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.