【Linux】8. 环境变量

news2024/11/24 15:25:48

1. 环境变量的引入

先描述一个现象,我们在执行二进制可执行程序的时候,是需要找到其所在位置的(程序要运行必须先加载到内存,是因为冯诺依曼体系结构规定CPU只能从内存中读取数据),所以这也就是为什么我们在运行前带上./的原因,可以让操作系统找到并执行对应的指令,那么这时候,我们就好奇了,那指令在执行的时候前面为啥不带./呢?
答案:操作系统需要提前做好准备工作(会将操作系统中的配置文件内的软件默认的安装路径导到内存当中),构建出一个内存级变量(环境变量PATH)
操作系统在启动shell的时候,将PATH导入到shell的上下文环境当中,在执行指令时,通过PATH当中的路径来查找指令对应的位置
在这里插入图片描述
在这里插入图片描述
上述的PATH也只是解决一个应用场景,如何查找命令的路径
操作系统中还存在许多问题?
比如说当前登录系统的用户是谁,主机名是谁,历史命令的条数是多少,显示器的配色方案是啥?
所以针对这一系列的应用场景,就需要要求操作系统在启动bash命令行解释器时,就必须预先设置好一批未来可能会用到的变量(全局变量),这批变量就叫环境变量

从解释型语言来理解环境变量:
C语言/C++中是可以定义变量的,同样的在命令行上也能进行变量的定义。
而且shell也是进程,malloc或者new是可以在运行的过程中给我们申请空间,也就意味着进程在运行期间是可以对空间进行调整的(只要存在空间就可以保存数据,所以环境变量本质上就是一段数据:“字符串”),所以环境变量的导入也就是在进程中定义或者malloc/new加载进来

2. 环境变量的概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
(如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。)
环境变量通常具有某些特殊用途
在系统当中通常具有全局特性

3. 常见的环境变量

3.1 PATH

指定命令的搜索路径(详细内容看上面的引入)

3.2 USER

在这里插入图片描述
在这里插入图片描述

3.3 PWD

在这里插入图片描述

3.4 其他一些环境变量

在这里插入图片描述
环境变量存在的意义:在不同的应用场景下,可以让用户访问环境变量来达到目的(方便用户使用)

4. 和环境变量相关的命令

4.1 echo: 显示某个环境变量值

4.2 export: 设置一个新的环境变量

4.3 env: 显示所有环境变量

在这里插入图片描述
首先bash是一个系统进程,而./mycmd 运行程序后,该程序变成进程,而该进程又是bash的子进程(媒婆:王婆招实习生,创建子进程进行命令执行)
通过以上结果可以得出以下结论:
环境变量具有全局属性,是因为会被子进程继承下去(环境变量本来就是定义给bash使用的)
至于子进程为什么要继承下去呢?
–因为存在不同的应用场景(例如:让bash找指令路径PATH,用户身份识别 USER)需要子进程去完成(也就需要获取到环境变量)
所以这时候,我们也能理解环境变量的全局性和本地变量的局部性(只在当前进程bash下有效)
在myval 并未被导入到全局时,也就只有bash可以使用,而被导入过后其子进程也可使用

4.4 set: 显示本地定义的shell变量和环境变量

4.5 unset: 清除环境变量

在这里插入图片描述

5. 通过代码如何获取环境变量

5.1 命令行参数的概念

程序名+选项==命令行参数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

提问

在这里插入图片描述

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

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

相关文章

洛谷P5717-三角形分类

洛谷P5717-三角形分类 题目 这道题更像是初中题,但是怎么能完整的按照题目的意思来解决呢,说实话这个题卡了我有一会儿,要做一次性做出这个题,我觉得需要搞清楚if-if 和if-else if-else if,试想这两个的区别是什么&am…

ChatGPT有意识吗?

​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) ChatGPT是一个计算机程序,它没有意识。它只是根据预设的算法和规则来处理输入和输出。虽然它可以模拟人类的对话,但它没有自己的思想或感觉。它只是根据程序设…

ROS 下 激光扫描仪 YDLidar-G4 使用

环境配置: ubuntu20.04 LTS ROS noetic 编程工具:vs code,远程通过ssh访问 扫描仪:YDLidar-G4 YDLidar驱动: YDLidar SDK YDLidar ROS 功能包 1 . YDLidar-SDK通信协议 雷达扫描输出的数据以十六进制格式输出到通信…

Linux文本之sed流编辑器

一、sed的相关知识及其工作流程 1)sed编辑器的介绍 sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓…

使用HDFS底层文件进行HBase跨集群数据迁移

目录 一、概述 二、环境信息 三、HBCK2下载和编译 四、具体操作步骤 4.1 数据同步 4.2 添加元数据 4.3 重新分配region 一、概述 客户集群机房迁移,我们部署的集群也要完成跨集群迁移hbase 表,这里选择迁移Hadoop底层数据来实现hbase的表迁移。 …

Plant Simulation 模型保存历史记录

Plant Simulation 建模是一个长时间的过程,所以做好模型保存历史记录很重要,这次分享一个OOTB(开盒即用/系统自带)的记录保存历史记录的功能。 文中截图于 Plant Simulation 16.0.5 目录 1.功能设置与说明2.使用场景3.总结 1.功能…

Selenium自动化测试中的PageObject模式

PageObject模式简介 众所周知,UI页面元素常常是不稳定的,在使用Selenium编写WebUI自动化测试用例时,随着测试脚本的增加,维护和更新这些元素便成为一个令人头疼的问题。 在普通模式下,脚本直接定位并操作元素&#xf…

链表中的经典问题

一、反转链表 反转一个单链表:一种解决方案是按原始顺序迭代结点,并将它们逐个移动到列表的头部。 方法1:迭代 C struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev NULL;struct ListNode* curr head;while (curr) {struct ListN…

字节跳动软件测试面试记:二面被按地上血虐,所幸Offer已到手

在互联网做了几年之后,去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好,更重要的是,它是对你专业能力的背书,大厂工作背景多少会给你的简历增加几分竞争力。 但说实话,想进大厂还真没那么容易。最近面试字…

Linux中与“系统网络状态”相关的内核数据结构

六、系统网络状态相关的数据结构 6.1 ifconf \linux-2.6.32.63\include\linux\if.h /* Structure used in SIOCGIFCONF request. Used to retrieve interfaceconfiguration for machine (useful for programs which must know allnetworks accessible). */ struct ifcon…

腾讯云与中电金信发布联合核心方案

5月11日,以“聚力革新,行稳致远”为主题的 “腾讯金融云国产化战略峰会”在北京举办,来自金融业、科技侧、研究机构的专家学者同聚一堂,共同探讨银行核心下移方法论以及国产化转型实践等话题。会议期间,中电金信副总经…

Java面试(2)数据类型

数据类型 1. Java有哪些数据类型 Java基本数据类型 这八种基本类型都有对应的包装类分别为:Byte、Short、Integer、Long、Float、Double、Character、Boolean 。 引用数据类型 引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚…

AI低代码平台遍地开花,AI对于低代码到底是帮手还是对手?

AI对于低代码平台到底是帮手还是对手? 近日,CSDN举办的新程序员大会中,对于AI在代码领域的能力进行了5个层级的定义。并且进行了大量的测试,发现当下的AI已经可以去到初级程序员了,而更为强大的GPT-4的代码能力甚至还有…

Goby 漏洞更新 | 铭飞 CMS list 接口 sqlWhere 参数 sql 注入漏洞

漏洞名称:铭飞 CMS list 接口 sqlWhere 参数 sql 注入漏洞 English Name:MCMS list Interface sqlWhere Sql Injection Vulnerability CVSS core: 7.5 影响资产数:3091 漏洞描述: MCMS 是一套基于 java 开发的轻量级开源内容…

【时空权衡】

目录 知识框架No.0 时空权衡一、基本思想 No.1 计数排序二、分布计数 No.2 散列法 知识框架 No.0 时空权衡 一、基本思想 其实时空权衡:是指在算法的设计中,对算法的时间和空间作出权衡。 本文主要是是用空间来换时间的。(应该是这样吧) 对问题的部分或…

同样是做大模型的科技公司,为啥差距这么大呢?

2022年OpenAI亏了30多亿元, 站在风口上,谁的压力会小呢? 【科技明说 | 每日看点】站在风口上。OpenAI公司在2022年亏得十分“灿烂”,和往年同比几乎翻了一倍,亏损约达5.4亿美元,折合人民币约31…

微服架构基础设施环境平台搭建 -(五)Docker常用命令

微服架构基础设施环境平台搭建 -(五)Docker常用命令 本文主要列出了Docker常用的命令 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -(一)基础环境准备 微服架构基础设施环境平台搭建 -(二&am…

富文本输出如何避免XSS

有时网站为了美观,会允许用户输入一些富文本,这样在显示的时候,就可以显示的更友好。虽然在输入富文本的时候在客户端进行了控制,但是,仍然难易避免一些攻击者通过抓包篡改数据绕过客户端的控制。因此,在服…

【飞行棋】多人游戏-微信小程序开发流程详解

可曾记得小时候玩过的飞行棋游戏,是90后的都有玩过吧,现在重温一下,这是一个可以二到四个人参与的游戏,通过投骰子走棋,一开始靠运气,后面还靠自己选择,谁抢占先机才能赢,还可以和小…

Redis 三大特殊数据类型常见命令

Geospatial 朋友的定位,附近的人,打车距离计算 底层是 Zset,即可以使用Zset的命令操作Geospatial Redis3.2 开始支持的 1.添加地理位置 两极无法添加经度:-180 ~ 180(度)纬度:-85.05112878 ~ 8…