Tag Archive: PATH

三月 14th, 2016

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

TAGS: ,