分享

环境变量etc中environmentenvprofile设置及区别

 Moteme 2011-05-17

(转载自http://hi.baidu.com/bazhaohua/blog/item/94bdd02e014833341e308974.html,http://blog.csdn.net/adparking/archive/2010/06/29/5701764.aspx,纯粹为学习而整理)

经过我查看资料以后我发现我的environment里面设置了三个变量path,classpath,和javahome。那么系统总是先启动environment在查看profile那么,我在这里添加的就要照应environment的变量了,javahome不用设定了,两个文件是一样的,那么其他的不是很全要设定一下。为什么不在environment里面全部设定完毕呢?应为他是系统的,设定很多没必要,可能还会引发启动问题,起不了机器呢,一般不要改。但是又不能总是一打开及其就export path=“……”,很麻烦,那么就在系统自动调用proflie时设置把。需要重新启动系统才能生效。在shell中查看env,直接设置path然后再查看发现变了,但是关了这个shell在打开一个还是原来那样。所以阿,env只是对当前shell有效,启动shell他会查看usr/bin/env。但是只限于shell.如果在profile中写了export语句他就会自动设置给env,那么我们打开哪个shell他们的env也就是PATH……值也都是一样的。在profile里设置环境变量是在etc/environment的前提下添加的

#/etc/environment(系统环境)中的:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/jdk1.6.0_18/bin"
CLASSPATH=.:/usr/lib/jvm/jdk1.6.0_18/lib
JAVA_HOME=/usr/lib/jvm/jdk1.6.0_18


#/etc/profile(用户环境)中的:
export PATH=$PATH:$JRE_HOME/bin
export CLASSPATH=$CLASSPATH:/usr/lib/jvm/jdk1.6.0_18/jre/lib
export JRE_HOME=/usr/lib/jvm/jdk1.6.0_18/jre
export CATALINA_HOME="/usr/local/tomcat"

#env(用户环境,全部信息)中的:
CLASSPATH=.:/usr/lib/jvm/jdk1.6.0_18/lib:/usr/lib/jvm/jdk1.6.0_18/jre/lib
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/jdk1.6.0_18/bin:/usr/lib/jvm/jdk1.6.0_18/jre/bin
JAVA_HOME=/usr/lib/jvm/jdk1.6.0_18
JRE_HOME=/usr/lib/jvm/jdk1.6.0_18/jre
CATALINA_HOME=/usr/local/tomcat

 

将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=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_CN,则提示信息是中文的,否则是英文的。
对于用户的SHELL初始化而言是先执行/etc/profile, 再读取文件/etc/environment.

对整个系统而言是先执行/etc/environment。这样理解正确吗
/etc/enviroment --> /etc/profile --> $HOME/.pro

file -->$HOME/.env (如果存在)
/etc/profile 是所有用户的环境变量
/etc/enviroment是系统的环境变量
登陆系统时shell读取的顺序应该是
/etc/profile ->/etc/enviroment -->$HOME/.profile -->$HOME/.env
原因应该是jtw所说的用户环境和系统环境的区别了
如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment) 有不同的值那应该是以用户环境为准了。
(1)/etc/profile: 此文件为系统的每个用户 设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc /bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己 使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你 的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关 系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
通过比较最后发现,在ubuntu下配置java运行环境时,所做的设置代表的意义了。
$ sudo vim /etc/profile
在文件最后添加
#set java environment
JAVA_HOME=/opt/jdk1.6.0_07
export JRE_HOME=/opt/jdk1.6.0_07/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
最后wq!

备注:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该此登陆操作。
###################################################################

在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.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.登录shell
  所谓登录shell,指的是当用户登录系统时所取的那个   shell。登录shell属于交互式shell。

 登录shell将查找4个不同的启动文件来处理其中的命令。 bash shell处理文件的顺序如下:
 1: /etc/profile

 2:/etc/profile.d等待配置文件

 3: $HOME/.bash_profile

 4: $HOME/.bash_login
 5 $HOME/.profile
  /etc /profile是bash shell在系统上的主默认启动文 件,系统上 每一个用户在登陆时都将执行此文件。
 通过设置这个文件,
 超级用户可以为全系统内的所有bash用户建立默认特征。不同 Linux版本在此文件放置的命令不尽相同,
 在redflag中,该文件设置了几个重要的变量,
 如:PATH USER LOGNAME MAIL HOSTNAME HISTSIZE  INPUTRC,详情可以查看具体的文件。

 其余3个文件具备相同的功能——提供特定于用户的启动文件。大多 数Linux版本只使用其中之一。如:RedFlag使用.bash_profile   ubuntu使用.profile .
 shell 依次查找~/.bash_profile、
 ~/.bash_login、
 ~/.profile(~是用户主目录的速记符),
 并执行它找到的首个文件中的命令。
 可以将命令放置在这些文件中以覆盖掉/etc /profile文件中的默认设置。
 也就是后面的文件可以覆盖或者修改前面的设置
 2. 交互式非登录shell
 如果启动了一个bash shell而没有等录系统(如在CLI提示符中键入bash),
 则启动了一个交互式非登录shell.
 而登录shell的初始化文件(比如.bash_profile)通常会运行这个文件。这样,登录shell和非登录shell都可以使用.bashrc中的命令。
 如以X Window环境登录Linux时,在X环境所起动的终端,那些shell都是非登录shell.
 在交互式非登录shell中并不执行前面提到的初始化文件中的命令。然而,交互式非登录shell从登录shell继承了由这些初始化文件设置的 shell变量。
 (1) $HOME/.bashrc
 交互式非登录shell执行~/.bashrc文件中的命令.在每次执行shell脚本时,都会重新读取这个文件,所以是最完整的。
 但是万事都不是一样的,debain系列的是不同的,如ubuntu
 /etc/profile-->/etc/environment-->$HOME/.profile
Ubuntu Linux系统环境变量配置文件介绍在Ubuntu中有如下几个文件可以设置环境变量
/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
/etc /environment:在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量。
~/.profile: 在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多