【Linux】7. 环境变量

news2024/11/15 4:51:05

1. 环境变量的引入

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

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

2. 常见的环境变量

2.1 PATH

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

2.2 USER

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

2.3 PWD

在这里插入图片描述

2.4 其他一些环境变量

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

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

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

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

3.3 env: 显示所有环境变量

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

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

3.5 unset: 清除环境变量

在这里插入图片描述

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

4.1 命令行参数的概念

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

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

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

相关文章

java http get post 和 发送json数据请求

浏览器请求效果 HttpUtils 工具类 package com.bysen.common.utils.http;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ConnectException; impo…

一次业务系统无法使用对应的oracle数据库性能分析过程

一、问题概述 自助机系统及其它HIS等相关业务程序从3日早上8:20分左右出现使用异常,通过关闭自助机应用服务器及现场工程师KILL相关锁进程后正常。后续数据库工程师通过远程方式接入数据库环境进行问题排查,通过对相关日志等信息的深入分析,…

教育单位启动网络安全排查,查询IP地址能做什么?

近日,南京教育局主办了一场“网安2023”教育行动,各级教育单位都将开始教育系统网络安全责任制,做实各项教育网络安全工作,提升教育系统网络安全防护能力。 本次行动采取远程安全检查与现场检查相结合方式对各级教育单位进行网络…

Java爬取壁纸图片

Java爬取壁纸图片 前言依赖爬取图片工具类 -- WallHavenDownloadToDir.java 测试 前言 自己写了一个项目 想加一个功能:自动爬取壁纸发送给用户。说干就干,Python能干的,Java也能干! 参考文章: jsoup的使用 Java爬虫…

STL-Vector容器

vector数据结构和数组非常相似,也称为单端数组 vector与普通数组区别: 数组是静态空间,而vector可以动态扩展 vector容器的迭代器是支持随机访问的迭代器 目录 创建vector容器 vector 容器赋值 vector容器的大小 vector插入和删除 ve…

java计算矩形的面积和周长的方法

在生活中,我们常常需要计算某个矩形的面积和周长,如我们经常用的计算器就是个不错的选择,它可以计算出任意一个矩形的面积和周长。那么,如果你想使用 Java编程语言来计算矩形的面积和周长,你该如何做呢?今天…

基于WiFi做呼吸频率检测-python版

一、概述 本Demo无需机器学习模型,Demo功能涉及的理论主要参考了硕士学位论文《基于WiFi的人体行为感知技术研究》,作者是南京邮电大学的朱XX,本人用python复现了论文中呼吸频率检测的功能。Demo实现呼吸速率检测的主要过程为: …

C# 对PdfiumViewer工具栏进行自定义,实现放大缩小,首页, 尾页,上一页等功能。

文章目录 前言PdfiumViewer工具栏扩展1 创建winform工程,UI界面2 打印预览3 放大功能4 缩小功能5 按比例缩放6 全屏7 首页和尾页8 上一页和下一页9 页码输入框10 显示当前预览的页码 小结 前言 关于PdfiumViewer的介绍 C# 使用PdfiumViewer实现对PDF文档打印预览&a…

【论文学习】ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation

ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation 目录 ECAPA-TDNN: Emphasized Channel Attention, Propagation and Aggregation摘要1 介绍2 DNN说话人识别系统2.1 Extended-TDNN x-vector2.2 基于ResNet的r-vector 3 提出的ECAPA-TDNN架构3.1 依赖于…

【Unity之c#专题篇】—核心章题单实践

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

电脑开关机-第14届蓝桥杯省赛Scratch初级组真题第1题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第130讲。 电脑开关机,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程初级组真题第1题&#…

flstudio21有什么新功能,主题随心换,苹果M2/1家族芯片原生支持

FL Studio 21推出 – 新功能和改进。如果您从事音乐制作,那么您不可能没有听说过 FL Studio,或者很可能已经使用过这个音乐程序。好了,新版本的 FL Studio 21 DAW已经准备好向公众发布了。Image-line 正在为 2023 年的大型揭幕准备最终细节。…

go 源码解读 - sync.WaitGroup

go version 1.19.7 在 Go 语言中,sync.WaitGroup 是一个并发编程的同步工具,用于等待一组 Goroutine 执行完毕。 当需要等待多个 Goroutine 完成任务后才能执行下一步操作时,我们可以使用 sync.WaitGroup 实现协程间的同步。它提供了 Add()…

测试:概念篇

目录 简单介绍测试 我们先简单的介绍一下测试工程师 简单来看看测试和开发的区别 测试的基本概念 什么是需求 BUG 的概念 测试用例 什么是测试用例? 为什么有测试用例 测试周期 开发模型 瀑布模型: 螺旋模型: 敏捷软件开发 V …

PostgreSQL 查找重复数据(二)

创建表和测试数据: -- DROP TABLE IF EXISTS people; CREATE TABLE people (id integer GENERATED ALWAYS AS IDENTITY PRIMARY KEY,name varchar(50) NOT NULL,email varchar(100) NOT NULL );INSERT INTO people(name, email) VALUES (张三, zhangsantest.com),(李…

操作系统考试复习-—第四章 分段式 段页式存储方式

分段从存储管理方式:一方面是通常的程序都可以分为若干段,另一方面是实现和满足信息共享,信息保护,动态链接以及信息的动态增长等需要。也都是以段为基本单位实现的。所以说,分段存储管理方式更符合用户和程序员多方面…

JWT认证

一、什么是JWT 官网地址: https://jwt.io/introduction/ jsonwebtoken(JWT)是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信任&…

华为nqa实验拓扑案例

bqa是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络信息进行统计。如图1所示,接口备份与NQA联动功能配置相对简单,只需在本端RouterA上配置NQA测试例,并在RouterA的备份接口上配置接口备份与NQA联动&…

自定义组件中如何注入Spring底层的组件

1.概述 自定义的组件要想使用Spring容器底层的一些组件,比如ApplicationContext(IOC容器)、底层的BeanFactory等等,那么只需要让自定义组件实现XxxAware接口即可。此时,Spring在创建对象的时候,会调用XxxA…

搞懂 API,API 常见技术使用场景分享

API(应用程序编程接口)是一种允许软件应用程序之间相互交互和通信的技术。以下是API常用的使用场景: 应用程序开发 API通常被用于网站或应用程序的开发中,以便在不同平台、语言及数据库之间获取数据或进行消息传递。例如&#xff…