一起入门Linux咯 | 环境变量管理
- 前提概念
- 什么是环境变量
- 环境变量的划分
- 环境变量的注意事项
- 环境变量常用命令
- 命令
- 功能
- 设置永久性系统环境变量
- 什么是永久性系统环境变量?
- 实现永久性环境变量的原理
- 环境变量相关配置文件
- 如何实现永久性环境变量?
- 环境变量的作用与应用
- 把路径加入PATH
- 别名
前提概念
什么是环境变量?
环境变量就是系统预定义的变量,windows下也有,就比如在windows下经常要配置路径到path变量下,JAVA_HOME等待。所以,它有很多的作用:
- 通过一个变量就可以指向一个很复杂的数据或信息
- 如果多个地方使用到了同一个东西,我们可以把它抽象成一个变量
- 可以快速的执行某些二进制执行文件,而不需要打一长串的路径
环境变量的划分
linux下的环境变量可以分为两种
linux下的环境变量根据可见性可以分为Shell变量和系统环境变量两种,说白了就是局部变量和全局变量,但是我们要清楚“局部”
与“全部”
分别代表的是什么
Shell变量
shell变量,又称局部变量
,shell变量只允许当前shell使用,无法提供给其他的shell或程序使用, 即该变量只对当前shell是可见的系统环境变量
系统环境变量,就是通常所说的全局环境变量
,即该变量是所有shell或是程序都是能够共享使用的,即系统环境变量对所有的shell或是应用都是可见的
全局环境变量的再细化
根据全局环境变量的生命周期,我们可以分为永久性变量和临时性变量;根据用户等级的不同,我们又可以将其分为系统级变量和用户级变量。总的来说,全局环境变量可以总结为以下三种:
系统级永久性变量
所有用户环境下,所有shell,程序都可以共享使用的永久性变量,该变量在不同的客户端(session)下,即使是注销登录后都是可见的用户级永久性变量
用户级永久性变量区别于系统级永久性变量,仅仅是单用户全局永久可见,比如说由user1
和user2
两个用户,某个全局变量hello
仅对user1
全局永久可见,而对user2
是不可见的临时性全局变量
临时性环境变量没有系统级,用户级的区分,它的临时性指的是仅对某个用户当前session
下全局可见,即临时全局变量仅对当前用户,当前session
可见,退出重新登录后,关闭客户端(terminal
)就可不见了,其他用户就更不用说了; 临时性全局变量一般是由export
或是declare -x
指令将shell变量升迁而来
总结
- 环境变量分为
全局变量
和局部变量
,也称系统环境变量
和shell变量
,也称环境变量
和自定义变量
。不同的资料,不同的书籍,有不同的说法,看你自己怎么认为罗,其实都是一个意思,只是不同的角度描述 shell变量
必然是一个临时的变量,而全局变量
有永久性的变量,也有临时性的变量。所谓临时,就是关闭终端客户端,注销登录后,变量就没了。所谓永久的意思就是,每次登陆,都会先执行某个文件的命令,让某个东西成为全局变量,所以永久其实就是每次登陆都执行一次添加变量而已,并不是真正意义的永久。- 当我们定义了shell变量,可以通过
declare -x
,export
等命令将其设置为全局环境变量,当然也可以通过declare +x
,export -n
等命令撤销其的全局环境变量身份
环境变量注意事项
- 变量名与等号之间,不能有空格,否则shell会把变量名当做是命令
- 变量名称一般使用大写,以示区别,比如PATH
环境变量常用命令
命令
-
echo
输出指定的字符串或变量 -
env
显示系统中所有系统环境变量(不包含shell变量) -
set
显示或设置shell特性及shell变量
set
显示查看所有的环境变量(系统环境变量以及shell变量) -
export
设置和显示系统环境变量
export
显示系统中所有系统环境变量(不包含shell变量)
export {name}
,export {name}={value}
将某个shell变量设置为系统环境变量
export -n {name}
从系统环境变量中删除该变量,非真删除,仅是让该变量不再是全局环境变量 -
declare
declare
显示查看所有的环境变量(系统环境变量以及shell变量)
declare -x {name}
,declare -x {name}={value}
将某个shell变量设置为系统环境变量
declare +x {name}
从系统环境变量中删除该变量,非真删除,仅是让该变量不再是全局环境变量
功能
-
显示系统中所有系统环境变量(不含shell变量)
env
export
-
显示系统中所有的系统环境变量以及shell变量
set
declare
-
从系统环境变量和shell变量中删除某变量
unset {name}
删除之后,env与set都看不见该变量了,是完全的删除 -
仅从系统环境变量中删除某变量
declare +x {name}
,export -n {name}
删除之后,env看不见,但是set命令还是看的见,是半删除 -
新增shell变量
{name}={value}
declare {name}
,declare {name}={value}
-
新增临时全局变量
declare -x {name}
,declare -x {name}={value}
export {name}
,export {name}={value}
-
修改环境变量
{name}={value}
跟创建shell变量一样,无论是什么类型变量,都是这么修改
设置永久性系统环境变量
什么是永久性系统环境变量?
从上面我们可以知道,系统环境变量可以是永久性的,也可以是临时性的。什么是永久性的系统环境变量呢?
简而言之,就是不会过期,当你关闭了终端或是注销了账户,再重新使用终端登录账户,一样可以看见这个变量,不需要认为的再次设置,那么这个变量就是一个永久性环境变量
实现永久性环境变量的原理
那么这个永久性变量是怎么实现的呢?
其实所谓永久并不是真的永久,只是linux通过某种手段造成了一个永久的假象。它的手段就是每当一个用户通过终端登录服务器时,该shell就会按照一定的顺序执行某些文件,自动将文件中内容执行一遍,而这些文件的内容就是设置环境变量的命令。
所以我们可以知道,之所以我们每次登录都可以访问到这些变量,是因为在我们登录的时候,就已经自动的执行了设置环境变量的命令了。
而这些存放设置环境变量的命令的文件就是环境变量配置文件。当然,从上面的环境变量划分中,我们也可以知道,永久性系统环境变量也会分为用户级
和系统级
的, 导致不同类型的永久性变量的根本原因就是配置文件的不同
环境变量相关配置文件
环境变量配置文件有很多种,有登录时生效的,有注销时生效的,也有别的时候生效的,我们这里主要说的是登录时生效的一些配置文件
系统级永久性环境变量的生效配置文件
/etc/profile
(Centos),/etc/bash.bashrc
(Ubuntu)/etc/profile.d/*.sh
/etc/.bashrc
用户级永久性环境变量的生效配置文件
~/.bash_profile
~/.bashrc
从上面我们就可以知道,存放在/etc目录下的配置文件是对全局用户生效的,所以其产生的就是系统级的永久性环境变量;而用户Home目录下的配置文件仅仅对该用户生效,自然产生的环境变量也不会影响到其他的用户
配置文件起作用的流程
我们都知道,这些环境变量配置文件都是在用户登录的时候起作用的,那么到底谁先被访问,谁后被访问呢?是怎么个流程顺序?
- 正常登录下(有完整输入账号密码的登录方式)
- 非正常登录下(root用户通过su {user}的方式)
一遍在某个配置文件中,都会有调用下个配置文件的shell代码,如果整个流程中某个配置文件丢失了,就会造成流程中下流的某些配置文件没有被调用,比如说,如果/etc/profile文件缺失了,就会导致后续配置文件都没有被执行
当然,Linux有太多的发行版本,并行都已经迭代了很多年了,可能存在流程与上面不同的情况,比如具体的文件可能不同,不过原理都是相通的
其实说是环境变量配置文件,但它不仅仅可以做配置环境变量的事情,你如果想要开机做一些事情,也可以在这些配置文件中写入某些命令。都可以玩玩
如何配置永久性变量?
所以如果你要配置一个系统级的永久性环境变量:
- 只要
/etc
下的配置文件中追加上export {name}={value}
或类似的命令, 最后source {配置文件}
, 让配置文件立即生效即可
如果你想要配置一个用户级的永久性环境变量:
- 只需要在该用户的主目录
~/
下的配置文件中追加export {name}={value}
或类似的命令, 最后source {配置文件}
, 让配置文件立即生效即可
环境变量的作用与应用
把路径加入PATH
如果我们想将某个路径加入PATH路径,这样就可以让路径下的二进制文件直接被访问了。而不需要打出一大长串的路径
export PATH=$PATH:{path}
临时全局变量
ubuntu
/centos
直接在终端上输入export PATH=$PATH:{path}
即可
用户级永久全局变量:
ubuntu
/centos
都是在~/.profile
中合适的位置添加以上代码,保存,最后source .profile
文件即可
系统级永久全局变量:
ubuntu
/centos
都是在/etc/profile
中合适的位置添加以上代码,保存,最后source profile
文件即可\
别名
比如我们想要定义ls的别名,如ll
, la
,l
。
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
临时全局变量
ubuntu
/centos
直接在终端上依次输入以上代码即可
用户级永久全局变量:
ubuntu
/centos
都是在~/.bashrc
中合适的位置添加以上代码,保存,最后source .bashrc
文件即可; 当然你也可以在.profile
文件中添加,只是通常的约定俗成是在.bashrc
中修改
系统级永久全局变量:
- ubuntu在/etc/bash_bashrc中合适的代码中添加以上代码,保存,最后
source bash_bashrc
文件即可 - centos在/etc/.bashrc中合适的代码中添加以上代码,保存,最后
source .bashrc
文件即可