环境变量相关知识
目录
目录
谢谢你的阅读,这是对我最大的鼓舞
先说结论:
开始论述:
让我们举个例子
相关指令
创建本地变量
创建环境变量
方法一:
方法二:
删除环境变量
子进程中也有环境变量
第一种:
第二种
第三种
环境变量通常具有全局属性
归纳论述
谢谢你的阅读,这是对我最大的鼓舞
先说结论:
- 环境变量一般指在操作系统中用来指定操作系统运行环境的一些参数。
- 环境变量通常具有某些特殊的用途,在系统中通常具有全局特性。
环境变量是在系统中具有一定全局性质的变量,通常是为了满足某些系统的需求。指明操作系统的某些重要目录在哪。
开始论述:
在linux系统中,命令还是工具又或是可执行程序,我们都同称为文件,但是为什么使用系统命令可以直接运行使用,而可执行程序却需要加上 . / 呢?为什么不可以和系统命令一样直接运行呢?

这就要引出我们这篇文章的核心:环境变量
什么是环境变量,先理解变量,在语言层面,变量其实只不过是程序可操作的存储区的名称。每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中。
那么环境变量其实也是变量,让我们看看有哪些环境变量
在命令行输入env

(= )等号前是环境变量的变量名字,后面是该环境变量的路径名称。
当然了一个环境变量可以不止有一个路径信息。首先让我们学习查看某个环境变量的指令
命令"echo $THAT" THAT 环境变量名。$类似于指针解引用

这里的每一个变量都有一个或多个路径,他们以 : 划分。
让我们举个例子
先让我们看看ls的指令的路径

发现改路径usr/bin/位于PATH环境变量值中,这有什么联系吗?
这引出了我们的一个新的知识点,当我们在命令行打入ls指令

在寻找时,一旦在某变量的某路径下寻找到了。
例子结论:操作系统会在环境变量中查看是否有某路径下有ls指令。
那么我们可以让我们的可执行程序如指令一样的不自己加寻址就可以运行吗?当然可以使用export命令

这里有个注意点,export 后必须PATH=$PATH :添加指令路径,这样就是让添加路径追加到PATH环境变量路径中,如果不这样写的话,直接PATH=添加指令路径,会将之前的路径覆盖。这样其他的路径下的指令将无法快捷使用了。
但是这样的添加指令是不推荐的:首先这样的添加环境变量只是追加临时的路径,在下次重新登陆后环境变量还是会根据文件信息重置环境变量,如果想永久生效需要更改配置文件。
不要再系统的环境变量添加路径污染系统指令池。
所以我们尽量自己写指令池,而且都要写入在文件中。
这些系统命令怎么添加到环境变量文件呢?安装软件时,会把对应软件的可执行程序拷贝到环境变量的某个路径下,PATH只是环境变量之一,系统还有很多环境变量又来解决不同场景。
相关指令
这里还有于环境变量相关的指令。
1:echo:显示某个环境变量
2:export:设置一个新的环境变量
3:env:显示所有环境变量
4:unset:清除环境变量
5:set:显示本地定义的shell和环境变量
创建本地变量
类似于语言层面的,直接在命令行输入myset=100,回车,
这样myset就是在本地生成变量,可以使用set | grep查看是否在本地定义shell中。

创建环境变量
方法一:
在命令行添加export xxxx=100(xxxx为变量名)

如果为给A_NUMBER初始化,A_NUMBER就不会成为环境变量
方法二:
先创建shell本地变量A_NUMBER
再将本地变量加入环境变量

这里可以这样写A_NUMBER=A_NUMBER=100
这样就可以查询什么变量有什么值了

删除环境变量
使用unset删除刚刚创建的A_NUMBER环境变量

子进程中也有环境变量
第一种:
然我们先了解main函数其实又有参数的,类似于printf,scanf,拥有可变参数。

编译后生成可执行文件,我们执行后

每一个元素都是命令行上以空格分割的字符串。
那么显示代码中的子进程,这里我们要用二级指针的概念为大家讲解
如何在代码中显示环境变量内容呢?其实env是一个指针数组,每个元素都是char*类型的指针,每个都指向一个环境变量字符串。

数组中最后一个指针指向的是NULL空指针,作为数组的最后一个元素,以作为结尾。所以就算我们不知道该数组我们有几个元素,我们也可以遍历数组。



第二种
利用environ外联变量


连接时是有个外界指针environ,指向着env数组,我们需要再我们自己的文件中声明外界变量即可。
关系就是这样的。所以我们可以通过environ访问环境变量。
第一种和第二种的遍历环境变量都是依靠环境变量数组的最后一个元素指向NULL做结尾,类似于字符串结尾'\0'
第三种
使用系统函数getnev()查看某个函数变量
首先包含getnev函数的头文件为stdlib.h



发现再子进程中可以通过getnev查看到想要查看的环境变量。
环境变量通常具有全局属性
环境变量通常具有全局属性,父进程的环境变量可以被子进程继承下去
为什么会继承呢?子进程不能是自己单独的环境变量吗?为什么要继承父进程的环境变量?
为了再进程运行时,需要使用环境变量路径下的各个工具,各个关联程序以及其他资源
现在我们验证子进程继承父进程的环境变量
第一步使用getenv查看是否有MY_ENV自定义环境变量
![]()

编译后发现根本不存在该环境变量。
然后在命令行(test进程的父进程)创建一个自定义的环境变量

env查看,这时命令行的环境变量中就有了MY_ENV环境变量
让我们再一次运行test可执行程序

结果是,在父进程命令行的环境变量MY_ENV,会被子进程继承。
得出结论,子进程的环境变量是在运行时,从父进程中继承的
归纳论述
1:环境变量其实就是可执行的文件(指令,工具也属于文件)在执行时的该文件的寻找路径。
2:在一些进程运行时,依赖的一些工具,这就要依靠环境变量提供的路径寻找工具的路径。
3:在子进程中也有属于自己的环境变量。
4:程序加载到内存中成为进程,该进程所使用的环境变量其实就是其父进程的环境变量继承的。
谢谢能看到这里的靓仔!!!!!!!!!!!!!!
相关文章:
环境变量相关知识
目录 目录 谢谢你的阅读,这是对我最大的鼓舞 先说结论: 开始论述: 让我们举个例子 相关指令 创建本地变量 创建环境变量 方法一: 方法二: 删除环境变量 子进程中也有环境变量 第一种: 第二种 …...
如何快速入门ChatGPT
作为一个AI模型,ChatGPT并不需要像人一样“学习”,它已经通过大量的训练数据和算法进行了预训练,可以回答广泛的问题。 然而,如果你想学习如何使用ChatGPT来进行对话或者问答,以下是一些建议: 一、了解Ch…...
Akka定时任务schedule()方法
Akka定时任务schedule()方法 文章目录Akka定时任务schedule()方法什么是Akka定时任务schedule()方法?如何使用Akka定时任务schedule()方法?如何在actor外部获取Scheduler对象为什么需要提供一个隐式的ExecutionContext对象,用于执行定时任务&…...
Python实现处理和分析大规模文本数据集,包括数据清洗、标注和预处理
处理和分析大规模文本数据集,包括数据清洗、标注和预处理,是自然语言处理(NLP)中非常重要的一步。Python 是一种非常流行的编程语言,拥有丰富的 NLP 库和工具,可以帮助我们完成这些任务。以下是一个简单的实现示例,包括数据清洗、标注和预处理: import re import nltk…...
灌区量测水系统
1)灌区量测水 灌区量测水是水资源管理的基础,是推进节水农业和水价改革的重要手段。常规在主要水闸处,监测闸前和闸后水位及闸门开启状态(闸位),通过实时监测数据,计算过闸流量。要实现全灌区水资源动态配置、精准灌溉࿰…...
3.3 泰勒公式
学习目标: 复习微积分基础知识。泰勒公式是微积分的一个重要应用,因此在学习泰勒公式之前,需要复习微积分的基本概念和技能,包括函数的导数和微分、极限、定积分等。可以参考MIT的微积分课程进行复习和加强。 学习泰勒级数和泰勒…...
ubuntu中通过vscode编译调试ORB-SLAM3
为了在orb-slam3的基础上进行二次开发,这几天花了不少精力,终于搞懂怎么在ubuntu系统中像windows里visual studio中一样方便的打断点调试了,在这里把整个过程再重新梳理一下。 1 首先从安装ubuntu 22.04开始 因为是从实验室毕业先辈那里继承…...
阿里版 ChatGPT 突然上线!
转自:纯洁的微笑 其实早本月初,就传出过不少阿里要推出类ChatGPT的消息。 前几天率先流出的天猫精灵“鸟鸟分鸟”脱口秀版GPT,就是基于大模型的“压缩版”,已经以其惊艳表现吸引了众目光。 如今“原版大菜”上桌,自然一点即着&a…...
《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.12单master集群》
一、架构图 如下图所示: 二、环境信息 主机名K8S版本系统版本内核版本IP地址备注k8s-master-621.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.62master节点k8s-worker-631.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.63worker节点k8s-worker-641…...
MAZDA CX-50没现车怎么办?赶紧去VR看车啊!
爱车一族往往都有过这样的经历:听说某家品牌出了一款心仪的新车,于是一直心心念念想要先睹为快。然而这时候问题就来了:新车从发布到量产上市往往要经历一段过程。没有现车的日子里,就算每天去4S店蹲守也看不到新车。那种心里痒痒…...
结构体全解,适合初学者的一条龙深度讲解(附手绘图详解)
我们知道,C语言是允许我们自己来创造类型的,这些类型就叫做——自定义类型。 自定义类型又包括结构体类型,联合体类型还有枚举类型。 今天的文章,我们就着重讲解这其中的结构体类型。 目录 结构体的声明 1.1结构的基础知识 …...
什么是SD-WAN技术?企业网络优化的利器!
现今,企业网络架构已成为其发展不可或缺的组成部分。针对网络性能优化方面,SD-WAN是一种值得深思熟虑的选择,在企业网络中应用SD-WAN技术能够带来多重好处。 什么是SD-WAN技术以及它是如何工作的? SD-WAN是软件定义的广域网&…...
JAVA练习106- 生命游戏
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、题目-生命游戏 1.题目描述 2.思路与代码 2.1 思路 2.2 代码 总结 前言 提示:这里可以添加本文要记录的大概内容: 4 月12日练习…...
【案例教程】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术
【原文链接】: 基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作实践技术https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247537049&idx3&sn31ef342c4808aed6fee6ac108b899a33&chksmfe6897f3c91f1ee5c4fa8e4eeea34…...
php7类型约束,严格模式
在PHP7之前,函数和类方法不需要声明变量类型 ,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格。 为了解决这个问题,PHP7引入了类型声明。 目前有两类变量可以声明类型: 形参&a…...
2023-04-11 无向图的匹配问题
无向图的匹配问题 之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想 1 最大匹配和完美匹配 二分图回顾 二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多…...
国家出手管人工智能AI了
我是卢松松,点点上面的头像,欢迎关注我哦! 全球都在封杀AI,国家也出手了,人工智能AI的强监管来了!这次反应速度算是很快了。国家出手,AI必须管。 国家网信办拟针对生成式人工智能服务出台管理办法&#…...
day24—选择题
文章目录1.将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为(A)2.已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行&…...
自投递简历以来的第一次面试
投完简历之后HR小姐姐接着就安排了面试,原定时间是今天下午六点,我五点五十进的会议,结果等到六点二十(真的有点不耐烦了说实话)面试官打电话过来了说网络不是很好,所以改成电话面试了。 1、session信息保…...
【C++11】新特性 - 右值引用详解
文章目录STD容器使用右值引用场景移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋值运算符。移动语义只对右值有效,对左值无效原因STD容器使用右值引用场景 移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
计算机系统结构复习-名词解释2
1.定向:在某条指令产生计算结果之前,其他指令并不真正立即需要该计算结果,如果能够将该计算结果从其产生的地方直接送到其他指令中需要它的地方,那么就可以避免停顿。 2.多级存储层次:由若干个采用不同实现技术的存储…...

