Linux:环境变量

Linux:环境变量

环境变量简述:

环境变量(Environment Variables)是操作系统或程序运行环境中用于动态配置系统行为的一种机制。它们以键值对(Key-Value)的形式存储信息,可以被操作系统、应用程序或脚本读取,从而影响其运行方式。

相信看完简述很多小伙伴都是一脸蒙,为了使这篇文章深入浅出,在谈环境变量之前,先来了解命令行参数

命令行参数:

定义 :启动程序时附加的指令,用于动态调整其行为

这条命令的含义是:以详细列表形式(-l)显示所有文件(包括隐藏文件 -a)

程序如何接收参数?

大家在之前学习C语言的时候,是否有见过main函数是带参数的,而这些参数又有什么意义呢?

上图可以看出,argc代表的是传入了多少个命令行参数,而argv则是传入的命令行参数,而我们在命令行上输入的内容都会存入argv中。

上图我们通过 file /usr/bin/ls 来输出ls命令的属性,可以看到ls也是用c语言写的程序,所以我们在使用ls -a或ls -l 时候程序都会对传入的的命令进行命令行分析,来决定输出的文件形式。

通过上图例子也可以侧面吗反映出,我们的命令行参数是传给谁?其实是传给bash进程,所以可以得出一个结论,bash里至少拥有一张表,argv表,用来支持实现功能选项。

具体认识一个环境变量 PATH

当我们在终端执行一个程序时,系统需要先找到这个程序的位置。此时Bash会去查找一个名为PATH的环境变量。如果我们输入echo $PATH命令,会看到多个由冒号分隔的路径(例如/usr/bin:/bin:/usr/local/bin等)。这就是为什么当我们输入ls这类常用命令时,Bash能直接找到它们------因为这些程序所在的路径已经包含在PATH中。

而当我们运行自己编写的程序时(比如C语言编译生成的test可执行文件),为什么需要用./test这种方式呢?这是因为:

. 代表当前目录,而默认情况下PATH环境变量不包含当前目录

使用 ./ 相当于明确告诉Bash:"直接在当前目录找这个文件,不要去PATH里的路径搜索"

这是一种安全机制 ,防止意外执行当前目录中的未知程序

虽然理论上可以把当前目录添加到PATH环境变量,使用export PATH=$PATH 就可以我们当前路径,添加置环境变量里。

但这样做存在风险:

可能覆盖系统重要命令(比如当前目录有个自建的ls程序)

存在安全隐患(如在共享目录中误执行恶意程序)

降低命令查找效率(PATH路径越多搜索越慢)

当我们从存储角度来理解环境变量时,我们能知道,bash至少会拥有两张表 ,一张命令行参数表,一张为环境变量表。而环境变量一开始是从系统的配置文件中来的,进程bash创建时会从配置文件中的数据来获取并初始化环境变量表。

认识更多的环境变量:

在Linux中,使用命令env,可以查看当前的环境变量表。

SHELL=/bin/bash :环境变量 SHELL 设置为 Bash shell 的路径

HISTSIZE=1000 :记录之前所用过的命令最大容量为1000

PWD=/home/lwh/Test :记录当前路径

LOGNAME=lwh:记录当前登录的用户是谁

HOME=/home/lwh:记录当前家目录

USER=lwh :记录当前用户

获取环境变量:

在代码中我们可以使用getenv函数来获取当前的环境变量

从上图可以看到,使用getenv函数获取当前USER的用户是谁,如果是lwh程序则能正常运行,如果不是那么就不能继续运行。

------------本篇文章就到这边,感谢各位观看

相关推荐
眠修19 分钟前
Kuberrnetes 服务发布
linux·运维·服务器
即将头秃的程序媛3 小时前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
fangeqin3 小时前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
爱奥尼欧5 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天5 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
tan77º6 小时前
【Linux网络编程】网络基础
linux·服务器·网络
笑衬人心。6 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
chanalbert8 小时前
CentOS系统新手指导手册
linux·运维·centos
星宸追风8 小时前
Ubuntu更换Home目录所在硬盘的过程
linux·运维·ubuntu
热爱生活的猴子9 小时前
Poetry 在 Linux 和 Windows 系统中的安装步骤
linux·运维·windows