环境变量相关知识

news2024/9/26 1:20:20

目录

目录

谢谢你的阅读,这是对我最大的鼓舞

先说结论:

开始论述:

让我们举个例子

相关指令

 创建本地变量

创建环境变量

方法一:

方法二:

删除环境变量

子进程中也有环境变量

第一种:

第二种

第三种

环境变量通常具有全局属性

归纳论述



谢谢你的阅读,这是对我最大的鼓舞

先说结论:

  • 环境变量一般指在操作系统中用来指定操作系统运行环境的一些参数。
  • 环境变量通常具有某些特殊的用途,在系统中通常具有全局特性。

        环境变量是在系统中具有一定全局性质的变量,通常是为了满足某些系统的需求。指明操作系统的某些重要目录在哪。

开始论述:

        在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:程序加载到内存中成为进程,该进程所使用的环境变量其实就是其父进程的环境变量继承的。


 谢谢能看到这里的靓仔!!!!!!!!!!!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/430370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PlumGPT】与PlumGPT开启智能对话之旅

文章目录 一、前言二、PlumGPT介绍篇三、PlumGPT登录篇四、PlumGPT体验篇1、与PlumGPT聊天2、让PlumGPT翻译3、让PlumGPT创作4、请PlumGPT写推荐信5、让PlumGPT展示图片6、让PlumGPT充当百科小助手 五、PlumGPT总结篇 PlumGPT入口体验链接:https://plumgpt.com 一、…

【Kubernetes】 故障转移和自愈能力机制详解

文章目录一. 引言1. 介绍Kubernetes2. 故障转移和自愈能力的重要性二. Kubernetes 概览1. Kubernetes 架构2. Kubernetes 组件和功能三. 故障转移1. 如何定义故障转移2. Kubernetes 中的故障转移机制2.1 健康检查2.2 Pod 和 ReplicaSet2.3 控制器和故障转移3. Pods和ReplicaSet…

LS1028+TSN+Vxworks实时系统解决方案

TSN(时间敏感网络)正在各类市场兴起。它可以为过去不曾存在的全新应用提供实时通信。 例如,将控制功能从驱动中解耦出来并移至边缘计算。下一代自动控制器可以并行处理视频流和控制流等各种工作负载,在一台机器上运行全部深度学习…

【高危】Google Chrome V8 类型混淆漏洞(CVE-2023-2033)

漏洞描述 Google Chrome V8是Google开源的JavaScript和WebAssembly引擎,被用在Chrome和Node.js等浏览器和平台中。 该项目受影响版本存在类型混淆漏洞,攻击者可通过诱导用户打开恶意链接来触发此漏洞,可能导致浏览器崩溃或执行任意代码。由…

跟姥爷深度学习2 TensorFlow的基本用法

一、前言 前面我们浅用TensorFlow做了个天气预测,虽然效果不咋样,但算是将整个流程跑通了。这一篇我们在之前基础上对TensorFlow的一些参数进行简单介绍,在接口文件的基础上了解各参数的简单含义和用法。 二、再次构建模型 我们先将之前的…

基于组合双向拍卖的共享储能机制研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

规模化敏捷框架之LeSS

Scrum 是目前比较流行的敏捷框架,Scrum 敏捷开发团队由产品负责人(Product Owner)、敏捷教练(Scrum Master)、软件开发人员和其他合作人员组成。团队在这个指导框架下协同工作、开发、创造和交付有价值的产品来解决复杂…

易基因:METTL3介导的m6A甲基化谱调控肌肉干细胞成肌细胞状态转换|发育分化

2020年9月29日,《Cell Death Discovery》(IF: 7.109)杂志发表了题为“A defined N6-methyladenosine (m6A) profile conferred by METTL3 regulates muscle stem cell/myoblast state transitions”的研究论文,研究通过MeRIP-seq&…

静态时序分析Static Timing Analysis2——建立时间和保持时间的时序检查

文章目录前言一、建立时间检查1、寄存器到寄存器2、输入端口到寄存器3、寄存器到输出端口4、输入端口到输出端口二、保持时间检查1、寄存器到寄存器2、输入端口到寄存器3、寄存器到输出端口4、输入端口到输出端口前言 2023.4.11 继续学习STA,前面听的感觉好迷糊&am…

Android---性能优化之图片压缩

质量压缩 质量压缩会用到 Bitmap.compress()。 public boolean compress(Bitmap.CompressFormat format, int quality, OutputStream stream); 这个方法有三个参数: Bitmap.CompressFormat format:图像的压缩格式(jpeg ,png, webp&#xf…

C++STL大全----容器篇(上)

(一)概念 STL,英文全称 standard template library,中文可译为标准模板库或者泛型库,其包含有大量的模板类和模板函数,是 C 提供的一个基础模板的集合,用于完成诸如输入/输出、数学计算等功能。…

数据库第一个实验

啦啦啦啦啦,数据库终于要实验了,很担心做不好,要是挂了怎么办 只是自己的作业,可能会有问题,欢迎前来指正 一、题目(100分) 一、创建后面给出的这6个表(20分) 二、用不同…

Ubuntu20.04 个人配置和i3美化

Ubuntu20.04 个人配置和i3美化 本文是基于个人习惯和审美,快速配置一个新ubuntu的步骤。脚本在资源里给出,但仍有部分配置文件需在脚本执行后手动修改,文中已用红色字体标出 更新apt源 备份原来的源更换阿里源 # 备份 sudo mv /etc/apt/sources.list…

Camunda流程引擎查询接口API介绍

Camunda流程引擎底层采用了mybatis作为ORM框架,并封装了一套自己的数据查询接口,以下是几种可以Camunda流程引擎中查询数据的方式。 Java 查询API 。使用 Fluent Java API 来查询流程引擎实体,比如流程实例、任务等。REST 查询API 。通过 RE…

SpringMVC启动流程方式分析-三种方式

SpringMVC的启动方式 本文所叙述的是springmvc放入Tomcat servlet容器的启动方式 第一种Web.xml文件配置 使用传统的web.xml配置文件, 指定DispatchServlet ,当然如果想要父子容器的效果指定一个ContextLoaderListener 上下文加载监听器就行&#xff…

少儿编程 电子学会图形化编程等级考试Scratch三级真题解析(选择题)2022年12月

2022年12月Scratch等级考试一级真题解析 选择题(共25题,每题2分,共50分) 1、默认小猫角色和气球角色都是显示状态,小猫程序如下图所示,气球没有程序,点击绿旗,舞台上最终显示的效果是 A、可能出现6个不同位置的小猫和6个小球 B、可能出现6个不同位置的小猫和1个气球…

【嵌入式Linux】Jetson nano GPIO应用 | 驱动开发 | 官方gpiolib、设备树与chip_driver

GPIO子系统 0.暴露给应用层 应用 $ echo 79 > /sys/class/gpio/export //导出79号gpio 引脚,使得可在应用层访问 $ echo out > /sys/class/gpio/gpio79/direction //设置 为输出 $ echo 1 > /sys/class/gpio/gpio79/value //输出高电平 开灯 $ echo 0…

win10系统部署-zabbix客户端

一、下载win10系统 zabbix客户端 下载地址: 根据自己需求下载 https://www.zabbix.com/cn/download二、win系统安装客户端 1、解压安装包 c:\zabbix 2、编辑zabbix\conf\zabbix_agentd.conf文件 Server127.0.0.1,IP IP是你的zabbix服务器端地址 ServerActive127…

C++的GUI库

1. Qt Qt是一个跨平台的C应用程序开发框架。广泛用于开发GUI程序,这种情况下又被称为部件工具箱。也可用于开发非GUI程序,例如控制台工具和服务器。 2. MFC 微软基础类库(英语:Microsoft Foundation Classes,简称MFC&a…

罗丹明-聚乙二醇-生物素RB-PEG-Biotin;Biotin-PEG-Rhodamine,PEG2000

RB-PEG-Biotin 罗丹明-聚乙二醇-生物素 中文名称:罗丹明-聚乙二醇-生物素 英文名称:RB-PEG-Biotin 分子量(PEG ):2000、3400、5000,其他分子量可以定制。 用 途:仅供科研实验使用。 性状&…