ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【Linux探索学习】第十五弹——环境变量:深入解析操作系统中的进程环境变 [打印本页]

作者: 老婆出轨    时间: 2024-11-23 09:08
标题: 【Linux探索学习】第十五弹——环境变量:深入解析操作系统中的进程环境变
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 什么是环境变量?

环境变量是键值对形式的全局变量,定义了系统和进程的运行环境。它们用于存储系统设置、用户信息以及运行时参数,供操作系统和应用程序读取和使用。
环境变量的根本格式为:
  1. KEY=VALUE
复制代码

1.2 环境变量的作用

环境变量的主要作用包括:
   
  我们来讲一下一个常见的环境变量的作用:程序搜刮路径(PATH)
PATH时我们在打开系统时就会存在的环境变量,我们可以通过下面的指令查看PATH环境变量的内容:
  1. echo $PATH
复制代码

我们可以查看到一串的路径,那么这些路径有什么特别之处吗?
我们可以看这样一个例子,对于我们本身生成的一个可实行文件,比如myproc,要想运行必须是./myporc,而不能是.myproc,原因就是我们实行一个文件时是需要先找到它的位置的,我们需要告诉系统它是在当前路径下的
但是我们也知道有一些指令,比如pwd指令,我们并没有告诉系统它地点的位置,但是它仍然可以或许被实行,这又是为什么呢?这就与我们上面PATH中的路径有关了
之所以系统指令比如pwd,ls等可以不指明路径的原因就是它们的路径其实就是上面PATH中的路径,这些路径是系统默认搜刮路径,而我们本身创建的路径并不包罗在此中,但其实我们可以通过操作将我们的路径添加进去,比如:
  1. PATH = $PATH:/home/zwt
复制代码

此时我们就发现我们将我们本身的路径也添加到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 示例:查看系统中的环境变量

  1. # 查看所有环境变量
  2. env
  3. # 打印特定环境变量
  4. echo $PATH
复制代码


三、环境变量的特性

3.1 环境变量的继承

环境变量在进程的生命周期中由父进程传递给子进程。当一个进程创建子进程时,子进程会继承父进程的环境变量。
   
  示例:父子进程环境变量继承

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. int main() {
  5.     printf("Parent: PATH = %s\n", getenv("PATH"));
  6.     pid_t pid = fork();
  7.     if (pid == 0) {
  8.         // 子进程
  9.         setenv("PATH", "/tmp", 1);
  10.         printf("Child: PATH = %s\n", getenv("PATH"));
  11.     } else {
  12.         // 父进程
  13.         sleep(1);  // 等待子进程修改完成
  14.         printf("Parent after fork: PATH = %s\n", getenv("PATH"));
  15.     }
  16.     return 0;
  17. }
复制代码

子进程的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。
函数原型

  1. char *getenv(const char *name);
复制代码
示例:获取环境变量值

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4.     char *path = getenv("PATH");
  5.     if (path) {
  6.         printf("PATH: %s\n", path);
  7.     } else {
  8.         printf("PATH not set.\n");
  9.     }
  10.     return 0;
  11. }
复制代码


5.2 设置环境变量:setenv

setenv函数用于设置或更新环境变量的值。
函数原型

  1. int setenv(const char *name, const char *value, int overwrite);
复制代码

示例:设置环境变量

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4.     // 设置环境变量
  5.     if (setenv("MYVAR", "Hello, World!", 1) == 0) {
  6.         printf("MYVAR set to: %s\n", getenv("MYVAR"));
  7.     } else {
  8.         perror("Failed to set environment variable");
  9.     }
  10.     return 0;
  11. }
复制代码


5.3 删除环境变量:unsetenv

unsetenv函数用于删除指定的环境变量。
函数原型

  1. int unsetenv(const char *name);
复制代码
示例:删除环境变量

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4.     setenv("MYVAR", "Hello, World!", 1);
  5.     printf("Before unset: MYVAR = %s\n", getenv("MYVAR"));
  6.     unsetenv("MYVAR");
  7.     printf("After unset: MYVAR = %s\n", getenv("MYVAR"));  // 输出NULL
  8.     return 0;
  9. }
复制代码


5.4 遍历所有环境变量:environ

全局变量environ存储了所有环境变量的指针数组,可以用来遍历当进步程的环境变量。
示例:打印所有环境变量

  1. #include <stdio.h>
  2. extern char **environ;
  3. int main() {
  4.     char **env = environ;
  5.     while (*env) {
  6.         printf("%s\n", *env);
  7.         env++;
  8.     }
  9.     return 0;
  10. }
复制代码


六、环境变量的安全性与常见问题

6.1 环境变量的安全性

环境变量可能存储敏感信息(如API密钥、密码等),因此需要留意以下几点:

6.2 常见问题与解决方案

问题原因解决方案环境变量未被子进程继承未使用export导出环境变量。使用export下令显式导出。环境变量过长导致错误部门系统对环境变量大小有限制(如ARG_MAX)。尽量收缩环境变量的值,或使用文件存储设置信息。修改环境变量无效修改变量后未启动新进程。确保变量在进程启动前已精确设置。
七、总结

   环境变量是操作系统与应用程序之间的重要接口,它以简朴而机动的方式为进程提供运行时的设置信息。从本文中,我们学习了环境变量的根本概念、常见变量、管理方式,以及如何使用C语言操作环境变量。通过理论分析和代码示例,希望你能在现实开发中更好地理解和应用环境变量。
  在现实学习和工作中,合理使用环境变量可以或许极大进步程序的可设置性和机动性,同时也需要留意其安全性,避免泄露敏感信息。
  


   感谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4