Linux操作系统学习---初识环境变量

目录

 ​编辑

环境变量的概念:

  小插曲:main函数的第一、二个参数

获取环境变量信息:

  1.main函数的第三个参数

  2.查看单个环境变量

  3.c语言库函数getenv()

  和环境变量相关的操作指令:

  1.export---导出环境变量:

  2.unset---清除环境变量:

  3.env指令

   4.set---显示所有环境变量和本地变量:

环境变量的特性:

  1.可以被子进程继承的全局性:

  2.由bash引入

结尾;


环境变量的概念:

  环境变量的基本格式是 "内容"="内容",中间不能用空格分开。粗略一点来说,他是程序执行时所依赖文件的路径。

  先思考一个问题:为啥我们在运行代码时非得像下面这样加上 ./ ,而执行系统的指令又不用呢(如下图)?这就和今天的环境变量有关了。

  小插曲:main函数的第一、二个参数

  main函数实际可以有三个参数,这里先介绍两个,一个是整形;另一个是字符指针数组(形参名称具体是啥不重要哈),第二个参数也叫命令行参数。

  下面通过例子来帮助理解:main函数的第一个整形参数代码接收指令的个数,第二个字符指针数组参数存放每个指令字符串的首地址。

  可以看到运行 用./code执行这个可执行程序时我象征性的带了四个选项,都被这两个参数记录下来了。由于Linux下的指令大多也是用c语言实现,因此使用的系统指令时可以带各种选项就是通过这个原理来实现的。

  当然这里也有蹊跷,我们自己的程序要加上 ./来指定当前路径运行,而系统的指令(如ls、pwd)等等就不用,这就和环境变量有关。

获取环境变量信息:

  1.main函数的第三个参数

   这里我们补充main函数的第三个参数,它和第二个参数一样也是字符指针数组,不同的是它存放各个环境变量字符串的首地址。

  下面的程序打印出的arr数组的内容很多,都是和刚才的env指令显示一样的环境变量。

  2.查看单个环境变量

  刚才都是一次性显示所有的环境变量,这次咱挑其中一个瞧瞧----它就是环境变量PATH,可以以下方式查看它的内容:

  不难看出就是一堆不同的路径,用 : 来分隔。其实我们在执行一个指令时,命令行解释器bash就会默认到这里面去寻找对应的文件并执行其中的内容,系统级的指令(如ls)就在这些路径中的一个里,而我们自己写的程序则没有,就需要使用 ./ 来告诉bash在当前目录下执行。

  3.c语言库函数getenv()

  c语言<stdlib,h>头文件里有一个getenv函数,原型如下,它接受环境变量名称,返回环境变量内容。

  和环境变量相关的操作指令:

  1.export---导出环境变量:

   格式如下,这样可以自己手动添加环境变量。

  2.unset---清除环境变量:

  格式如下,这样可以删除环境变量。

  

  3.env指令

  运行env后可以看到环境变量的内容还蛮多的,在这里就不展示了,有些一看就知道是啥,有的需要着重了解,可以解开一些之前学习时的疑惑。

   4.set---显示所有环境变量和本地变量:

    set指令相较于env更近一层,不仅显示显示环境变量,还显示本地变量()。

环境变量的特性:

  1.可以被子进程继承的全局性:

  由于子进程创建时会和父进程公用一份代码和数据,所以自然而然环境变量也是共同使用的。下面通过在代码中创建子进程来验证

从上面的代码执行结果可以看到父进程先打印了环境变量(有时候子进程先打印),随后进程进行打印,二者打印的内容相同。

  2.由bash引入

  如果使用上面提到的export向系统里添加自己的环境变量或者删除系统本身的环境变量,接着退出系统后重新进入,就会惊奇的发现环境变量貌似自动初始化了。

  上述情况的发生是因为环境变量是存储在操作系统中的,在打开一个新终端时,bash进程创建,从系统的配置文件里读取环境变量,相当于我们正常情况下访问到的环境变量只是一份拷贝,当退出终端后这种文件就会销毁,下一次登陆时又是新的bash进程从配置文件里读取未改变的环境变量。

结尾;

  通过上面的认知,咱就可以明白为啥运行自己的可执行时为啥要用  ./ ,而运行系统指令就不需要的原因了。因为存在环境变量PATH,其中就包含了系统指令的当前的执行目录,因此bash可以直接找到系统指令的执行路径(如ls的),但我们的程序路径不存在于PATH中,就需要通过.来自定当前的路劲。

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

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

相关文章

多视图几何中向量叉乘的矩阵转换 Matrix Transformation for Cross Product in MVG

Title: 多视图几何中向量叉乘的矩阵转换 Matrix Transformation for Cross Product in MVG 文章目录 I. 向量叉乘的矩阵转换恒等式II. 符号计算 Maxima 程序推导III. 推论和关联公式的说明1. 推论2. 应用于对极几何中基本矩阵推导3. 应用于基本矩阵与单应矩阵关系4. 与刚体运动…

支持多种快充协议的取电芯片,支持最大功率140W

前言 在快节奏的现代生活中&#xff0c;人们对于小家电的依赖日益加深&#xff0c;而随之而来的充电问题也日益凸显。传统的充电方式往往受限于电压、电流的限制&#xff0c;难以满足不同设备对电力的多样化需求。而PD快充协议的诞生&#xff0c;则为这一难题提供了全新的解决…

分页查询功能

EmployeeController /** * 员工分页查询 * * param employeePageQueryDTO * return */ GetMapping("/page") ApiOperation("员工分页查询") public Result<PageResult> page(EmployeePageQueryDTO employeePageQueryDTO) { log.info("…

“移门缓冲支架:为家庭安全加码”

在智能家居日益普及的今天&#xff0c;科技不仅改变了我们的生活方式&#xff0c;也提升了家居的安全。移门缓冲支架作为一项结合了现代技术的小型装置&#xff0c;正逐渐成为提升家庭安全的重要配件。它通过吸收门关闭时的冲击力、减缓关门速度以及减少噪音等多重功能&#xf…

力扣96:不同的二叉搜索树

给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff1a;1 卡…

小程序-基于java+SpringBoot+Vue的微信小程序养老院系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

Torchtune在AMD GPU上的使用指南:利用多GPU能力进行LLM微调与扩展

Torchtune on AMD GPUs How-To Guide: Fine-tuning and Scaling LLMs with Multi-GPU Power — ROCm Blogs 这篇博客提供了一份详细的使用Torchtune在AMD GPU上微调和扩展大型语言模型&#xff08;LLM&#xff09;的指南。Torchtune 是一个PyTorch库&#xff0c;旨在让您轻松地…

Java使用replaceAll替换时不使用正则表达式

前言 public String replaceAll(String regex, String replacement) {return Pattern.compile(regex).matcher(this).replaceAll(replacement);}在使用String.replaceAll() 方法时&#xff0c;由于入参时regex &#xff0c;而入参刚好是正则表达式的字符该怎么办&#xff1f;我…

【0346】Postgres内核 Startup Process 通过 signal 与 postmaster 交互实现 (5)

1. Startup Process 进程 postmaster 初始化过程中, 在进入 ServerLoop() 函数之前,会先通过调用 StartChildProcess() 函数来开启辅助进程,这些进程的目的主要用来完成数据库的 XLOG 相关处理。 如: 核实 pg_wal 和 pg_wal/archive_status 文件是否存在Postgres先前是否发…

STM32C011开发(3)----Flash操作

STM32C011开发----3.Flash操作 概述硬件准备视频教学样品申请源码下载参考程序生成STM32CUBEMX串口配置堆栈设置串口重定向FLASH数据初始化FLASH 读写演示 概述 STM32C011 系列微控制器内置 Flash 存储器&#xff0c;支持程序存储与数据保存&#xff0c;具备页面擦除、双字写入…

电商项目高级篇06-缓存

电商项目高级篇06-缓存 1、docker下启动redis2、项目整合redis3、redis改造三级分类业务 缓存 流程图&#xff1a; data cache.load(id);//从缓存加载数据 If(data null){ data db.load(id);//从数据库加载数据 cache.put(id,data);//保存到 cache 中 } return data;在我们…

PS的功能学习

背景差色较大&#xff0c;就魔棒 魔棒的连续就是倒水点的跨越问题 魔棒的容差的选择就有点看经验了&#xff0c;看颜色的统一程度选择 Ctrl D 取消当前所有的选区 至于快速选择工具&#xff0c;和对象选择工具也差不多&#xff0c;只不过控制范围变成了一块一块的&#x…

深度学习实验--初步探索数据增强、优化器对模型的影响

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 这次主要是探究&#xff0c;优化器、数据增强对模型训练的影响&#xff1b;基础篇还剩下几个, 后面的难度会逐步提升;越学&#xff0c;越觉得这个东西很…

新型大语言模型的预训练与后训练范式,谷歌的Gemma 2语言模型

前言&#xff1a;大型语言模型&#xff08;LLMs&#xff09;的发展历程可以说是非常长&#xff0c;从早期的GPT模型一路走到了今天这些复杂的、公开权重的大型语言模型。最初&#xff0c;LLM的训练过程只关注预训练&#xff0c;但后来逐步扩展到了包括预训练和后训练在内的完整…

SQL Server管理员sa登录失败原因

文章目录 一、开启混合登录模式二、启用sa三、更改密码四、登录sa一、开启混合登录模式 用Windows身份登录数据库服务。 在连接名上右键→属性。 在安全性选项卡下,选择【SQL Server和Windows身份验证模式】,点击【确定】,提示需要重启服务。 Win+R,输入指令:services.ms…

logminer挖掘日志归档查找问题

--根据发生问题时间点查找归档文件 select first_time,NAME from gv$archived_log where first_time>2016-03-15 17:00:00 and first_time<2016-03-15 21:00:00; 2016-03-15 17:23:55 ARCH/jxdb/archivelog/2016_03_15/thread_1_seq_41588.4060.906577337 2016-03-15 17:…

如何监控Elasticsearch集群状态?

大家好&#xff0c;我是锋哥。今天分享关于【如何监控Elasticsearch集群状态&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何监控Elasticsearch集群状态&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 监控 Elasticsearch 集群的状态对于确保…

C# 集合(Collection)

文章目录 前言一、动态数组&#xff08;ArrayList&#xff09;二、哈希表&#xff08;Hashtable&#xff09;三、排序列表&#xff08;SortedList&#xff09;四、堆栈&#xff08;Stack&#xff09;五、队列&#xff08;Queue&#xff09;六、点阵列&#xff08;BitArray&…

浏览器的数据六种存储方法比较 :LocalStorage vs. IndexedDB vs. Cookies vs. OPFS vs. WASM-SQLite

在构建该 Web 应用程序&#xff0c;并且希望将数据存储在用户浏览器中。也许您只需要存储一些小标志&#xff0c;或者甚至需要一个成熟的数据库。 我们构建的 Web 应用程序类型发生了显着变化。在网络发展的早期&#xff0c;我们提供静态 html 文件。然后我们提供动态渲染的 h…

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录&#xff0c;有别于基础语法&#xff0c;很多内容只要求会用就行&#xff0c;无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout&#xff1a; 1.3 string以下是字符串的一些简介&#xff1a;字符串…