环境变量相关知识
目录
目录
谢谢你的阅读,这是对我最大的鼓舞
先说结论:
开始论述:
让我们举个例子
相关指令
创建本地变量
创建环境变量
方法一:
方法二:
删除环境变量
子进程中也有环境变量
第一种:
第二种
第三种
环境变量通常具有全局属性
归纳论述
谢谢你的阅读,这是对我最大的鼓舞
先说结论:
- 环境变量一般指在操作系统中用来指定操作系统运行环境的一些参数。
- 环境变量通常具有某些特殊的用途,在系统中通常具有全局特性。
环境变量是在系统中具有一定全局性质的变量,通常是为了满足某些系统的需求。指明操作系统的某些重要目录在哪。
开始论述:
在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容器使用右值引用场景 移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...