简介
环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序将使用到的信息。Linux是一个多用户的操作系统,每个用户登录系统时都会有一个专用的运行环境,通常情况下每个用户的默认的环境都是相同的。这个默认环境就是一组环境变量的定义。每个用户都可以通过修改环境变量的方式对自己的运行环境进行配置。
分类
根据环境变量的生命周期我们可以将其分为永久性变量和临时性变量,根据用户等级的不同又可以将其分为系统级变量和用户级变量。怎么分都无所谓,主要是对它的理解。
对所有用户生效的永久性变量(系统级)
这类变量对系统内的所有用户都生效,所有用户都可以使用这类变量。作用范围是整个系统。
设置方式: 用vim在/etc/profile文件中添加我们想要的环境变量。
当然,这个文件只有在root(超级用户)下才能修改。我们可以在etc目录下使用ls -l查看这个文件的用户及权限。
利用vim打开/etc/ profile文件,用export指令添加环境变量。
【注意】:添加完成后新的环境变量不会立即生效,除非你调用source /etc/profile 该文件才会生效。否则只能在下次重进此用户时才能生效。
对单一用户生效的永久性变量(用户级)
该类环境变量只对当前的用户永久生效。也就是说假如用户A设置了此类环境变量,这个环境变量只有A可以使用。而对于其他的B,C,D,E….用户等等,这个变量是不存在的。
设置方法:在用户主目录”~”下的隐藏文件 “.bash_profile”中添加自己想要的环境变量。
查看隐藏文件: ls -a或ls -al
利用vim打开文件,利用export添加环境变量。与上相同。同样注意,添加完成后新的环境变量不会立即生效,除非你调用source ./.bash_profile 该文件才会生效。否则只能在下次重进此用户时才能生效。
可以看到我在上图中用红框框住了两个文件,.bashrc和.bash_profile。原则上来说设置此类环境变量时在这两个文件任意一个里面添加都是可以的。
~/.bash_profile是交互式login方式进入bash shell运行。
~/ .bashrc是交互式non-login方式进入bash shell运行。
二者设置大致相同。通俗点说,就是.bash_profile文件只会在用户登录的时候读取一次,而.bashrc在每次打开终端进行一次新的会话时都会读取。
临时有效的环境变量(只对当前shell有效)
此类环境变量只对当前的shell有效。当我们退出登录或者关闭终端再重新打开时,这个环境变量就会消失。是临时的。
设置方法:直接使用export指令添加。
设置环境变量常用的几个指令
echo
查看显示环境变量,使用时要加上符号“”例:echoPATH
export
设置新的环境变量
export 新环境变量名=内容
例:export MYNAME=”LLZZ”
修改环境变量
修改环境变量没有指令,可以直接使用环境变量名进行修改。
例:MYNAME=”ZZLL”
env
查看所有环境变量
set
查看本地定义的所有shell变量
unset
删除一个环境变量
例 unset MYNAME
readonly
设置只读环境变量。
例:readonly MYNAME
常用的几个环境变量(一般都为大写)
PATH
指定命令的搜索路径。通过设置环境变量PATH可以让我们运行程序或指令更加方便。
echo $PATH 查看环境变量PATH。
每一个冒号都是一个路径,这些搜索路径都是一些可以找到可执行程序的目录列表。当我们输入一个指令时,shell会先检查命令是否是内部命令,不是的话会再检查这个命令是否是一个应用程序。然后shell会试着从这些搜索路径,即PATH(上图中路径)中寻找这些应用程序。如果shell在这些路径目录里没有找到可执行文件。则会报错。若找到,shell内部命令或应用程序将被分解为系统调用并传给Linux内核。
举个例子:
现在有一个c程序test.c通过gcc编译生成的可执行文件a.out(功能:输出helloworld)。我们平常执行这个a.out的时候是使用
①相对路径调用方式: ./a.out (”.”代表当前目录,”/”分隔符)。
②还可以使用绝对路径调用方式:将其全部路径写出:/home/lzk/test/a.out(此路径是我的工作目录路径,只是个例子,仅供参考)
③通过设置PATH环境变量,直接用文件名调用:
在没设置PATH前,我们直接使用a.out调用程序会报错,因为shell并没有从PATH已拥有的搜索路径目录中找到a.out这个可执行程序。
使用export指令,将a.out的路径添加到搜索路径当中,export PATH=$PATH:路径
我们就可以使用a.out直接执行程序。
HOME
指定用户的主工作目录,即为用户登录到Linux系统中时的默认目录,即“~”。
HISTSIZE
指保存历史命令记录的条数。我们输入的指令都会被系统保存下来,这个环境变量记录的就是保持指令的条数。一般为1000。
这些历史指令都被保存在用户工作主目录“~”下的隐藏文件.bash_profile中。
我们可以通过指令history来查看。
LOGNAME
指当前用户的登录名
HOSTNAME
指主机的名称。
SHELL
指当前用户用的是哪种shell
LANG/LANGUGE
和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
指当前用户的邮件存放目录
PS1
命令提示符,root用户是#,普通用户是$
PS2
附属提示符,默认是“>”
SECONDS
从当前shell开始运行所流逝的秒数
总结
环境变量是和shell紧密相关的,用户登录系统后就启动了一个shell,对于Linux来说一般是bash(Bourne Again shell,Bourne shell(sh)的扩展),也可以切换到其他版本的shell。bash有两个基本的系统级配置文件:/etc/bashrc和/etc/profile。这些配置文件包含了两组不同的变量:shell变量和环境变量。shell变量是局部的,而环境变量是全局的。环境变量是通过shell命令来设置。设置好的环境变量又可以被所以当前用户的程序使用。
引文链接:Linux环境变量及其设置