产品网站设计,无锡上网站建设,WordPress短码生成器,php做的网站首页是什么文件[Linux]环境变量 文章目录 [Linux]环境变量环境变量的概念查看环境变量环境变量的加载原理环境变量的添加刷新环境变量配置文件的路径 环境变量的概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
环境变量的本质#xff1a;…[Linux]环境变量 文章目录 [Linux]环境变量环境变量的概念查看环境变量环境变量的加载原理环境变量的添加刷新环境变量配置文件的路径 环境变量的概念
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
环境变量的本质一张内存级的表在用户登录系统的时候为用户形成属于自己的环境变量表。表结构示意图如下: 环境变量是从配置文件中读取获得的。
每一个环境变量都有自己的用途有的是用于路径搜索有的是用于身份认证有的是用于库的查找等等。
查看环境变量
Linux系统下输入env指令查看所有环境变量 其中一些常见的环境变量
SHELL : 当前Shell,它的值通常是/bin/bashUSER当前用户名PWD当前用户所处的路径HOME当前用户的家目录LOGNAME用户登录时的名字
环境变量中值得注意的是PATH环境变量他记录了Linux系统中的系统指令程序路径编程语言的动静态库地址。因此同样是可执行程序我们自己编写的程序需要加路径运行而系统指令不用并且编译代码时不需要关心动静态库的链接问题因为环境变量中记录了路径编译器会根据环境变量的路径查找。
Linux系统下输入echo $NAME 指令查看特定环境变量其中NAME是所要查看的环境变量名 说明 一些特定的环境变量比如LOGNAME不同的用户的环境变量是不同的。
编写代码查看环境变量
通过main函数的参数查看
main函数是有三个参数的即使我们不写明编译器也在编译时自动加上并接收参数其中第三个参数是一个名为envp的指针数组其接收的参数就是环境变量。envp的数据中最后一个有效数据的下一个数据是空指针因此编写如下代码查看环境变量
#include stdio.h
#include unistd.hint main(int argc, char* argv[], char *envp[])
{int i 0;for (i 0; envp[i]; i){printf(envp[%d]-%s\n, i, envp[i]);}return 0;
}编译后运行程序查看结果: 通过全局变量查看
在Linux系统头文件unistd.h中有一个全局变量名为environ的二级指针指向环境变量数据表environ的数据中最后一个有效数据的下一个数据是空指针。因此编写如下代码查看环境变量
#include stdio.h
#include unistd.hint main()
{extern char** environ; //变量声明int i 0;for (i 0; environ[i]; i){printf(environ[%d]-%s\n, i, environ[i]);}return 0;
}编译后运行程序查看结果: 调用系统函数查看
Linux系统提供了系统函数getenv来获取特定的环境变量。因此编写如下代码查看环境变量
#include stdio.h
#include unistd.h
#include stdlib.hint main()
{char* usr getenv(USER);printf(当前用户名为:%s\n, usr);return 0;
}getenv函数所在的头文件是stdlib.h,参数要查看的特定环境变量编译后运行程序查看结果: 环境变量的加载原理
环境变量是从系统配置文件获取数据的一张内存级的表在Linux操作系统下每启动一个shell进程shell进程内部就会执行创建环境变量表的代码然后从配置文件中获取数据加载到自身创建的环境变量表中。由于我们使用Linux操作系统都是通过shell进行命令行解释然后启动子进程完成功能因此在Linux操作系统下启动的进程都可以通过main函数的参数获取到环境变量如下 说明
修改某个shell进程自身的环境变量表不影响新启动的shell进程。修改所有新启动的shell进程的环境变量需要修改配置文件。
环境变量的添加
给当前shell进程添加本地变量
直接输入NAMEVAL给当前shell进程添加本地变量 shell进程的本地变量只在shell进程内部有效由shell启动的子进程都无法接收到本地变量。为了验证子进程无法接收到该本地变量编写如下代码
#include stdio.h
#include unistd.h
#include stdlib.hint main()
{char* env getenv(HELLO);if (env) printf(%s\n, env);else printf(该环境变量不存在\n);return 0;
}编译运行程序查看结果: 给当前shell进程添加全局变量
输入export 本地变量或者export NAMEVAL添加全局变量 export指令会将变量添加到shell进程的环境变量表中因此shell进程的全局变量可以由shell启动的子进程都接收。(图中myproc进程代码同上)
刷新环境变量 .操作符 . 配置文件名 可以刷新当前shell进程的环境变量将配置文件中的数据加载到环境变量表中使其生效。 source命令 source 配置文件名可以刷新当前shell进程的环境变量将配置文件中的数据加载到环境变量表中使其生效。
配置文件的路径
在Linux系统家目录下的每个用户目录中都会存在两个配置文件.bash_profile和.bashrc .bash_profile和.bashrc文件中都有一些环境变量和加载其他配置文件的shell脚本,shell脚本的功能是到对应的路径下加载配置文件为用户创建shell进程时就会先加载.bash_profile和.bashrc文件然后执行其中的shell脚本完成环境变量的加载。
.bash_profile内容示意图 .bashrc内容示意图