Linux环境变量是什么

什么是环境变量

学习或使用Linux的时候,修改环境变量是经常遇到的,到底什么是环境变量?环境变量是bash shell的特性,用来存储有关shell会话和工作环境的信息。允许在内存中存储数据,以便运行在shell上的程序和脚本访问。这些数据可以是用来识别用户、系统、Shell的特性以及任何其它需要存储的数据。

环境变量的分类

在bash shell中,环境变量分为两类:

  • 全局变量
  • 局部变量

全局环境变量

全局变量不仅对shell会话可见,对所有shell创建的子进程也可见。查看全局变量可以是用printenv命令。

$ printenv

HOSTNAME=localhost.localhostdomain

TERM=linux

SHELL=/bin/bash

HISTSIZE=1000

……

局部环境变量

局部环境变量只能在定义它们的进程中可见。查看局部环境变量有点复杂,不像全局环境变量那样可以使用一个命令来只显示局部环境变量。set命令可以显示为某个特定进程设置的环境变量,也包括全局环境变量。

$ set

BASH=/bin/bash

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath

BASH_ALIASES=()

BASH_ARGC=()

BASH_ARGV=()

BASH_CMDS=()

......

定位系统环境变量

Linux系统用环境变量来在程序和脚本中标识它自己。这为程序提供了获得系统信息的一个简便方法。

当登录linux系统启动一个bashshell时,默认情况下,bash会在几个文件中查找命令,这些文件被称作启动文件。bash检查的启动文件取决于启动bash shell的方式。启动bash shell有3种方式:

  • 登陆时当作默认登录shell
  • 作为非登录shell的交互式shell
  • 作为运行脚本的非交互式shell

登录shell

登录linux系统时,bashshell会作为登录shell启动。登录shell会从4个不同的启动文件里读取命令。下面是bash shell读取这些文件的顺序:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bash_login
  • $HOME/.profile

/etc/profile文件是系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行这个启动文件。另外3个启动文件是用户专有的,可以根据每个用户的需求具体定制。

/etc/profile

/etc/profile文件是bash shell的主启动文件。只要登录了Linux系统,bash就会执行/etc/profile文件中的命令。在这个文件中有一行:

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL

这保证了/etc/profile文件中的环境变量对这个登录shell创建的所有子进程都有效。

其中还有个for循环,会逐一访问位于/etc/profile.d目录的每个文件,为Linux系统提供了一个集中存放用户登录时要执行的应用专属的启动文件的地方。基本上都是跟系统上的特定应用有关。大部分应用会创建两个启动文件:一个是bash shell(使用.sh扩展名),一个是c shell(使用.csh扩展名)。比如判定系统上所采用的默认语言字符集,然后正确地设置LANG环境变量的文件有lang.sh和lang.csh。

$HOME目录下的启动文件

这三个文件都起着同一个左右:为用户提供一个专属的文件来定义用户专有的环境变量。大多数Linux发行版只用这3个文件中的一个:

  • $HOME/.bash_profile
  • $HOME/.bash_login
  • $HOME/.profile

这3个文件是以点开头的,说明是隐藏文件。它们在用户的HOME目录下。.bash_profile启动文件会先去检查HOME目录中是不是还有一个叫.bashrc的启动文件。如果有的话,启动文件会先去执行它里面的命令。

交互式shell

如果bash shell不是登录系统时启动的(比如,在命令行输入bash命令启动),启动的shell被称为交互式shell。

如果bash是作为交互式shell启动的,不会访问/etc/profile文件,而是会去HOME目录检查.bashrc是否存在。

.bashrc文件有两个作用:一是查看/etc目录下的共用bashrc文件,二是为用户提供一个定制自己命令别名和私有脚本函数的地方。

通用的/etc/bashrc启动文件会被系统上每个启动交互式shell会话的用户执行。但并没有实行export命令让它们成为全局环境变量。

交互式shell的启动文件只会在每次有新的交互式shell启动时才运行,因此任何子shell都会自动执行这个交互式shell的启动文件。

此外,/etc/bashrc也会执行位于/etc/profile.d目录下的哪些应用专属的启动文件。

非交互式shell

系统执行脚本是用的就是这种shell。不用担心没有命令行提示符,在系统上运行脚本时,仍要运行特定的启动命令。

为了处理这种情况,bashshell提供了BASH_ENV环境变量。当shell启动一个非交互式shell时,会检查这个环境变量来查看要执行的启动文件。如果有指定的,shell会执行文件里的命令。有的Linux发行版里,默认情况下这个环境变量并未设置。

时间: 2024-10-07 22:44:03

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[