zoukankan      html  css  js  c++  java
  • 5、【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/bash.bashrc

      是针对所有用户的bash初始化文件,在此中设定的环境变量将应用于所有用户的shell中,此文件会在用户每次打开shell时执行一次。(即每次新开一个终端,都会执行/etc/bash.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则新建立一个)这里是推荐放置个人设置的地方(但是,我在Ubuntu的系统下,并没有发现这两个文件)。

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

    4.~/.pam_environment

      用户级的环境变量设置文件,没有做测试,不知道管不管用。(在Ubuntu系统下,同样没有看到这个文件)

    5.~/.bash_logout

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

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

    1. 在登录Linux时要执行文件的过程如下:

    在刚登录Linux时,

    首先启动 /etc/profile 文件,

    然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,用户主目录下文件的执行的顺序为:  

    1   ~/.bash_profile  ->  ~/.bash_login  ->  ~/.profile。

    如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

    因为在 ~/.bash_profile文件中一般会有下面的代码:

    1 if [ -f ~/.bashrc ] ; then
    2    . ./bashrc
    3 fi

    ~/.bashrc中,一般还会有以下代码:

    1 if [ -f /etc/bashrc ] ; then
    2    . /etc/bashrc
    3 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命令的话,变量就不可以被修改或清除了

  • 相关阅读:
    PHP加速器
    sublime text3-代码片段配置
    CI源码引用使用--php引用demo,静态变量和引用关系
    配置nginx1.7.8支持pathinfo模式
    php多线程即时通讯
    linux上配置subversion服务器端安装配置并使用svn,windows本地检出,设置同步更新服务器的钩子
    time返回当前的 Unix 时间戳而$_SERVER["REQUEST_TIME"]得到请求开始时的时间戳
    yum命令学习
    linux自定义开机启动服务
    闲与忙
  • 原文地址:https://www.cnblogs.com/Long-w/p/9680248.html
Copyright © 2011-2022 走看看