Linux中的环境变量

一、环境变量定义

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

二、常见环境变量

PATH:指定命令的搜索路径

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

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

HISTSIZE:历史操作的1000条命令

PWD:动态变化的环境变量,记录当前所在路径

三、介绍PATH

我们思考这样一个问题:指令也是可执行程序,我们写好的编译好的c语言也是程序,为什么我们在执行c语言程序时要./a.out带上当前路径,而ls这种指令就不要带路径呢?

这就是环境变量PATH的作用,Linux中存在一些全局设置,表明命令行解释器应该去哪个路径下寻找可执行程序。

系统中的很多配置在我们登录Linux时就已经被加载到bash中了,也就是内存。

当然我们也可以把自己写的代码拷贝到PATH中的一条路径下,这样就可以不带路径执行我们写的程序了,sudo cp myprocess /usr/bin 此操作就相当于把我们自己写的程序安装到Linux系统中。

四、环境变量基本操作

env:查看全部环境变量

echo $xxx:查看某个环境变量

export 环境变量名 = 内容:导入环境变量

unset 环境变量名:取消环境变量

若没有export,就不是环境变量,定义的是本地变量,只在bash内部有效,子进程无法继承。

五、在代码中拿到环境变量

(1)示意图

所以environ\[\]其实是一个二级指针指向env\[\]这个已经存放了所有环境变量的数组指针。

(2)获取环境变量代码

所以我们就可以通过environ\[\]或env\[\]来拿到环境变量

(3)通过环境变量名获取环境变量

用到getenv()函数,头文件#include<stdlib.h>

六、总结

环境变量有系统的全局属性,所以会被子进程继承。

80%命令是bash创建子进程来执行,是普通命令。

20%命令是由bash亲自执行(echo,export),是内建命令。

因为如果export是普通命令,那bash创建子进程运行export,那父进程bash就不会拿到环境变量,因为只有子进程继承父进程,没有父进程继承子进程。

与上文的环境变量做一个总结:bash在启动进程时默认会给子进程两张表,argv\[\]命令行参数表(由用户输入命令行),env\[\](操作系统配置文件表)bash通过各种方式交给子进程。

相关推荐
2601_960567962 分钟前
电商套图自动化效率的工程量化分析——从逐张生成到批量套图的架构演进
运维·架构·自动化
吳所畏惧1 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
DFT计算杂谈1 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
HiDev_1 小时前
【非标自动化】2、认识元器件(确定目标)
运维·自动化
维天说2 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zhang~Ling2 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind2 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的阿森2 小时前
鸿蒙三方库 | harmony-utils之PreferencesUtil首选项数据监听详解
服务器·华为·harmonyos·鸿蒙·huawei
爱写代码的森2 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
中微极客3 小时前
2026主流AI Agent框架技术选型与性能对比
运维·网络·人工智能