1、什么是环境变量
环境变量是一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如path,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。
简单地说这里的“Path”就是一个变量,里面存储了一些常用命令所存放的目录路径。
环境变量相当于给系统或用户应用程序设置的一些参数, 具体起什么作用这当然和具体的环境变量相关. 比如path, 是告诉系统, 当要求系统运行一个程序而没有告诉它程序所在的完整路径时, 系统除了在当前目录下面寻找此程序外, 还应到哪些目录下去寻找;
再如tc或vc++中, set include=path1;path2; 是告诉编译程序到哪里去找.h类型的文件; 当然不仅仅是指定什么路径, 还有其它的作用的,
如set dircmd=/4 设置一个环境变量的作用是在使用dir命令时会把/4作为缺省的参数添加到你的dir命令之后, 就像你的每个命令都加了/4参数, 它实际上是给命令解释程序command设置的一个环境变量, 并且是给dir这个内部命令设置的。
shell环境依赖于多个文件的设置。当shell被调用时,它从两个初始文件读取命令。
/etc/profile包含了系统变量,它由系统管理员维护,由系统管理员设置本地系统变量和特殊命令。
普通用户的启动
信息文件
($HOME/.bash_project)由各用户自己维护,该文件可以被修改以实现任何特定的
系统初始化
。
只有在特定的情况下才读取profile文件,确切的说是在用户登陆的时候。当运行shell脚本或subshell以后,就无须再读profile.虽然所有profile都可选的,但是基本上所有系统都有/etc/profile.
如果定义了变量ENV且已经传递到环境中,则所有的bash shell都要读取并调用由这个变量制定的文件所包含的命令。这个文件用来定义所有bash shell的特征,而不仅仅是登陆到shell。这个文件的典型的名字是$HOME/.bashrc
当用(系统管理员)新建用户时,.bash_profile、bashrc和其他公共的环境文件模板将复制到/etc/skel这个目录下面。可以编辑这些初始化设置,也可以在此目录下添加附加的文件。
Example:
一个典型的系统profile(/etc/profile):
PATH=$PATH:/usr/qa/tools/bin
ENV==$HOME/.bashrc
ORACLE_HOME=/dbs/oracle
ORACLE_SID=qadb
Export PATH ENV ORACLE_HOME ORCAL_SID
Cat /etc/motd
一个典型的用户profile(.***我也不知道是哪个文件。。草):
PATH=$PATH:$HOME/bin
TEAM=uvt1224 export TERM
sttyintr \^C
cal
mesg n
一个典型的用户 bashrc file (.bashrc):
alias dir=ls lf='ls -FC'
PSI='$PWS[!]>'
set -o vi
别名和其他bash专用的定义应该放在.bashrc文件(不应在.bash_profile) 中定义;否则会导致找不到某些命令。
应该记住profile文件和.bashrc文件的区别:
两个profile都只在系统启动时被读取一次,而.bashrc在系统启动和每次调用shell的时候都要被读取。
2、修改环境变量
PATH是环境变量,要大写,那几个目录是你放置linux命令的目录,输入命令后系统会去PATH中寻找是否存在该命令
查看当前环境变量:
echo $PATH
也可以用set命令看一下。
#vi ~/.bash_profile
修改PATH行,把/etc/apache/bin添加进去,比如我原来的是:
PATH=$PATH:$HOME/bin:
export PATH
然后我添加一个路径变成:
PATH=$PATH:$HOME/bin:$ORACLE_HOME/OPatch (用分号隔开)
export PATH
这种方法是针对用户起作用的.
添加PATH环境变量,第4种方法:
#vi ~/.bashrc
PATH=$PATH:/etc/apache/bin
export PATH
这种方法也是针对用户起作用。比如如果是在root权限操作,则root用户有效。
注意:想改变PATH,必须重新登陆才能生效,以下方法可以简化工作:
如果修改了/etc/profile,那么编辑结束后执行source profile 或 执行点命令 ./profile,PATH的值就会立即生效了。
这个方法的原理就是再执行一次/etc/profile shell脚本,注意如果用sh /etc/profile是不行的,因为sh是在子shell进程中执行的,即使PATH改变了也不会反应到当前环境中,但是source是在当前 shell进程中执行的,所以我们能看到PATH的改变。