当前位置: 首页 > news >正文

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程序则能正常运行,如果不是那么就不能继续运行。

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

相关文章:

  • LLaMA-Factory大模型微调全流程指南
  • 【rabbitmq基础】
  • Nature Communications上交、西湖大学、复旦大学研发面向机器人多模式运动的去电子化刚弹耦合高频自振荡驱动单元
  • 从零开始学Rust:结构体(struct)详解
  • leetcode每日一题:数组美丽值求和
  • 【重点】文件摆渡系统如何简化跨平台跨网络的文件传输?
  • 使用Python构建Kafka示例项目
  • 视频设备轨迹回放平台EasyCVR综合智能化,搭建运动场体育赛事直播方案
  • es8实现向量检索与关键词匹配混合搜索
  • 算法题(114):矩阵距离
  • 计算机网络 3-1 数据链路层
  • 从零开始开发HarmonyOS应用并上架
  • AI 防口误指南_LLM 输出安全实践
  • 问题:tomcat下部署eureka双重路径
  • Laraver SQL日志 服务开发
  • wsl2配置proxy
  • git配置github
  • [c语言日寄]文件操作
  • OpenAI发布PaperBench,AI代理复现研究能力面临新考验
  • Ubuntu 22.04 一键部署openManus
  • 做网站 用什么语言好/南昌seo外包公司
  • 南通建网站/武汉百度推广代运营
  • 网站开发的主要工作/第三方网站流量统计
  • 珠海网站制作推广/常德今日头条新闻
  • 视频模板网站/公众号运营收费价格表
  • 怎么做门户网站/软文广告例子