Linux——环境变量

前言大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。

感言:每天的认知都在被刷新。

1:基本概念

环境变量(environment variables):⼀般是指在操作系统中⽤来指定操作系统运⾏环境的⼀些参数

2:环境变量表

环境变量表

当用户登陆,系统会自动创建bash,而bash会生成环境变量表,它是一个字符指针数组,如下图

数组中每个指针指向了一个以"\0"结尾的环境字符串

**👉:**环境变量在系统中通常具有全局性

👉**:**子进程会继承父进程的环境变量表

3:命令行参数表

在讲命令行参数表之前,我们先观察一下下面这段代码:

这里就需要刷新一下认知

**①:**我们平时所写的main函数其实是有参数的

**②:**main函数并不是程序的开始位置,有一个start函数,调用了main函数。

图中

argv[] → 指针数组,里面存放的是bash将用户指令解析过后的参数

argc → 参数的个数

当我们输入 ./code -a 去执行这段代码时,如下图,bash将指令解析过后,会一一放入到命令行参数表当中。图中的 -a -b -c 是为了用户能够通过自定义设置,来实现自己想要完成的目标。

留一个疑问:为什么code -a 不能够直接执行?而 ls -l 能够直接执行?
带着上述疑问我们来思考一下:

当用户输入对应指令时,bash会将指令一一解析,放入到如下图的命令行参数表当中,但是别忘了先前我们提到的:用户登陆时,bash就会自动生成一个环境变量表!bash在将指令放入到命令行参数表时同时会在环境变量表中去查询ls指令,对应的查找方法是,将 PATH 环境变量中的路径参数,插入到 ls 前面,即在PATH路径下去寻找是否存在 ls 指令,事实是:PATH路径中当然存在ls,于是乎bash找到了ls指令,然后成功实现指令,而其中 -l 又是老祖宗想要实现的自定义目标,就正如我们上面代码中的 -a -b -c。

注1:我们来看看环境变量 PATH是怎样的?

注2:现在来回答上述疑问,因为环境变量 PATH 中没有找到 code 这条指令,因此无法执行。 (其实可以将 code 加入到 PATH 搜索路径中的任意一个路径处,但是不推荐,会污染指令池。还有一种方法是在 PATH 的搜索路径中额外添加code所在的路径。)

注3:环境变量最开始是从系统的相关配置文件中来的

当我们登陆时,系统创建bash时,会自动调用bashrc 和 bash_profile 中的内容,构建相应的环境内容。

注4:环境变量远不止PATH一个,通过env指令能够查看当前所有环境变量。

4:与环境变量有关的指令

env:查看所有环境变量

echo $name:查看指定环境变量内容

export name=xxxxxx:导入一个环境变量,不能有空格

unset name:释放指定环境变量

char * s= getenv("name") : 通过函数获取指定环境变量的方式

注1:其中export是内建指令,在执行时不需要创建子进程,而是由bash亲自执行,其他内建指令还有pwd、cd等。

注2:bash内部除了环境变量,还存在本地变量,本地变量只在bash内部使用,通过set指令可以查看当前所有的环境变量以及本地变量

相关推荐
胡八一10 分钟前
解决docker: ‘buildx‘ is not a docker command.
运维·docker·容器
HaoHao_01028 分钟前
AWS Serverless Application Repository
服务器·数据库·云计算·aws·云服务器
Golinie1 小时前
【C++高并发服务器WebServer】-2:exec函数簇、进程控制
linux·c++·webserver·高并发服务器
Rhys..1 小时前
Jenkins pipline怎么设置定时跑脚本
运维·前端·jenkins
励志去大厂的菜鸟1 小时前
系统相关类——java.lang.Math (三)(案例详细拆解小白友好)
java·服务器·开发语言·深度学习·学习方法
Icoolkj1 小时前
微服务学习-Nacos 注册中心实战
linux·学习·微服务
老王聊主机1 小时前
2025年华为云一键快速部署幻兽帕鲁联机服务器教程
运维·服务器·华为云
qq_243050791 小时前
Netmask:网络掩码生成和转换程序!全参数详细教程!Kali Linux 教程!黑客渗透测试!
运维·网络·web安全·网络安全·黑客·渗透测试·kali linux
Moniicoo1 小时前
Linux中关于glibc包编译升级导致服务器死机或者linux命令无法使用的情况
linux·运维·服务器
Zfox_2 小时前
应用层协议 HTTP 讲解&实战:从0实现HTTP 服务器
linux·服务器·网络·c++·网络协议·http