【Linux】环境变量管理

环境变量

在SHELL中,存在两种类型的环境变量,全局环境变量局部环境变量。全局环境变量是指变量可以在该SHELL、及子SHELL中被引用,而局部环境变量只能在其创建的进程中被引用。系统环境变量默认采用全部大写来标识,建议用户自定义的环境变量采用小写,以免覆盖系统自定义的环境变量。

通过set、env、printenv命令可以查看环境变量的设置,其中env与printenv只能查看系统全局变量,set不仅可以看到局部环境变量,还可以查看自定义的局部环境变量。

通过赋值语句key=value的方式在SHELL中设置局部环境变量,然后就可以在该进程中的任意地方使用定义的环境变量,但在子shell或者新进程中,该环境变量还是不可见的,必须使用export命令将其导出

使用export语句定义了全局环境变量后,在子shell中可以使用自定义的全局环境变量,也可以在子shell中修改甚至删除该变量(删除变量使用unset命令),但修改或者删除的作用范围仅限于子shell中,该变化不会反映到父shell中,即使在子shell中重新使用export语句
 

PATH环境变量

当在SHELl中输入命令时,系统首先需要找到这些命令对应的执行文件,全局环境变量PATH定义了系统应该在哪些地方找命令,如果在PATH中所有的路径都找不到命令,则系统会报command not found错误。比较常见的PATH临时修改方式为export PATH="new_path:$PATH"
 

修改配置文件定义环境变量

永久修改环境变量可以通过修改对应的启动文件,SHELL不同的启动方式,会对应不同的环境变量配置文件。主要启动方式有三种:登录交互式shell会话、非登录交互式shell会话、非登录非交互式shell会话。
 

登录方式与非登录方式的区别

登录式shell——需要账号密码才能进入的shell,或者通过–login选项。非登录式shell——不需要账号密码就能进入的shell,比如在命令行输入bash命令会进入一个非登录式shell。

登录式shell与非登录式shell可以通过以下方式区分,第一非登录式只能通过exit退出,而登录式可以通过logout或者exit退出;第二可以用ps -f命令查看,登录式bash会显示-bash 或者bash --login,而非登录式bash只会显示bash,如下图所示:
登录式与非登录式
 

交互式与非交互式的区别

交互式——这是比较常见的方式,就是用户输入指令,系统马上处理并返回结果,如此循环,直到用户退出。非交互式——shell script方式,shell读取脚本文件的全部命令,然后依次执行,执行完成后自动退出shell。

可以通过打印$-的值来区分是交互式还是非交互式,如果输出中包含i选项(interactive),则是交互式的,否则不是交互式的。
 

不同shell加载环境变量配置文件的顺序

shell启动时会加载指定的配置文件,这些配置文件又叫做启动文件,当需要永久性修改某些环境变量,就到指定的启动文件中修改,注意后执行的启动文件的配置项会覆盖之前的启动文件的配置项

登录式SHELL加载顺序:/etc/profile -> /etc/profile.d -> ~/.bash_profile -> ~/.bashrc -> /etc/bachrc

非登录式SHELL加载顺序:~/.bashrc -> /etc/bashrc。 非登录式的shell不会检查/etc/profile文件,只会检查用户主目录下的.bashrc文件。

非交互式SHELl加载顺序:BASH_ENV环境变量。对于非交互式SHELL,系统会先检查BASH_ENV环境变量,如果该变量指定了启动文件,则执行启动文件中的命令。如果BASH_ENV的值为空,当脚本在一个子shell中执行时,执行的脚本会利用从父SHELL那里继承的环境变量; 当脚本在当前SHELL中执行时,则利用当前SHELL中的环境变量
 

参考资料

  1. 交互式、非交互式,登录式、非登录式Shell

  2. 登录式shell和非登录式shell

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值