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区分开发与生产模式。

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

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

相关推荐
雪碧聊技术1 小时前
linux(centos7)如何执行python脚本
linux·python3·爬虫脚本·linux安装python3·linux运行爬虫脚本
lbb 小魔仙1 小时前
Ubuntu 22.04 安装 Docker 完整步骤(附镜像加速配置)
linux·ubuntu·docker
Full Stack Developme4 小时前
Linux 多种压缩格式,优缺点和适用场景
linux·运维·服务器
旖旎夜光4 小时前
Linux(4)(下)
linux·学习
TG:@yunlaoda360 云老大8 小时前
华为云国际站代理商GeminiDB的企业级高可用具体是如何实现的?
服务器·网络·数据库·华为云
Shanxun Liao8 小时前
Cenots 7.9 配置多台 SSH 互信登陆免密码
linux·运维·ssh
j_xxx404_8 小时前
Linux:第一个程序--进度条|区分回车与换行|行缓冲区|进度条代码两个版本|代码测试与优化
linux·运维·服务器
looking_for__9 小时前
【Linux】Ext系列文件系统
linux
OliverH-yishuihan10 小时前
开发linux项目-在 Windows 上 基于“适用于 Linux 的 Windows 子系统(WSL)”
linux·c++·windows
南棱笑笑生11 小时前
20251224给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时确认ssh服务【内置dropbear】
linux·c语言·ssh·rockchip