[关闭]
@natsumi 2015-03-20T17:21:12.000000Z 字数 3784 阅读 2008

「转载+整合」学习:Linux环境变量

Linux


参考:
http://www.cnblogs.com/Neddy/archive/2011/03/01/1968018.html
http://www.cnblogs.com/growup/archive/2011/07/02/2096142.html
http://www.eefocus.com/sunboyu/blog/07-03/1385_8815c.html

1. Linux的变量分两类

1.1 环境变量(全局变量)

1.1 本地变量

2. 环境变量文件

当你进入系统的时候,linux就会为你读入系统的环境变量。
这些环境变量存放在什么地方,那就是环境变量的文件中。
Linux中有很多记载环境变量的文件,它们被系统读入是按照一定的顺序的。

2.1 /etc/profile

2.2 /etc/bashrc (假设用户使用的是BASH)

2.3 ~/.bash_profile

2.4 ~/.bashrc

2.5 ~/.bash_logout

2.6 流程总结

用户登录后加载profile和bashrc的流程:

  1. /etc/profile-->/etc/profile.d/*.sh
  2. $HOME/.bash_profile-->$HOME/.bashrc-->/etc/bashrc

P.S. 其中PATH这个变量特殊说明:

  • 如果是超级用户登录,在没有执行/etc/profile之前,PATH已经设定了下面的路径:
    /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  • 如果是普通用户,PATH在/etc/profile执行之前设定了以下的路径:
    /usr/local/bin:/bin:/usr/bin
  • 这里要注意的是:在用户切换并加载变量,例如su -,这时,如果用户自己切换自己,比如root用户再用su - root切换的话,加载的PATH和上面的不一样。准确的说,是不总是一样。所以,在/etc/profile脚本中,做了如下的配置:
  1. if [ `id -u` = 0 ]; then
  2. pathmunge /sbin
  3. pathmunge /usr/sbin
  4. pathmunge /usr/local/sbin
  5. fi
  • 如果是超级用户登录,在/etc/profile.d/krb5.sh脚本中,在PATH变量搜索路径的最前面增加/usr/kerberos/sbin:/usr/kerberos/bin
  • 如果是普通用户登录,在/etc/profile.d/krb5.sh脚本中,在PATH变量搜索路径的最前面增加/usr/kerberos/bin
  • /etc/profile脚本中,会在PATH变量的最后增加/usr/X11R6/bin目录
  • $HOME/.bash_profile中,会在PATH变量的最后增加$HOME/bin目录
  • 以root用户为例,最终的PATH会是这样(没有其它自定义的基础上)
    /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
  • 以alice用户(普通用户)为例
    /usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/alice/bin

3. 相关的命令

3.1 环境变量

  1. [root@chinaitlab /root]# export DOMAIN="chinaitlab.com"
  2. [root@ chinaitlab shell]# vi testenv.sh
  3. #!/bin/bash
  4. echo $DOMAIN
  5. [root@chinaitlab shell]# chmod +x testenv.sh
  6. [root@chinaitlab shell]# ./testenv.sh
  7. chinaitlab.com

3.2 本地变量

  1. [oracle@devdb1 oracle]$ set|grep myname
  2. myname=ilonng
  3. [oracle@devdb1 oracle]$ unset myname
  4. [oracle@devdb1 oracle]$ set|grep myname
  1. [oracle@devdb1 oracle]$ env|grep myname
  2. myname=ilonng
  3. [oracle@devdb1 oracle]$ unset myname
  4. [oracle@devdb1 oracle]$ env|grep myname
  1. [root@jike1 /root]# LOCALTEST="test"
  2. [root@jike1 /root]# echo $LOCALTEST test
  1. [oracle@dbamonitor NBU]$ cat test.sh -- 查看脚本内容,显示变量内容
  2. echo $myname
  3. [oracle@dbamonitor NBU]$ echo $myname -- 变量存在,内容是ilonng
  4. ilonng
  5. [oracle@dbamonitor NBU]$ set |grep myname -- 变量是本地变量
  6. myname=ilonng
  7. [oracle@dbamonitor NBU]$ env |grep myname -- 变量不是环境变量
  8. [oracle@dbamonitor NBU]$ sh test.sh -- 直接执行,新开子shell ,非环境变量的本地变量不具备继承性,在子shell中不可见
  9. -- 这里什么都没有输出
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注