Linux的进程观:简单性如何成就强大性(三)

1. 环境变量

1.1. 基本概念

  • 环境变量(environment variables)⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数。
  • 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪⾥,但是照样可以链接成功,⽣成可执⾏程序,原因就是有相关环境变量帮助编译器⾏查找。
  • 环境变量通常具有某些特殊⽤途,还有在系统当中通常具有全局特性。

1.2. 常见环境变量

  • PATH : 指定命令的搜索路径。
  • HOME : 指定⽤⼾的主⼯作⽬录(即⽤⼾登陆到Linux系统中时,默认的⽬录)。
  • LANG:Linux中的编码方式。
  • HISTSIZE:Linux记录历史命令的条数。
  • LOGNAME:登陆者是谁。
  • USER:使用者。
  • SHELL : 当前Shell,它的值通常是/bin/bash。

1.3. 查看环境变量的方法

1.3.1. echo $NAME

在echo $NAME命令中,NAME时环境变量的名称。

举例如下,查看环境变量中的PATH,LANG,SHELL:

1.3.2. 使用env命令

我们使用env命令可以查看所有的环境变量。

举例如下:

1.3.3. 在代码中获取环境变量的三种方式

  • 命令行的参数:(main函数的三个参数)
  • 通过第三方的environ:
  • 通过系统调用来获得环境变量:(getenv)

1.4. 和环境变量相关的命令

  • echo: 显⽰某个环境变量值。
  • export: 设置⼀个新的环境变量。
  • unset: 清除环境变量。
  • set: 显⽰本 地定义的shell变量和环境变量。
  • env: 显⽰所有环境变量:

1.5. 环境变量通常具有全局属性

在Linux系统中,环境变量的全局性体现在它们对当前会话及其子进程的广泛影响,能够跨越程序边界传递配置信息,为系统及应用程序提供统一的运行环境。其全局性主要通过以下机制实现:

一、环境变量的全局性特征

会话级共享

环境变量定义在Shell会话中(如Bash),通过export命令导出后,当前会话及其所有子进程均可访问。例如:

bash 复制代码
export API_KEY="12345"  # 导出为全局变量
python app.py          # Python脚本可通过os.environ读取API_KEY

进程继承机制

父进程的环境变量会被子进程自动继承,形成链式传递:Shell → 启动的脚本 → 脚本启动的子程序(如数据库客户端)。

系统级默认变量

系统预定义的全局变量(如PATHHOME)通过配置文件(如/etc/profile)加载,对所有用户生效。

二、全局性的限制

非跨会话共享

环境变量仅在当前Shell会话及其子进程有效。打开新终端窗口时,需通过配置文件(如~/.bashrc)重新加载。

进程隔离性

子进程对环境变量的修改不会反向影响父进程。例如:

bash 复制代码
# 父Shell中
export VAR="parent"
bash  # 启动子Shell
  export VAR="child"  # 修改VAR
  echo $VAR          # 输出"child"
exit
echo $VAR            # 父Shell仍为"parent"
应用场景
  • 开发环境配置 :通过NODE_ENV=production区分开发与生产模式。

  • 服务密钥管理:将数据库密码存储在环境变量中,避免硬编码。

  • 跨脚本通信:父子进程通过环境变量传递参数(如日志级别)。

相关推荐
jsons121 分钟前
rocky8内网离线批量补丁(你之前搭建的架构,多台服务器首选,无订阅)
linux·运维·服务器
进击切图仔23 分钟前
SAM3 微调标注流水线和 Label Studio
java·服务器·前端
Bomangedd31 分钟前
NSK RA25BN 滚子直线导轨技术详解
运维·服务器·经验分享·规格说明书
阿拉斯攀登1 小时前
SPI 设备驱动开发
linux·驱动开发·嵌入式硬件·linux内核·嵌入式·linux驱动·spi
zhou135284822671 小时前
Windows 配置 WSL (Ubuntu) 环境完整指南
linux·windows·ubuntu
本尊是喵1 小时前
AutoDL--FileZilla--VS Code远程连接
运维·服务器
FREEDOM_X1 小时前
Linux 进程间通讯(IPC)——总结
linux·c语言·前端·嵌入式硬件·struts
天空'之城2 小时前
Linux 系统编程 17:零拷贝技术全解
linux·嵌入式·零拷贝技术全解
网络小白不怕黑2 小时前
11.虚拟机模拟路由器实验
linux·运维·服务器·网络
Mapleay2 小时前
Linux 内核编程基础
linux·运维·服务器