Linux环境变量个人笔记

基本概念

环境变量(environment variables) 是用来指定操作系统运行环境 的一些参数 。我们在编写C/C++代码的时候,在链接时虽然不知道链接的动态静态库在哪里,但照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找 。 环境变量在系统中具有全局特性

常见环境变量

PATH : 指定命令的搜索路径。我们平时直接输入pwd,而不需要带上这个命令的地址,是因为pwd指令的地址已经被存储到PATH当中,系统会自动遍历PATH中的地址寻找pwd。

HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

SHELL : 当前Shell,它的值通常是/bin/bash


使用"echo $环境变量名"打印环境变量的信息


分别使用两个不同的用户对HOME进行测试


环境变量有关指令

echo: 显示某个环境变量值

export: 设置一个新的环境变量

env: 显示所有环境变量

unset: 清除环境变量 HOME 的关系

set: 显示本地定义的shell变量和环境变量

环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以'\0'结尾的环境字符串。这张环境表是通过命令行解析得到的。

命令行解析:

命令其实是由程序实现的,是程序就会有main函数,而main函数其实是可以有参数的。对于操作系统而言,我们输入的命令就是字符串,命令行会被Shell拆散成一个个字符串,再把这些字符串传给main函数,这就是命令行解析

命令行解析具体工作流程

在终端输入 ./test 并回车时,Shell 做了以下几件事:

  • 读取输入 :Shell 读取你输入的字符串 ./test
  • 解析命令行 :Shell 通过空格分割字符串,得到参数列表。
    • argc = 1(只有一个参数 ./test)。
    • argv[0] = "./test"
  • 查找可执行文件
    • 因为命令以 ./ 开头,Shell 直接定位到当前目录下的 test 文件,跳过 PATH 搜索
    • 创建子进程并执行
      • Shell 调用 fork() 创建子进程。
      • 子进程调用 execve("./test", argv, env)
      • execve 是系统调用,它会:
        • 加载 ./test 程序到内存。
        • 将 Shell 的环境变量(env)复制一份给新程序。
        • 跳转到 test程序的main函数入口

这里补充一下main函数的参数形式:无参数带命令行参数,此外还有带环境变量参数

继续上面的例子,假如我们输入的是./test时,argc是1,因为接收到一个命令,然后argv0存放的就是指向./test地址字符串的指针。

获取环境变量的方式

下面代码演示获取环境变量的方式:


用字符指针数组打印所有环境变量


用Printenv来查看所有环境变量


使用getenv()函数在程序中获取环境变量并打印


环境变量的全局性

环境变量通常具有全局属性,可以被子进程继承下去

下面代码示例在未向shell中添加自定义环境变量时,子进程提示无法找到MYENV,向shell中添加自定义环境变量后,子进程能够找到该环境变量,从而证明了环境变量的全局属性

相关推荐
落羽的落羽11 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
刚入门的大一新生11 小时前
Linux-进程控制
linux·运维·服务器·c++
上火的金鱼妹11 小时前
K8S基础组件作用和关系整理
linux·运维·服务器·kubernetes
Vcaker12 小时前
Linux学习25-harbor私有仓库部署
linux·运维·学习
刃神太酷啦12 小时前
Redis 进阶核心:持久化 (RDB/AOF)、事务与主从复制全解析----《Hello Redis!》(5)
linux·c语言·数据库·c++·redis·缓存·bootstrap
编程的一拳超人12 小时前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
醉颜凉12 小时前
网络安全必学:粘性MAC地址(Sticky MAC)原理与应用全解析
运维·服务器·网络·安全·web安全
时凌云.12 小时前
【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)
java·linux·macos
不懂的浪漫13 小时前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
晊晌_h13 小时前
嵌入式从0到精通——Linux C|TCP 并发服务器实现方案详解
服务器·开发语言·tcp/ip