红联Linux门户
Linux帮助

Linux下PATH环境变量设置

发布时间:2014-10-31 15:07:21来源:linux网站作者:linux人

PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻。用以下命令可以看到PATH的值。 

$ echo $PATH


例如,在主机中,用户yogin的PATH值为:

/opt/kde/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/yogin/bin


其中“:”为分隔符。所以,上面的一串目录可以看成是如下的目录列表。

/opt/kde/bin 

/usr/local/bin 

/bin:/usr/bin 

/usr/X11R6/bin 

/home/yogin/bin


同样,也是主机中,用户root的PATH值为:

/opt/kde/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

要修改所有用户的PATH值,您可以以root身份编辑/etc/profile文件,修改其中包含“PATH=”的一行。


例如,您可以使用pico编辑器打开/etc/profile文件。

$ pico -w /etc/profile

pico是一个文本编辑器,而-w选项关闭了长行回绕功能。


只有在用户重新注册后,PATH的新值才会生效。如果只是要修改某一个用户的PATH值,就应该编辑该用户主目录中的.bash-profile文件。

如果您想将当前目录加入到PATH中,则将“.”加入PATH中,此时PATH的设定如下:

PATH="$PATH:/usr/X11R6/bin:."

export PATH

注意:在修改了PATH值或任何环境变量后,都要用export将其输出,新的PATH值才能生效。


建立交叉编译环境是嵌入式开发的一个重要的步骤,安装交叉编译环境就是为交叉编译工具设置环境变量。


下面就是安装交叉编译环境的一个例子:

首先:安装工作目录。

把解压后的交叉编译工具链arm-linux-gcc 3.4.1版本复制到/usr/local/arm/3.4.1/

其实:设置环境变量。

#gedit /root/.bashrc

编辑/root/.bashrc 文件,在最后一行export PATH=$PATH:/usr/local/arm/3.4.1/bin

最后:重新登录 RedHat 系统(不必重启机器,开始->logout 即可),使以上设置生效,在命令

行输入 arm-linux-gcc –v 检查是否成功建立交叉编译环境。


分析/root/bashrc文件的内容:

.bashrc:

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

export PATH=$PATH:/usr/local/arm/3.4.1/bin


前面三行的意思是“如果/etc/bashrc这个文件存在,那么就执行它”,最后一行是我自己加的,用于修改PATH变量,这里是设置环境变量所起的作 用就是当运行arm-linux- ,就会运行export PATH=$PATH:/usr/local/arm/3.4.1/bin中对应的命令。而且每次登录时,环境变量PATH都会自动修改为我需要的值.


提问1:在Linux操作系统中设置环境变量用export命令:如export HOME=/home j以后脚本中HOME就代表/home .shell中的arm-linux-gcc命令怎么和/usr/local/arm/3.4.1/bin中的arm-linux-gcc相关联?在语句中不能直接看出他们的关联?

回答:在语句中的确不像例子中那样可以直接看出HOME与/home 的相关性。那是因为环境变量PATH蒙蔽了你的双眼。用$echo $PATH查看环境变量PATH的值(env查看全部环境变量值)


这里补充一下小知识:

通过以下内容说明特殊符号的用法。

export A=/q/jing:aaa/cc/ld

export B=.:/liheng/wang

export A=/cd/cdr:$A

大家注意符号:

: 表示并列含义,例如A变量值有多个,用:符号进行分离。

. 表示你操作的当前目录。例如pap命令会查找B环境变量。


在/home键入pap命令,系统首先在/home目录下(即当前路径)查找关于 B 的内容,如果没有在/liheng/wang目录下查找关于B的内容。

$ 表示该变量本次定义之前的值,例如$A代表/q/jing:aaa/cc/ld。也就是说

A=/cd/cdr:/q/jing:aaa/cc/ld

PATH环境变量作用是决定了shell将到哪些目录中寻找命令或程序。arm-linu-gcc属于命令。


export PATH=$PATH:/usr/local/arm/3.4.1/bin也就不难理解。意思是让PATH以前的值($PATH)和新设的环境变量值(/usr/local/arm/3.4.1/bin)并列,通过符号进行分离。因为arm-Linux-gcc只有在/usr/local/arm/3.4.1/bin下才存在,所以在执行时就能通过符号分离出arm-linux-gcc的路径为/usr/local/arm/3.4.1/bin


提问2:为什么是在/root/bashrc文件中设置?不是在/etc/bashrc或者其他文件中进行设置?

回答:linux给大家提供了自动设置环境变量的方法,那就是修改 .bashrc 文件。 一般说来,有两个文件可以提供这种“进入系统时自动设置”的功能,一个是 /etc/bashrc,另一个是 ~/.bashrc。其中/etc/bashrc是被每个用户执行的,而~/.bashrc只被当前用户执行。所以/etc/bashrc只有root用 户能更改,而~/.bashrc是各个用户私有的文件。 "~"指的是用户的home目录。我自己用root帐号登录的,所以对我来所~/bashrc就是/root/bashrc。

这样,各个用户有自己独立的".bashrc"文件,可以根据需要自行更改,而不会互相干扰。 /etc/bashrc文件则是共享的,整个Linux中只有一份。一般来说,用户的"~/.bashrc"开头都会调用/etc/bashrc,因此更 改/etc/bashrc会影响到所有用户,这个文件一般是root用户管理的。


提问3:Linux系统中/etc/profile与/etc/bashfile文件作用的区别?

(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。他是为用户定制系统定制环境变量。

(2)/etc/bashrc: 是为每一个bash shell的用户定制环境变量,当bash shell被打开时,该文件被读取。~/bashrc是为某个bash shell用户定制环境变量。