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

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

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

相关推荐
AlfredZhao11 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户97183563346617 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪18 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
小宇宙Zz1 天前
Maven依赖冲突
java·服务器·maven
不会C语言的男孩2 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
古城小栈2 天前
Unix 与 Linux 异同小叙
linux·服务器·unix