1、初识环境变量
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。
比如:Linux中 ls、file 等这些命令也是可执行文件,与我们在Linux下写的代码编译生成的可执行文件一样,只是 ls 这些文件都在Linux基础库中,他们在系统中,都会存在一个环境变量,这个环境变量能够帮我们通过该变量在系统中特定的路径下,帮我们搜索到对应的 ls 的命令。
我们写的代码,运行的时候,就需要带上路径,也就是要加上 ./ 那如果我们不想加上 ./ 呢?
可以用export PATH=$PATH:/home/HXJ/test
添加环境变量,也就是把对应的可执行文件的路经,添加到环境变量中去,但是这种写法是暂时的,重新登录Xshell后,环境变量又更新了。
重新登录后的环境变量:
添加myproc
的环境变量后:
我们也可以把可执行程序,拷贝到系统默认路径下,也可以让我们直接访问
用cp -rf myproc /usr/bin
可以拷贝到系统默认路径下,如果有权限问题,则在前面加个sudo,这种方式相当于Linux下的软件安装,那么如何删除呢?
用rm /usr/bin/myproc -rf
可以删除路径,相当于软件卸载。
2、和环境变量相关的命令
环境变量相关的命令
- echo: 显示某个环境变量值
- export: 设置一个新的环境变量
- env: 显示所有环境变量
- unset: 清除环境变量
- set: 显示本地定义的shell变量和环境变量
常见环境变量
PATH : 指定命令的搜索路径
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。
3、环境变量的组织方式
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串,其中envp
是一个传给当前进程的环境变量表,里面的字符串是指向以KV形式呈现的环境变量字符串,environ
是一个char**
类型,可以以第三方形式获取环境变量。
1.命令行第三个参数
运行结果:
由上述结果可知,envp是一个环境变量表。
2.通过第三方变量environ
获取环境变量
3.通过系统调用获取或设置环境变量
char *getenv(const char *name) : 通过环境变量名称来获取特点的环境变量
运行结果:
4、环境变量的本质
-
什么是环境变量
环境变量本质就是一个内存级的一张表,这个表是由用户在登录系统的时候,进行给特定用户形成属于自己的环境变量表。
环境变量中的每一个,都有自己的用途:有的是进行路径查找的,有的是进行身份认证的,有的是进行动态库查找的,有的是用来确认当前路径等待,每一个环境变量都有自己的特点应用场景。 -
那么环境变量对应的数据都是从哪里来的呢?
是从系统的相关配置文件中读取进来的,是由用户在登录系统的时候,进行个给特定用户形成属于自己的环境变量表。
-
我们向系统导入一个环境变量
我们再获取这个环境变量
运行结果:
所以环境变量是可以被相关的子进程继承下去的,环境变量具有全局属性 -
我们定义一个本地变量
运行结果:
由此可知:本地变量只在shell内部有效,不可以被相关的子进程继承下去的