博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux环境变量详解
阅读量:3741 次
发布时间:2019-05-22

本文共 1584 字,大约阅读时间需要 5 分钟。

Linux环境变量详解

环境变量的本质就是变量,它的服务对象是shell程序,它分为局部环境变量和全局环境变量,分别有不同的作用域和自然生命周期

1.不同角色的shell

不同的情况下,会产生不同的shell。既然环境变量是服务于shell程序的,那么就来分析一下不同角色的shell

  • 交互式shell:我们打开一个tty控制台,实际就打开了一个交互式shell。我们输入的bash命令就由交互式shell解析
  • 非交互式shell:就是各种脚本程序
  • 登录shell:登录系统后,首个执行的应用程序bash,该应用程序就称之为登录shell。登录shell执行后,才会由它陆续去执行其他的交互式shell,非交互式shell,可以认为它是所有shell的祖宗

2.全局环境变量

使用export导出的环境变量,就是全局环境变量

  • 全局环境变量的作用域为:创建该全局环境变量的shell及其子孙shell/进程。即子shell复制父shell的全套环境变量,子shell对得到的环境变量做修改并不会影响到父shell
  • 全局环境变量的自然生命周期为:创建该全局环境变量的shell死亡,并且其子孙shell/进程也全部死亡(通俗的来说,创建者的整个家族灭门了)

始祖环境变量

  • 登录系统后,首个执行的应用程序bash(登录shell)所创建的一堆全局环境变量,它们称为始祖环境变量。这一堆环境变量的生命周期是永久的

  • 启动shell会执行/etc/profile,导出一些通用全局环境变量,export PATH USER LOGNAME MAIL HOSTNAME等,所有用户的shell进程都可以访问到这些变量,我们可以在里面添加系统级别的环境变量。然后再依次执行~/.bash_profile、~/.bash_login、~/.profile或者~./bashrc,或者/etc/bashrc ,来初始化一些用户特有的环境变量,需要注意的是后面几个文件不一定都存在

常见需求:增加PATH

/etc/profile最后加上export PATH="/xxxx/xxx$PATH"

全局环境变量的一般使用方法

  • 例一,比如在控制台(交互式shell)中输入export AAA="123",那么今后在该控制台中,直接或间接执行的shell,都将继承该控制台(交互式shell)留下来的全局环境变量,包括加入的VAR="123"
  • 例二,有两个“非交互式shell”a.shb.sha.sh中执行了b.shb.sh中执行了export BBB="123"。现在执行a.sh,则b.sh是其子shell,所以 BBB这个环境变量对a.sh起不了作用。再一次印证了全局环境变量只能由创建者shell传给子孙shell

3.局部环境变量

不使用export导出的环境变量,就是局部环境变量。它通常作为某个脚本(非交互式shell)自己的私有变量

  • 局部环境变量的作用域为:仅仅创建者shell自己。其父shell、其子shell均无法访问

4.操作环境变量

  • 脚本和控制台中皆可设置环境变量,方法如下,尤其要注意bash的语法中“=”两边不能有空格,变量值中间也不能有空格,有的话要用单引号围起来
test=123    #局部环境变量一般用小写export TEST=123 #全局环境变量一般用大写export MYNAME='XIAO BA WU' #变量值有空格,要用单引号围起来export test #也可以这样把前面的局部变量导出到全局
  • 我们可以输入下列命令来查看当前控制台(交互式shell)的环境变量
printenv    #查看所有环境变量echo $HOME #查看指定环境变量
  • 我们可以这样取消当前控制台(交互式shell)环境变量
unset MYNAME

转载地址:http://mpvin.baihongyu.com/

你可能感兴趣的文章
蓝桥杯 算法训练 - 寂寞的数 道德经曰:一生二,二生三,三生万物。   对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和。例如,d(23)=23+2+3=28, d(1481
查看>>
蓝桥杯真题 17省10-k倍区间 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i
查看>>
TCP协议的流量控制
查看>>
TCP连接的三次握手过程,为什么不是两次或四次?
查看>>
小白都能看懂的DNS解析过程
查看>>
HTTP和HTTPS的区别?描述HTTPS的工作过程
查看>>
简述一下HTTP的状态码
查看>>
20210227vulhub靶场之环境配置---无法获得靶机IP的疑难解决方式(可以解决VBox和VMware不兼容问题)
查看>>
20210226web渗透学习之SSRF总结
查看>>
2021-06-01web渗透学习之sqlserver提权(转)
查看>>
2021-06-04msf结合漏扫模块suggester提权
查看>>
hdfs的api操作
查看>>
mapreduce的组成及原理
查看>>
大数据之Flume
查看>>
关于高可用配置hbase中出现的问题:Name or service not known
查看>>
centOs7下hadoop3.2.2namenode故障不自动转移
查看>>
在高可用的hive下执行bin/schematool -dbType mysql -initSchema报错
查看>>
hbase配置高可用
查看>>
linux下卸载和安装mysql
查看>>
在初始化namenode时:java.net.NoRouteToHostException: 没有到主机的路由;
查看>>