环境变量
环境变量也是Linux操作系统中非常重要的一部分。我们来看看什么是换环境变量。
概念: 指的是用来在指定操作系统运行环境的一些参数。
举个例子:
我们写完一个代码后,进行链接的时候,我们并不知道链接的静态库或者动态库在哪里,但是我们依旧可以链接成功。这就是因为环境变量帮助编译器进程查找。
常见的环境变量:
1.PATH:指定命令的搜索路径。
2.HOME:指定用户的主工作目录,默认为用户的家目录。
3.SHELL:当前shell,其值通常是/bin/bash。
4.LD_LIBRARY_PATH:定义库函数所在的路径。
查看环境变量的方法:echo $[环境变量名]。
由上图我们可以看出,环境变量的格式为:
环境变量的值1:环境变量的值2:环境变量的值3(每个值用 ’ : ’ 分隔开)
那么环境变量PATH有什么作用呢?
其实我们学习的关于Linux的系统命令,实际上也是一个可执行程序。那么通过之前学习的知识知道,我们要执行自己生成的可执行程序需要给出其绝对路径才能运行(举例:./test),那么为什么系统命令就不需要给出路径而是直接输入命令名称即可执行呢?这是因为,系统命令的路径已经被配置在环境变量PATH中,这样当我们输入系统命令时,系统会自动到我们配置的路径中查找可执行程序,并执行。如果我们想让我们的可执行程序和系统命令一样的执行方式,也可以将我们的可执行程序路径添加到PATH中。
与环境变量相关的命令:
1.echo:显示环境变量。
2.export:设置(添加)一个新的环境变量。但是这样加到环境变量中,只是临时生效,若想要永久生效,就写到文件中去。
在文件中配置环境变量:
a.在~/.bashrc中添加环境变量。
b.在~/.bash_profile中配置环境变量。
c.配置完成后,要输入source ~/.bashrc或者 ~/.bash_profile 才能生效。也可以选择重新打开一个终端,重新打开shell来使其生效。
3.env:显示系统的环境变量。
4.unset:清除环境变量。
5.set:显示本地定义的shell变量、环境变量。
环境变量的组织方式
每个程序都有一个环境表,环境表是一个字符指针数组,每一个指针指向一个以’\0’结尾的环境字符串。
如何通过代码获取环境变量?:
1.命令行第三个参数。
int main(int argc, char *argv[], char *env[])
{
int i = 0;
for(; env[i]; i++)
{
printf("%s\n", env[i]);
}
return 0;
}
2.通过第三方变量environ获取。
libc中定义得全局变量environ指向环境变量表。
int main(int argc, char *argv[])
{
extern char **environ;//environ没有包含在任何头文件中,所以使用时要用extern生命。
int i = 0;
for(; environ[i]; i++){
printf("%s\n", environ[i]);
}
return 0;
}
3.通过系统调用获取环境变量。
#include <stdlib.h>
int main()
{
printf("%s\n", getenv("PATH"));
return 0;
}
注:环境变量通常具有全局性,可以被子进程继承下去。