Linux学习笔记:
https://blog.csdn.net/2301_80220607/category_12805278.html?spm=1001.2014.3001.5482
前言:
环境变量(Environment Variables)是操作系统与应用程序之间的重要桥梁。它们为进程提供运行时设置信息,在操作系统的资源管理和应用程序的机动性方面扮演了关键脚色。本文将全面介绍进程环境变量的概念、常见环境变量、操作指令,以及如何通过C语言中的getenv和setenv函数对环境变量进行操作,配以代码示例和表格,帮助你深入理解这一重要知识点。
目录
一、环境变量的基础概念
1.1 什么是环境变量?
1.2 环境变量的作用
二、常见环境变量
示例:查看系统中的环境变量
三、环境变量的特性
3.1 环境变量的继承
示例:父子进程环境变量继承
3.2 环境变量的生命周期
四、管理环境变量的常用指令
五、C语言中的环境变量操作
5.1 获取环境变量:getenv
函数原型
示例:获取环境变量值
5.2 设置环境变量:setenv
函数原型
示例:设置环境变量
5.3 删除环境变量:unsetenv
函数原型
示例:删除环境变量
5.4 遍历所有环境变量:environ
示例:打印所有环境变量
六、环境变量的安全性与常见问题
6.1 环境变量的安全性
6.2 常见问题与解决方案
七、总结
一、环境变量的基础概念
1.1 什么是环境变量?
环境变量是键值对形式的全局变量,定义了系统和进程的运行环境。它们用于存储系统设置、用户信息以及运行时参数,供操作系统和应用程序读取和使用。
环境变量的根本格式为:
- KEY:变量名(大小写敏感)。
- VALUE:变量值,可以是路径、字符串、数字等。
1.2 环境变量的作用
环境变量的主要作用包括:
- 设置程序运行环境:如定义程序搜刮路径、语言环境等。
- 传递系统信息:提供系统版本、主机名等信息。
- 控制进程举动:通过变量值影响程序的举动和运行逻辑。
我们来讲一下一个常见的环境变量的作用:程序搜刮路径(PATH)
PATH时我们在打开系统时就会存在的环境变量,我们可以通过下面的指令查看PATH环境变量的内容:
我们可以查看到一串的路径,那么这些路径有什么特别之处吗?
我们可以看这样一个例子,对于我们本身生成的一个可实行文件,比如myproc,要想运行必须是./myporc,而不能是.myproc,原因就是我们实行一个文件时是需要先找到它的位置的,我们需要告诉系统它是在当前路径下的
但是我们也知道有一些指令,比如pwd指令,我们并没有告诉系统它地点的位置,但是它仍然可以或许被实行,这又是为什么呢?这就与我们上面PATH中的路径有关了
之所以系统指令比如pwd,ls等可以不指明路径的原因就是它们的路径其实就是上面PATH中的路径,这些路径是系统默认搜刮路径,而我们本身创建的路径并不包罗在此中,但其实我们可以通过操作将我们的路径添加进去,比如:
此时我们就发现我们将我们本身的路径也添加到PATH中去了
别的我们使用which查找指令时就是从PATH环境变量中搜刮的,所以此时我们也可以使用which查找我们本身写的可实行文件,比如上面提到的myproc
二、常见环境变量
以下是操作系统中常见的环境变量及其作用:
环境变量形貌示例PATH定义可实行程序的搜刮路径,多个路径用冒号分隔。/usr/bin:/bin:/usr/local/binHOME当前用户的主目录。/home/usernameUSER当前用户名。usernameSHELL用户默认的Shell路径。/bin/bashLANG语言和区域设置,影响程序的语言显示。en_US.UTF-8LD_LIBRARY_PATH动态链接库搜刮路径。/usr/local/lib:/usr/libTEMP 或 TMP临时文件的存储路径。/tmpEDITOR默认文本编辑器。vim 示例:查看系统中的环境变量
- # 查看所有环境变量
- env
- # 打印特定环境变量
- echo $PATH
复制代码
三、环境变量的特性
3.1 环境变量的继承
环境变量在进程的生命周期中由父进程传递给子进程。当一个进程创建子进程时,子进程会继承父进程的环境变量。
- 父进程修改环境变量,不影响已运行的子进程。
- 子进程修改环境变量,也不会影响父进程。
示例:父子进程环境变量继承
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- int main() {
- printf("Parent: PATH = %s\n", getenv("PATH"));
- pid_t pid = fork();
- if (pid == 0) {
- // 子进程
- setenv("PATH", "/tmp", 1);
- printf("Child: PATH = %s\n", getenv("PATH"));
- } else {
- // 父进程
- sleep(1); // 等待子进程修改完成
- printf("Parent after fork: PATH = %s\n", getenv("PATH"));
- }
- return 0;
- }
复制代码
子进程的PATH环境变量修改了,但是父进程的没有被修改
输出阐明:
3.2 环境变量的生命周期
- 环境变量的生命周期与进程绑定。
- 进程终止时,其环境变量也会被销毁。
四、管理环境变量的常用指令
在Linux中,可以通过下令行轻松管理环境变量。
指令形貌示例echo $VAR查看环境变量的值。echo $HOMEexport VAR=value设置环境变量,并导出到子进程。export MYVAR=123unset VAR删除环境变量。unset MYVARenv 或 printenv查看当进步程的所有环境变量。env 五、C语言中的环境变量操作
在C语言中,可以通过标准库函数操作环境变量,包括获取、设置和删除。
5.1 获取环境变量:getenv
getenv函数用于获取指定环境变量的值。如果环境变量不存在,则返回NULL。
函数原型
- char *getenv(const char *name);
复制代码 示例:获取环境变量值
- #include <stdio.h>
- #include <stdlib.h>
- int main() {
- char *path = getenv("PATH");
- if (path) {
- printf("PATH: %s\n", path);
- } else {
- printf("PATH not set.\n");
- }
- return 0;
- }
复制代码
5.2 设置环境变量:setenv
setenv函数用于设置或更新环境变量的值。
函数原型
- int setenv(const char *name, const char *value, int overwrite);
复制代码
- name:环境变量名。
- value:环境变量值。
- overwrite:是否覆盖已有值(非零值表示覆盖)。
示例:设置环境变量
- #include <stdio.h>
- #include <stdlib.h>
- int main() {
- // 设置环境变量
- if (setenv("MYVAR", "Hello, World!", 1) == 0) {
- printf("MYVAR set to: %s\n", getenv("MYVAR"));
- } else {
- perror("Failed to set environment variable");
- }
- return 0;
- }
复制代码
5.3 删除环境变量:unsetenv
unsetenv函数用于删除指定的环境变量。
函数原型
- int unsetenv(const char *name);
复制代码 示例:删除环境变量
- #include <stdio.h>
- #include <stdlib.h>
- int main() {
- setenv("MYVAR", "Hello, World!", 1);
- printf("Before unset: MYVAR = %s\n", getenv("MYVAR"));
- unsetenv("MYVAR");
- printf("After unset: MYVAR = %s\n", getenv("MYVAR")); // 输出NULL
- return 0;
- }
复制代码
5.4 遍历所有环境变量:environ
全局变量environ存储了所有环境变量的指针数组,可以用来遍历当进步程的环境变量。
示例:打印所有环境变量
- #include <stdio.h>
- extern char **environ;
- int main() {
- char **env = environ;
- while (*env) {
- printf("%s\n", *env);
- env++;
- }
- return 0;
- }
复制代码
六、环境变量的安全性与常见问题
6.1 环境变量的安全性
环境变量可能存储敏感信息(如API密钥、密码等),因此需要留意以下几点:
- 避免敏感信息暴露:尽量不要在环境变量中存储明文密码。
- 限制环境变量的访问范围:不要容易导出变量到子进程。
- 验证外部输入:防止外部程序通过环境变量注入恶意代码。
6.2 常见问题与解决方案
问题原因解决方案环境变量未被子进程继承未使用export导出环境变量。使用export下令显式导出。环境变量过长导致错误部门系统对环境变量大小有限制(如ARG_MAX)。尽量收缩环境变量的值,或使用文件存储设置信息。修改环境变量无效修改变量后未启动新进程。确保变量在进程启动前已精确设置。 七、总结
环境变量是操作系统与应用程序之间的重要接口,它以简朴而机动的方式为进程提供运行时的设置信息。从本文中,我们学习了环境变量的根本概念、常见变量、管理方式,以及如何使用C语言操作环境变量。通过理论分析和代码示例,希望你能在现实开发中更好地理解和应用环境变量。
在现实学习和工作中,合理使用环境变量可以或许极大进步程序的可设置性和机动性,同时也需要留意其安全性,避免泄露敏感信息。
感谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |