环境变量是和紧密相关的,用户登入系统后就启动了一个Shell。对于Linux来说通常是bash,但也可以重新设定或切换到其它的Shell。对于UNIX,可能是CShelll。环境变量是通过Shell来设置的,设置好的环境变量又可以被所有当前用户所运行的程序所使用。对于bash这个Shell程序来说,可以通过变量名来访问相应的环境变量,通过export来设置环境变量。下边通过几个实例来说明。
1)etc/profile:此文件为系统的每位用户设置环境信息,当用户第一次登陆时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
注:在这儿我们设定是为所有用户可使用的全局变量。
2)/etc/bashrc:为每一个运行bashshell的用户执行此文件.当bashshell被打开时,该文件被读取.
3)~/.bash_profile:每位用户都可使用该文件输入专用于自己使用的shell信息,当用户登入时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
注:~在LINUX下边是代表HOME这个变量的。
另外在不同的LINUX操作系统下,这个文件可能是不同的,可能是~/.bash_profile;~/.bash_login或~/.profile其中的一种或几种,假如存在几种的话,这么执行的次序便是:~/.bash_profile、~/.bash_login、~/.profile。例如我用的是Ubuntu,我的用户文件夹下默认的就只有~/.profile文件。
4)~/.bashrc:该文件包含专用于你的bashshell的bash信息,当登陆时以及每次打开新的shell时,该文件被读取.
(注:这个文件是.开头的linux环境变量设置生效,所以在文件夹中被隐藏了)
这么我们怎么添加自己定义的环境变量呢?
用记事本打开这个文件,之后在上面最后写上:
xiaokang=kangkang
之后保存linux环境变量设置生效,这样每次打开一个新的terminal的时侯,我们这个变量就生效了。记住,假如你早已打开一个terminal,之后你更改了这个文件,这么在这个terminal下是不会生效的。通常情况用户最好在这儿进行更改,并且有时侯会覆盖父级的变量,例如PATH是ROOT设定的,而且假如你在这个文件上面写了PATH=xx,这么将来所有的PATH都成了xx了,所以我们应当在这个文件中写为:
PATH=$PATH:xx
这样就把原先的和你自己的一起加上了。并且注意在LINUX系统下用:分割表示并列,而不是windo的;
3和4都是在用户目录下的,她们惟一的不同是:.bash_profile只能在登陆的时侯启动一次。在我的Ubuntu上面这个3文件或许没有。
5)~/.bash_logout:当每次退出系统(退出bashshell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能承继/etc/profile中的变量,她们是/"兄妹/"关系.
~/.bash_profile是交互式、login形式步入bash运行的
~/.bashrc是交互式non-login形式步入bash运行的
一般两者设置大致相同linux vi,所以一般后者会调用前者。
好的,总结一下她们的执行方法:
当你登入而且登陆shell是bash时,bash首先执行/etc/profile文件中的(假如该文件存在),之后它次序找寻~/.bash_profile,~/.bash_login或~/.profile文件,并执行找到的第一个可读文件中的.当登陆bash退出时,它将执行~/.bash_logout文件中的命令.
当启动一个交互的bash时,它将执行~/.bashrc文件中的命令(假如该文件存在而且可读).当非交互地启动以运行一个shell时,bash将查找bash_env环境变量,确定执行文件的名称.
第二篇资料
--------------------------------------------------------------------------------
在登陆Linux时要执行文件的过程如下:
在刚登陆Linux时,首先启动/etc/profile文件,之后再启动用户目录下的~/.bash_profile;~/.bash_login或~/.profile文件中的其中一个(依据不同的linux操作系统的不同,命名不一样!!!!!!!!!!在我的Ubuntu上面只有~/.profile),
执行的次序为:~/.bash_profile、~/.bash_login、~/.profile。
假如~/.bash_profile文件存在的话,通常都会执行~/.bashrc文件。
由于在~/.bash_profile文件中通常会有下边的代码:
if[-f~/.bashrc];then
../bashrc
fi
~/.bashrc中,通常都会有以下代码:
if[-f/etc/bashrc];then
./bashrc
fi
所以,~/.bashrc会调用/etc/bashrc文件。最后,在退出shell时,就会执行~/.bash_logout文件。
执行次序为:/etc/profile->(~/.bash_profile|~/.bash_login|~/.profile)->~/.bashrc->/etc/bashrc->~/.bash_logout
关于各个文件的作用域,在网上找到了以下说明:
(1)/etc/profile:此文件为系统的每位用户设置环境信息,当用户第一次登陆时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc:为每一个运行bashshell的用户执行此文件.当bashshell被打开时,该文件被读取。
(3)~/.bash_profile:每位用户都可使用该文件输入专用于自己使用的shell信息,当用户登入时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc:该文件包含专用于你的bashshell的bash信息,当登陆时以及每次打开新的shell时,该该文件被读取。
(5)
~/.bash_logout:当每次退出系统(退出bashshell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能承继
/etc/profile中的变量,她们是"兄妹"关系。
(6)~/.bash_profile是交互式、login形式步入bash运行的~/.bashrc是交互式non-login形式步入bash运行的一般两者设置大致相同,所以一般后者会调用前者。
/etc/profile和/etc/environment等各类环境变量设置文件的好处
先将exportLANG=zh_CN加入/etc/profile,退出系统重新登陆,登陆提示显示中文。
将/etc/profile中的exportLANG=zh_CN删掉,将LNAG=zh_CN加入/etc/environment,退出系统重新登陆,登陆提示显示英文。
用户环境完善的过程中总是先执行/etc/profile之后在读取/etc/environment。为何会有如上所叙的不同呢?
应当是先执行/etc/environment,后执行/etc/profile。
/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,后者与登入用户无关,前者与登入用户有关。
系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登入时,你看见的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,假若系统环境LANG=zh_CNlinux命令详解词典,则提示信息是英文的,否则是英语的。
对于用户的SHELL初始化而言是先执行/etc/profile,再读取文件/etc/environment.对整个系统而言是先执行/etc/environment。这样理解正确吗?
/etc/enviroment-->/etc/profile-->$HOME/.profile-->$HOME/.env(假如存在)
/etc/profile是所有用户的环境变量
/etc/enviroment是系统的环境变量
登录系统时shell读取的次序应当是
/etc/profile->/etc/enviroment-->$HOME/.profile-->$HOME/.env
缘由应当是jtw所说的用户环境和系统环境的区别了
假如同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值那应当是以用户环境为准了。---------------------本文来自碧空独云的CSDN博客,全文地址请点击:
本文原创地址://gulass.cn/hjblysdjmlxj.html编辑:刘遄,审核员:暂无