PATH是环境变量,一定要大写.
(1)不同身份用户默认的PATH不同,默认能够随意执行的明朗了也不同,如下(root与jack):
[root@sqj2015 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@sqj2015 ~]# su – jack
[jack@sqj2015 ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jack/bin
- PHTH是可以修改的,所以一般用户还可以通过修改PATH来执行某些位于/sbin 或/usr/sbin下的命令来查询.
- 使用绝对路径或相对路径直接指定某个命令文件名来执行,会比查询PATH来的正确
- 命令应该放置在正确的目录下,执行才会比较方面
- 本目录(.)最好不要放到PATH当中
那如何修改和设置PATH变量呢?如下:
<1>使用export命令
export PATH=$PATH:/XXX
<2>修改profile文件
在里面加入:export PATH=”$PATH:/XXX”
让环境变量立即生效需要执行如下命令:
source /etc/profile
<3>修改.bashrc文件
在里面加入:export PATH=”$PATH:/XXX”
后两种方法一般需要重新注销系统才能生效,最后用echo查看下. /etc/profile对系统里所有用户都有效,而用户主目录下的.bash_profile
eg:
ls命令位于/bin/ls,若将ls由移动成为/root/ls(可用mv /bin/ls /root 命令实现).然后你本身也在/root目录下,请问是否可以直接输入ls来执行呢?若不能,该如何执行这个命令呢?
[root@sqj2015 ~]# pwd
/root
[root@sqj2015 ~]# ls
anaconda-ks.cfg install.log install.log.syslog test
[root@sqj2015 ~]# mv /bin/ls /root
[root@sqj2015 ~]# ls
-bash: /bin/ls: No such file or directory
[root@sqj2015 ~]# ./ls
anaconda-ks.cfg install.log install.log.syslog ls test
[root@sqj2015 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@sqj2015 ~]# PATH=”PATH”:/root
[root@sqj2015 ~]# echo $PATH
PATH:/root
[root@sqj2015 ~]# ls
anaconda-ks.cfg install.log install.log.syslog ls test
上面也说过,PATH=”PATH”:/root 这样赋予是也是临时生效的,但是要注意区别export PATH=”$PATH:/root”设置结果,如下:
[root@sqj2015 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@sqj2015 ~]# PATH=”PATH”:/root
[root@sqj2015 ~]# echo $PATH
PATH:/root
而
[root@sqj2015 ~]# export PATH=$PATH:/root
[root@sqj2015 ~]# echo $PATH
PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root
“.”代表目录本身,若我把”.”加入到PATH变量中呢?会出现什么样情况呢?
[root@sqj2015 ~]# echo $PATH
PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@sqj2015 ~]# mv /bin/ls /root
[root@sqj2015 ~]# ls
-bash: ls: command not found
[root@sqj2015 ~]# export PATH=$PATH:.
[root@sqj2015 ~]# ls
anaconda-ks.cfg install.log install.log.syslog ls test
[root@sqj2015 ~]# mv /root/ls /home/
[root@sqj2015 ~]# ls
-bash: ls: command not found
[root@sqj2015 ~]# cd /home/
[root@sqj2015 home]# ls
class jack ls
是不是发现:我们可以在命令所在目录进行命令的执行了.但是由于工作目录并非固定(经常使用cd来切换到不同的目录),因此能够执行的命令有变动(因为灭个目录下面的可执行文件都不相同),这对用户来说并非好事.
另外,若有个坏心用户在/tmp下面做了一个命令,因为/tmp是大家都能够写入的环境,所以他当然可以这么做.假设该命令可能会窃取用户的一些数据,如果你使用root的身份来执行这个命令,那是不是很糟糕?所以,为了安全起见,不建议将”.”加入PATH的查询目录中.