linux环境变量 【转】

Linux 的变量可分为两类:环境变量和本地变量

环境变量,或者称为全局变量,存在与所有的shell 中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了。Linux 的环境变量具有继承性,即子shell 会继承父shell 的环境变量。

本地变量,当前shell 中的变量,很显然本地变量中肯定包含环境变量。Linux 的本地变量的非环境变量不具备继承性。

Linux 中环境变量的文件

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

1.    /etc/profile :

此文件为系统的环境变量,它为每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d 目录的配置文件中搜集shell 的设置。

这个文件,是任何用户登陆操作系统以后都会读取的文件(如果用户的shell 是csh 、tcsh 、zsh ,则不会读取此文件),用于获取系统的环境变量,只在登陆的时候读取一次。

假设用户使用的是BASH ,那么

2.    /etc/bashrc :

在执行完/etc/profile 内容之后,如果用户的SHELL 运行的是bash ,那么接着就会执行此文件。另外,当每次一个新的bash shell 被打开时, 该文件被读取。

每个使用bash 的用户在登陆以后执行完/etc/profile 中内容以后都会执行此文件,在新开一个bash 的时候也会执行此文件。因此,如果你想让每个使用bash 的用户每新开一个bash 和每次登陆都执行某些操作,或者给他们定义一些新的环境变量,就可以在这个里面设置。

3.    ~/.bash_profile :

每个用户都可使用该文件输入专用于自己使用的shell 信息。当用户登录时,该文件仅仅执行一次,默认情况下,它设置一些环境变量,执行用户的.bashrc 文件。

单个用户此文件的修改只会影响到他以后的每一次登陆系统。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么它在每次登陆的时候都会去获取这些新的环境变量或者做某些特殊的操作,但是仅仅在登陆时。

4.    ~/.bashrc :

该文件包含专用于单个人的bash shell 的bash 信息,当登录时以及每次打开一个新的shell 时, 该该文件被读取。

单个用户此文件的修改会影响到他以后的每一次登陆系统和每一次新开一个bash 。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么每次它新登陆系统或者新开一个bash ,都会去获取相应的特殊的环境变量和特殊操作。

~/.bash_logout :

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

几个命令

env 和printenv

这两个变量用于打印所有的环境 变量:

set

用于显示与设置当前本地 变量。单独一个set 就显示了当前环境的所有的变量,它肯定包括环境变量和一些非环境变量

unset

用于清除变量。不管这个变量是环境变量还是本地变量,它都可以清除。

-- 下面是清除本地变量

[[email protected] oracle]$ set|grep myname

myname=ilonng

[[email protected] oracle]$ unset myname

[[email protected] oracle]$ set|grep myname

-- 下面是清除环境变量

[[email protected] oracle]$ env|grep myname

myname=ilonng

[[email protected] oracle]$ unset myname

[[email protected] oracle]$ env|grep myname

export

用于把变量变成当前shell 和其子shell 的环境变量,存活期是当前的shell 及其子shell ,因此重新登陆以后,它所设定的环境变量就消失了。如何将环境变量永久化?修改上面介绍的那几个环境变量的配置文件

source

当直接执行一个脚本的时候,其实是在一个子shell 环境运行的,即开启了一个子shell 来执行这个脚本,脚本执行完后该子shell 自动退出。

有没有办法在当前shell 中执行一个脚本呢?使用source 命令就可以让脚本在当前shell 中执行。如:

[[email protected] NBU]$ cat test.sh    -- 查看脚本内容,显示变量内容

echo $myname

[[email protected] NBU]$ echo $myname -- 变量存在,内容是ilonng

ilonng

[[email protected] NBU]$ set |grep myname -- 变量是本地变量

myname=ilonng

[[email protected] NBU]$ env |grep myname -- 变量不是环境变量

[[email protected] NBU]$ sh test.sh -- 直接执行,新开子shell ,非环境变量的本地变量不具备继承性,在子shell 中不可见

-- 这里什么都没有输出

一、Shell变量分为本地变量和环境变量。 
1、本地变量 -- 在用户现有运行的脚本中使用 
1) 定义本地变量 格式: variable-name=value 
例子:[[email protected] /root]# LOCALTEST="test" 
[[email protected] /root]# echo $LOCALTEST test 
2) 显示本地变量 格式: set 
例子:[[email protected] root]# set 
3) 清除本地变量 格式:unset variable-name 
例如:[[email protected] /root]# unset LOCALTEST 
此时再执行echo $LOCALTEST将看不到变量LOCALTEST的输出。 
2、环境变量 -- 在所有的子进程中使用 
1) 定义环境变量 格式: export variable-name=value (与本地变量的定义相比,多了一个export关键字) 
例子:[[email protected] /root]# export DOMAIN="chinaitlab.com" 
[[email protected] chinaitlab shell]# vi testenv.sh 
#!/bin/bash 
echo $DOMAIN 
[[email protected] shell]# chmod +x testenv.sh 
[[email protected] shell]# ./testenv.sh 
chinaitlab.com 
2) 显示环境变量 格式: env (本地变量的显示使用set,环境变量的显示使用env) 
例子: [[email protected] test]# env 
3) 清除环境变量 格式:unset variable-name (用法与本地变量相同,都使用unset) 
例子: [[email protected] shell]# unset DOMAIN 
此时再执行./testenv.sh将看不到变量DOMAIN的输出。

---------------------------------------------------------------------------------------------------------------------

用户登录后加载profile和bashrc的流程如下: 
1)/etc/profile-------->/etc/profile.d/*.sh 
2)$HOME/.bash_profile-------->$HOME/.bashrc---------->/etc/bashrc 
说明: 
bash首先执行/etc/profile脚本,/etc/profile脚本先依次执行/etc/profile.d/*.sh 
随后bash会执行用户主目录下的.bash_profile脚本,.bash_profile脚本会执行用户主目录下的.bashrc脚本, 
而.bashrc脚本会执行/etc/bashrc脚本 
至此,所有的环境变量和初始化设定都已经加载完成. 
bash随后调用terminfo和inputrc,完成终端属性和键盘映射的设定. 
其中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脚本中,做了如下的配置: 
if [ `id -u` = 0 ]; then 
pathmunge /sbin 
pathmunge /usr/sbin 
pathmunge /usr/local/sbin 
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

----------------------------------------------------------------------------------------------------------------------------------

~/.bash_profile  用户登录时被读取,其中包含的命令被执行

~/.bashrc  启动新的shell时被读取,并执行

~/.bash_logout  shell 登录退出时被读取

时间: 2024-10-07 02:40:36

linux环境变量 【转】的相关文章

Linux环境变量的设置和查看方法

1. 显示环境变量HOME $ echo $HOME /home/redbooks 2. 设置一个新的环境变量hello $ export HELLO="Hello!" $ echo $HELLO Hello! 3. 使用env命令显示所有的环境变量 $ env HOSTNAME=redbooks.safe.org ... 4. 使用set命令显示所有本地定义的Shell变量 $ set BASH=/bin/bash BASH_VERSINFO=([0]="2"[1

Linux环境变量的修改(永久,暂时)

Linux修改环境变量,很简单但很重要 一.Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1. 永久的:需要修改配置文件,变量永久生效. 2. 临时的:使用export命令行声明即可,变量在关闭shell时失效. 二.设置变量的三种方法 1. 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”. 例如:编辑/etc/profile文件,添加CL

Linux 环境变量 $PATH

我们知道查阅文件属性的指令 ls 完整文件名为:/bin/ls(这是绝对路径),那为什么可以在任何地方执行/bin/ls 这个指令呢?  为什么在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH ! 当我们在执行一个指令的时候,比如ls,系统会依照 PATH 的每个 PATH 定义的目录下搜寻文件名为 ls 的可执行文件, 如果在 PATH 定义的目录中含有多个文件名为 ls 的可执行文件,那么先搜寻到的同名指令先被执行! ec

Linux环境变量PS1配置

1. 说明: 在Shell下,我们可以拥有更加色惨斑斓的提示行信息,这可以通过改变bash的$PS1环境变量还设置,如下面就是提示行的一种: [email protected]$ root用户的提示是这样的: user$host# 2.  提示行的转义字符: Java代码   序列         说明 \a            ASCII 响铃字符(也可以键入 \007) \d            "Wed Sep 06" 格式的日期 \e            ASCII 转义

Linux环境变量配置介绍及实战

一.环境变量文件介绍 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量.所以管理环境变量的文件也分为系统级和用户级的,下面贴一个网上找到的讲的比较明白的文件介绍(略作修改)[1]: 1.系统级:(1)/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户.该文件一般是调用/etc/bash.bashrc文件./etc/bash.bash

linux环境变量介绍

一 linux环境变量概念的重要性 最初用linux是为了学习机器人操作系统(ros),由于之前没有接触过linux,所以并不了解其中的一些关键概念,导致走了许多弯路,如在ros的安装过程中,没有理解安装教程中的1.6 环境变量建立中的指令的意义,所以导致有时在自己工作空间建立的包会有找不到的情况.因此,本文结合ros安装教程中的部分指令,重点介绍linux环境变量的概念及应用. 二 环境变量的概念 环境变量,就是描述环境的变量.环境就是与shell相关的会话和工作环境,变量就是可变的量. 三

Linux环境变量目录

学嵌入式的时候,神烦那些教程各种不收规矩,例如教你用超级登录,或者在你的根目录下建立各种文件或目录,还有环境变量各种乱设.而本文就是针对最后一个问题. 在Linux家目录下的.bashrc文件可以个性化各种环境变量,但是每个性化一个环境变量如果想要删除或修改挺苦恼的,受到Linux环境下各种点d文件夹的启发(.d)所以就有了.bashrc.d目录.至于各种配置文件,例如bashrc.profile等的区别,网上有很多详细的描述,这里就不赘述了. .bashrc.d目录的作用是,参考ubuntu下

Linux环境变量中PS1

Linux环境变量中PS1是很重要的环境变量: PS(Prompt Sign): 是指命令提示符,例如在Fedora 12的终端下:[[email protected] ~]$ ,在设定PS1环境变量时,我们需要用到预设的一些特殊符号来设定PS1,下面是鸟哥书上关于BASH的特殊变量. o \d :代表日期,格式为 Weekday Month Date,例如 "Mon Aug 1" o \H :完整的主机名称.举例来说,鸟哥的练习机 linux.dmtsai.tw ,那么这个主机名称就

linux 环境变量设置方法总结(PATH/LD_LIBRARY_PATH)

http://blog.csdn.net/wangeen/article/details/8159500 设置 Linux 的 LD_LIBRARY_PATH 变量 http://www.cnblogs.com/trying/archive/2013/06/07/3123577.html LD_LIBRARY_PATH环境变量的设置 http://james23dier.iteye.com/blog/763274 程序运行时出现“cannot open shared object file”问题

Linux环境变量操作函数

1. extern char **environ;全局变量 Linux环境变量的所有值都存放在这个全局变量里面 举例说明:打印出所有的环境变量 #include <stdio.h> #include <stdlib.h> extern char **environ; //导入这个全局变量 int main(int argc, char* agrv[]){ int i; for(i=0;environ[i];i++){ printf("%s\n",environ[