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 的查询目录中.