linux环境加载_linux 加载用户环境 - CSDN
  • 前言: 1. 环境变量是操作系统环境设置的变量,适用于整个系统的用户进程; 2. 环境变量可以在命令中设置,但是用户注销的时候将会丢失这些设置值;...Linux环境变量包括系统级和用户级,系统级的环境变量是每

    前言

    1. 环境变量是操作系统环境设置的变量,适用于整个系统的用户进程;

    2. 环境变量可以在命令中设置,但是用户注销的时候将会丢失这些设置值;

    3. 若要重复适用,则最好在.profile中定义;环境变量的使用与本地变量的使用方法相同,

    4. 但是在使用之前,必须用export命令导出。


    一、环境变量文件介绍  

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量,所以管理环境变量的文件也分为系统级和用户级的。

    二、Linux的变量种类

    按变量的生存周期来划分,Linux变量可分为两类:

    1.永久的:需要修改配置文件,变量永久生效

    2.临时的:使用export命令声明即可,变量在关闭shell时失效

    三、Linux 环境变量文件

    linux变量文件有/etc/environment 或 /etc/profile 或 ~/.profile 或 /etc/bash.bashrc 或 ~/.bashrc, 以及~/.bash_profile(一般是用户在自己目录下新建的),~/.bash_logout.

    系统级:

    1./etc/environment:是系统在登录时读取的第一个文件,该文件设置的是整个系统的环境,只要启动系统就会读取该文件,用于为所有进程设置环境变量。系统使用此文件时并不是执行此文件中的命令,而是根据而是根据KEY=VALUE模式的代码,对KEY赋值以VALUE,因此文件中如果要定义PATH环境变量,只需加入一行形如 PATH=$PATH:/xxx/bin的代码即可

    2./etc/profile:此文件是系统登录时执行的第二个文件。 为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。(/etc/profile可以用于设定针对全系统所有用户的环境变量,环境变量周期是永久性)

    3. /etc/bashrc:是针对所有用户的bash初始化文件,在此中设定的环境变量将应用于所有用户的shell中,此文件会在用户每次打开shell时执行一次。(即每次新开一个终端,都会执行/etc/bashrc)。

    用户级(这些文件处于家目录下):

    1. ~/.profile:对应当前登录用户的profile文件,用于定制当前用户的个人工作环境(变量是永久性),每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。这里是推荐放置个人设置的地方

    2.~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。(~/.bashrc只针对当前用户,变量的生命周期是永久的)

    不推荐放到这儿,因为每开一个shell,这个文件会读取一次,效率肯定有影响。

    3.~/.bash_profile or ~./bash_login:~/.bash_profile是交互式login 方式进入 bash 运行的,~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。默认情况下,他设置一些环境变量,执行用户的.bashrc文件。(如果~/目录下没有.bash_profile则新建立一个)这里是推荐放置个人设置的地方

    当一个shell关闭时,在bash_profile中定义的系统变量则会失效。因此,每打开一个新的shell时都要运行一次source bash_profile.而且针对当前用户。

    4.~/.pam_environment:用户级的环境变量设置文件,没有做测试,不知道管不管用。

    5.~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。

    四、Linux 环境变量文件执行顺序

    1. 在登录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
       . /etc/bashrc
    fi

    所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。

    执行顺序为: /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout

    /etc/profile和/etc/environment等各种环境变量设置文件的用处

    1)先将export LANG=zh_CN加入/etc/profile,退出系统重新登录,登录提示显示英文。

    2)先将/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/.profile>HOME/.env (如果存在)

    /etc/profile 是所有用户的环境变量

    /etc/enviroment是系统的环境变量

    登陆系统时shell读取的顺序应该是:

    /etc/profile ->/etc/enviroment -->HOME/.profile−−>HOME/.env

    原因应该是用户环境和系统环境的区别了,如果同一个变量在用户环境(/etc/profile)和系统环境(/etc/environment)有不同的值,那应该是以用户环境为准了。

    五、Linux中常见的环境变量及其作用

    Linux中常见的环境变量有:

    1.PATH:指定命令的搜索路径

    2.HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

    3.HISTSIZE:指保存历史命令记录的条数。

    4.LOGNAME:指当前用户的登录名。

    5.HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。

    6.SHELL:指当前用户用的是哪种Shell。

    7.LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。

    8.MAIL:指当前用户的邮件存放目录。

    9.PS1:命令基本提示符,对于root用户是#,对于普通用户是$。

    10.PS2:附属提示符,默认是“>”。

    备注:可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,MyNewPrompt ”。

      # PS1="Hello,My NewPrompt"

    注意:上述变量的名字并不固定,如HOSTNAME在某些Linux系统中可能设置成HOST

    当然,我所列举的上述环境变量并非穷尽列出!

    Linux也提供了修改和查看环境变量的命令!下面通过几个实例来说明:

    1.echo 显示某个环境变量值 echo $PATH

    2.export 设置一个新的环境变量 export HELLO="hello" (可以无引号),在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。

    3.env 显示所有环境变量

    4.set 显示本地定义(系统中已经存在)的shell变量以及设置shell变量的新变量值,如果未指定值,则该变量值将被设为NULL。

    5.unset 清除环境变量 unset HELLO

    6.readonly 设置只读环境变量 readonly HELLO ,如果使用了readonly命令的话,变量就不可以被修改或清除了



    展开全文
  • linux 加载环境变量

    2013-12-11 10:03:08
    1 +++++在主目录下添加环境变量的路径++++ 方法一: 1>在主目录下vi .profile 2>添加要添加的环境变量的路径 如: 3> 设置完成后还要source 一下; 4> 执行source ~/.profile 方法二: ...
    1 +++++在主目录下添加环境变量的路径++++

    方法一:
    1>在主目录下vi .profile
    2>添加要添加的环境变量的路径 如:

    3> 设置完成后还要source 一下;
    4> 执行source   ~/.profile


    方法二:
    1>在主目录下vi ~/.bashrc
    2>添加要添加的环境变量的路径 如:
    3> 执行source   ~/.bashrc


    注意:用这两种方法的好处就是可以在自己用户创建环境变量不影响其他的用户。

    2 +++++在根目录下添加环境变量的路径++++

    方法一:
    1>在根目录下vi /etc/profile
    2>添加要添加的环境变量的路径 如:

    3> 执行source   /etc/profile

    方法二:

    1>在根目录下vi /etc/bash.bashrc
    2>添加要添加的环境变量的路径 如:
    PATH=$PATH:/home/xyz/wcc/android-ndk-rc
    3> 执行source   /etc/bash.bashrc

    注意:用这种两种方法加载的环境变量会使所有用户的环境变量都改变,会牵涉其他用户的环境变量。

    *****最用加载环境变量后用echo $PATH  查看自己加载的环境变量是否存在。
    展开全文
  • Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。  系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量  用户级环境变量:每一个登录到系统的用户只...

    在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。

                系统级环境变量:每一个登录到系统的用户都能够读取到系统级的环境变量
                用户级环境变量:每一个登录到系统的用户只能够读取属于自己的用户级的环境变量 

    自然而然地,环境变量的配置文件也相应的被分成了系统级和用户级两种。

    系统级

    /etc/profile

    在系统启动后第一个用户登录时运行,并从/etc/profile.d目录的配置文件中搜集shell的设置,使用该文件配置的环境变量将应用于登录到系统的每一个用户。

     提示:在Linux系统中,使用以下命令可以使配置文件立刻生效。

    source /etc/profile
    echo $PATH

    /etc/bashrc(Ubuntu和Debian中是/etc/bash.bashrc)

    在 bash shell 打开时运行,修改该文件配置的环境变量将会影响所有用户使用的bash shell。

    注意:这里的bash shell有不同的类别,不同的类别所使用的环境变量配置文件也有所不同。一般情况下,非登录shell不会执行任何profile文件,非交互shell模式不会执行任何bashrc文件。

    # 登录shell和非登陆shell:
    登录shell # 需要输入用户密码,例如 ssh 登录或者 su - 命令提权都会启动login shell模式
    非登陆shell # 无需输入用户密码;
    
    # 交互shell和非交互shell:
    交互shell # 提供命令提示符等待用户输入命令的是交互shell模式
    非交互shell # 直接运行脚本文件是非交互shell模式

    /etc/environment

    在系统启动时运行,用于配置与系统运行相关但与用户无关的环境变量,修改该文件配置的环境变量将影响全局。

    用户级

    ~/.profile(推荐首选)

    当用户登录时执行,每个用户都可以使用该文件来配置专属于自己使用的shell信息。

    ~/.bashrc

    当用户登录时以及每次打开新的shell时该文件都将被读取,不推荐在这里配置用户专用的环境变量,因为每开一个shell,该文件都会被读取一次,效率肯定受影响。

    ~/.bash_profile 或 ~./bash_login

    ~/.bash_profile or ~./bash_login - If one of these file exist, bash executes it rather then "~/.profile" 
    when it is started as a login shell. (Bash will prefer "~/.bash_profile" to "~/.bash_login"). 
    However, these files won't influence a graphical session by default.

    以上是ubuntu官网给出的关于~/.bash_profile 和 ~./bash_login 的说明,翻译为中文:

    ~/.bash_profile 或 ~./bash_login - 
    如果有其中的一个文件存在的话, 当启动的是一个 登录shell时,Bash 会执行该文件而不会执行~/.profile ;
    如果两个文件都存在的话,Bash 将会优先执行~/.bash_profile 而不是~/.bash_login ; 
    然而, 默认情况下,这些文件不会影响图形会话。

    ~/.bash_logout

    当每次退出系统(退出bash shell)时执行该文件。

    注意:Linux系统使用 $VARIABLE_NAME 访问环境变量,多个环境变量之间使用 : 分隔,Windows系统使用 %VARIABLE_NAME% 访问环境变量,多个环境变量之间使用 ; 分隔。

    一般情况下,Linux加载环境变量配置文件的执行顺序为:

    ==> /etc/profile
    ==> ~/.bash_profile | ~/.bash_login | ~/.profile
    ==> ~/.bashrc
    ==> /etc/bashrc
    ==> ~/.bash_logout

     

    展开全文
  • Linus/Unix环境使用使用加载Spring配置文件失败。

    问题描述:

    最近在将项目部署到Linux环境下时,出现了加载spring.xml配置文件失败的问题,出错代码:

    // Env.SPRING_PATH = /home/is/server/conf/spring.xml
    springContext = new FileSystemXmlApplicationContext(Env.SPRING_PATH);

    异常信息:

    org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [/home/is/server/lib/home/is/server/conf/spring.xml]; nested exception is java.io.FileNotFoundException: home/is/server/conf/spring.xml (No such file or directory)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:344)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:613)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:514)
    	at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
    	at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
    	at com.is.Initializer.init(Initializer.java:36)
    	at com.is.launcher.App.main(App.java:44)
    Caused by: java.io.FileNotFoundException: home/is/server/conf/spring.xml (No such file or directory)
    	at java.io.FileInputStream.open0(Native Method)
    	at java.io.FileInputStream.open(FileInputStream.java:195)
    	at java.io.FileInputStream.<init>(FileInputStream.java:138)
    	at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:114)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)
    	... 19 more

    看异常,意思是说找不到 /home/is/server/lib/home/is/server/conf/spring.xml 这个文件,但实际上传入的文件路径是“/home/is/server/conf/spring.xml”,那为什么spring中该文件路径会发生变化呢?而且报错的路径是home/is/server/conf/spring.xml (注意:这里没有了“/”)。


    说明:

    异常消息中,前面的路径“/home/is/server/lib”实际上是当前运行程序的路径,如果切换到其它目录则会变成相应路径。


    看FileSystemXmlApplicationContext类代码发现:

    @Override
    	protected Resource getResourceByPath(String path) {
    		if (path != null && path.startsWith("/")) {
    			path = path.substring(1);
    		}
    		return new FileSystemResource(path);
    	}

    该方法在获取资源时,会判断是否以“/”开头,如果是,则剥掉,导致Spring后续加载文件时使用的是不带“/”的文件路径,从而导致加载失败。


    Why?

    来看下getResourceByPath(String)方法的注释说明:

    Resource org.springframework.context.support.FileSystemXmlApplicationContext.getResourceByPath(String path)
    
    Resolve resource paths as file system paths. 
    
    Note: Even if a given path starts with a slash, it will get interpreted as relative to the current VM working directory. This is consistent with the semantics in a Servlet container.
    
    


    大意:

    注:即使给定的路径以斜线开始,它将会被解释为相对当前VM工作目录。这与servlet容器中的语义相一致。

    应该就是为了和JavaWeb开发时的环境、用法保持一致吧。


    解决方法:

    继承FileSystemXmlApplicationContext,重写getResourceByPath(String)方法,如下:

    springContext = new FileSystemXmlApplicationContext(Env.SPRING_PATH) {
                @Override
                protected Resource getResourceByPath(String path) {
                    if (path != null && path.startsWith("/")) {
                        // 忽略如下代码,使其在Linux环境能正常解析文件路径
                        // path = path.substring(1);
                    }
                    return new FileSystemResource(path);
                }
            };


    OK,修改后可使用指定路径加载了!

    展开全文
  • Linux内核加载过程

    2015-10-19 09:13:27
    Linux内核大致加载过程: 第一步--加载BIOS 稍有计算机基础的人都应该听过BIOS(Basic Input/Output System),可以看做是记录在ROM中的软件。也都清楚系统加电会执行BIOS中的程序,这种机能是如何实现的呢?看下图...
  • 1.environmentexport JAVA_HOME=/usr/java/j2sdk1.4.2_01 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:...修改所有用户的环境变量# vi /etc/profile 在该文件中加入: export
  • Linux程序加载过程

    2016-08-13 19:19:12
    其中,代码、数据、BSS的内容是可执行文件中对应的内容,加载程序并不是把它们的内容从可执行程序中填充到内存中,而是将它们的信息(基地址、长度等)更新到进程控制块(task_struct)中,当CPU第 一次实际寻址执行...
  • 环境:windows7 + ubuntu双系统, 用wubi装的linux问题:默认打开linux, 不加载win7的硬盘;1. GUI下倒是方便, 设备里点一下就可以加载上, 但是远程的时候点击显示“无法加载硬盘 Not Authorized”2. 命令行下...
  • ②使用登录式的交互式shell,系统如何加载环境变量(重点) ③如何去设置变量     前言: 为什么要学习环境变量 &gt;&gt;&gt;系统中有很多默认的环境变量,很多脚本和程序依赖于这些环境变量, ...
  • linux 刷新环境变量

    2017-11-17 11:27:33
    linux 刷新环境变量
  • 前一段时间开发了一个linux下的PCI数据采集板卡的驱动,在驱动调试时,一直使用insmod 动态的加载驱动模块(ko文件). 现在驱动基本开发结束,要提交给客户,使用insmod加载时,对客户来说不太好,比较麻烦,所以不能...
  • 本文主要介绍Linux系统上程序部署时,无法加载SO文件问题解决方案(作者:李栓鹏)。 Linux程序安装部署运行方式与我们熟知的Windows程序有很大的不同: 在Windows上,一般EXE程序加载DLL的路径顺序是:首先是当前...
  • logback 区分环境加载

    2018-06-26 15:28:18
    有时候我们有需要根据不同的环境加载不同的appender,这个时候就需要用到。 直接上代码吧: &amp;lt;springProfile name=&quot;prod&quot;&amp;gt; &amp;lt;root&amp;gt; &amp;lt;
  • 一、Linux 动态库选择顺序指: 1. 编译程序时用到动态库,该从那些地方查找,按照怎么样的顺序查找? 2. 运行程序时需要动态库,该从那些地方查找,按照怎么样的顺序查找? 二、gcc 编译程序时查找SO顺序如下: ...
  • Linux环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载环境变量,所以管理环境变量的文件也分为系统级和用户级的。...
  • Linux提供了一种动态加载内核的机制,这种机制称为模块(Module),模块具有以下下特点: 1、模块本身不被编译入内核映像,从而控制了内核的大小。 2、模块一旦被加载,它就和内核中的其它部分完全一样。 为了方便理解...
  • linux环境变量定义了用户的操作环境,主要的参数设置在下面配置文件 用户正常登录后会以下面过程加载环境变量配置文件: /etc/profile-&gt;~/.bash_profile-&gt;~/.bashrc-&gt;/etc/bashrc 1.cat /etc/...
  • Linux之so加载原理分析

    2015-11-30 23:46:06
    本文首先回顾了链接器和装入器的基本工作原理及这一技术的发展历史,然后通过实际的例子剖析了Linux系统下动态链接的实现。了解底层关键技术的实现细节对系统分析和设计人员无疑是必须的,尤其当我们在面对实时系统...
  • vmlinux其实也是一个elf格式文件,它和普通elf是有些区别的。 linux下可执行程序格式是elf的。 elf格式的文件中有一个Program Headers,这个数据结构告诉 程序加载器,应该如何把 这个elf文件加载到虚拟地址空间...
  • Linux添加环境变量

    2019-06-03 15:05:41
    linux添加环境变量分为两种情况: 临时变量,指当shell窗口关闭时变量失效,通过export命令添加 全局生效,修改/etc/profile文件,这样环境变量全局生效且不会因窗口的关闭而失效。 1.查看当前环境变量 echo $PATH...
1 2 3 4 5 ... 20
收藏数 239,001
精华内容 95,600
关键字:

linux环境加载