环境变量
最近在学习Linux下的C程序编写,在运行可执行程序的时候有个问题就是链接的问题,最后通过学习才知道是因为环境变量没有设置好;
环境变量在进行linux开发过程中经常碰到,那什么是环境变量呢?我在刚学习Linux的时候对环境变量不是特别理解,变量不应该是在编程语言中类似于全局变量和局部变量吗?怎么又来了个环境变量?
在我们主流的OS中几乎都存在环境变量的概念,同样在windows下也是存在环境变量的,如下图所示:
通过学习查询资料,其实这些所谓的环境变量就相当于一些信息的简称,比如搜索、查询的路径等等,以后应用程序可以获取这些环境变量中包含的信息来完成相应的工作,很多小伙伴有这样的体会,经常在windows中运行刚安装的软件会需要在环境变量中添加一些路径等信息,否则软件无法运行。
在Linux中也是类似的作用,当执行一个命令,系统会根据环境变量中的路径信息依次搜索直到找到对应的程序运行。
Linux 环境变量
Linux环境变量主要分为系统级别和用户级级别,这点与windows也是非常类似的,如下图所示:
不同级别的环境变量在linux系统存在于不同的配置文件,且他们的作用域也是不一样的,所以这里结合C语言的各种变量的作用域就可以更加方便理解所谓的环境变量了吧,同样它也是一段常驻的内存标识。
我们在linux命令行中输入printenv命令即可查看所有的环境变量
其中比较常用的是环境变量PATH,可以使用printenv PATH或者echo $PATH来单独查看,如下图所示,两者完全一致:
PATH环境变量以冒号 : 进行分割,形成了多个路径,当用户输入相应的命令便会依次从上面的路径中查询程序来执行。
比如:在终端中输入ls命令行,Shell会从PATH变量中存储的路径来查找ls执行程序来运行。
当我们用环境变量export PATH=/home/maqianjun/ 把路径修改之后就不能执行ls命令了:
修改环境变量
对照上面的图进行说明:
修改环境变量大体分为两种办法 :
1 . 使用export命令行直接导入;
示例:
1.使用命令行"export 环境变量=新加入的的路径 ",如下图所示,这样就加入了新路径。
2.当我们退出后重新进入终端,之前使用export临时加的环境变量就会消失。
2.将export命令行保存到如上图所示的对应的文件中适时进行加载导入。
示例:
1、相对命令行方式,其实仅仅只是把export命令行放到了相应的文件中进行加载使用,我们进入到家目录,然后编辑隐藏文件.bashrc,然后把命令行追加到最后,如下图所示:
2、加入到文件并保存以后,其环境变量不会立即生效,需要使用source命令执行一下,才能够生效。
3、重新启动终端,如下图所示,其环境变量依然存在,因为~/.bashrc包含shell的bash信息,当登录以及每次打开新的shell时,该文件被读取,相应的命令也就会重新执行。
4、上面修改.bashrc仅仅只是在shell启动时被加载,在其被加载前执行的程序均无效,所以就有不同作用域,比如环境变量保存在~/.profile 中,那么图形界面启动程序就可以访问到设置的环境变量,而设置到~/.bashrc中的便无法被图形界面启动程序访问。
5、对于普通用户其实将环境变量在.bashrc文件中操作即可,如果修改了其他作用域更广的配置,会影响到其他用户,同时这些配置文件也是逐级覆盖的,启动过程中后面加载的文件会覆盖前面相同的配置信息。
PS,
还有几个关于环境变量的知识点:
1.PATH变量决定了shell 将到哪些目录中寻找命令或程序
2.一些第三方软件没有将可执行文件放到 Linux 的标准目录中。因此,将这些非标准的安装目录添加到 $PATH 是一种解决的办法.(之前也写过一篇关于制作动态库所用到的环境变量这一解决方法,但是它在关闭终端之后就消失了)。
最后
好了,本文就介绍了一下Linux中环境变量的理解与使用,以后在安装编译器,或者make命令等等很多地方都会设计到环境变量的操作,有说明错误请指正。希望本文能够对你有帮助!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)