Linux——环境变量

✅<1>主页::我的代码爱吃辣
📃<2>知识讲解:Linux——环境变量
☂️<3>开发环境:Centos7
💬<4>前言:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

目录

一.基本概念

二.Linux系统中常见的环境变量

1.查看指定的环境变量

2.PATH

3.HOME

4.SHELL

三.环境变量的组织方式

四.添加环境变量

五.环境变量的继承

六.获取环境变量

1.命令行第三个参数

2.通过第三方变量environ获取

3.通过系统调用获取或设置环境变量


一.基本概念

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

 查看当前LInux系统的环境变量:

指令:

env

windows下的环境变量:

环境变量本质就是一种变量,一种K/V的对用关系,由变量名和变量值。

二.Linux系统中常见的环境变量

1.查看指定的环境变量

echo $NAME #NAME:环境变量名称

 例如:

2.PATH

指定命令的搜索路径.

  1. 我们平时写的一些C/C++代码,编译成可执行程序以后,通过 ./ 运行,本质是告诉操作系统可执行程序的位置。
  2. 但是系统自带的指令,本质也是C语言写的程序,为什么系统的指令不需要指定路径呢?
  3. 就是因为环境变量PATH里面存储了指定命令的搜索路径。

3.HOME

指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)。

当我们每次登录系统的时候,系统就会记录下登录用户,并且填充HOME环境变量,并且创建bash进程帮我们执行 cd /home/XXX 的命令,进入我们自己的家目录,这就是我们为什么一进入系统,默认就在自己的家目录里。

普通用户:

root用户:

4.SHELL

当前Shell,它的值通常是/bin/bash。

三.环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串,表的最后一个位置是NULL。

四.添加环境变量

我们刚刚介绍了PATH环境变量,指定命令的搜索路径.那么我们可不可以将自己写的可执行程序的查询路径也添加进PATH里,这样我们的可执行程序,也可以实现不需要 ./ 就可以直接执行了。

测试代码:test.c

#include <stdio.h>
#include <unistd.h>int main()
{int n = 3;while (n){printf("原神启动:%d\n", n);sleep(1);n--;}
}

makefile:

ttest:test.cgcc -o $@ $^
.PHONY:clean
clean:rm -rf ttest

 方法一:

使用export将我们该可执行程序的路径导入PATH中,后续可以不用加 ./ 就可以直接运行可执行程序,因为操作系统可知直接通过环境变量中的地址找到可执行程序。

export PATH=路径

 注意:

这样会有一个很尴尬的问题就是我们的PATH中只有这一个路径了,即之前的TATH环境变量中的其他路径被我们导入的路径覆盖了。

我们这样导入环境变量:

export PATH=$PATH:路径

方法二:

将可执行程序拷贝到 /usr/bin目录下,/usr/bin目录就是系统默认的命令存储的路径。

sudo cp ./ttest /usr/bin

本质将可执行程序放进/usr/bin目录下的过程,就是软件安装的过程。

上述这种添加变量的方式,就是将命令添加到系统环境中,还有一种添加变量的方式是将变量添加到本地,这种变量我们称之为本地变量。

例如:

hello=100

这就是添加了一个本地变量。

五.环境变量的继承

  1. 环境变量是可以被子进程继承的。
  2. 我们使用 export 导入的进程,就可以使用 echo 命令查询得到,echo 本质也是一个程序,之所以echo 可以查询到我们导入bash的环境变量本就是,echo 继承了bash的环境变量。
  3. 但是仅仅只是环境变量可以被子进程继承,本地变量是不可以子进程继承。

六.获取环境变量

1.命令行第三个参数

我们先看看命令行参数:

#include <stdio.h>
int main(int argc, char *argv[])
{int i = 0;for (i = 0; i < argc; i++){printf("%s ", argv[i]);}printf("\n");return 0;
}

注意:

  1. argv是一个指针数组,数组每一个元素都是一个char*,每一个char*都指向了一个字符串。
  2. argc是argv数组的元素个数。

 注意:

  1. argv数组存储的就是我们命令行输入的以空格为分隔的字符串。
  2. 顺序是从左往右

 命令行的第三个参数:

测试代码:

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for (; env[i]; i++){printf("%s\n", env[i]);}return 0;
}

运行结果:

注意:

  1. env也是一个指针数组,每一个数组元素存储的就是一个环境变量。
  2. 证明了环境变量是可以被子进程继承的。
  3. 应证了环境变量的组织方式。

2.通过第三方变量environ获取

 测试代码:

#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;//环境变量表int i = 0;for (; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}

运行结果:

 注意:

  • libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明。

3.通过系统调用获取或设置环境变量

系统调用:

getenv()

getenv参数是环境变量名,返回的是环境变量值字符串,如果没找到对应的环境变量,就返回NULL。

测试代码:

[wq@iZuf6hzw565sb02fomef99Z 23_9_12]$ HELLO=100#本地变量
[wq@iZuf6hzw565sb02fomef99Z 23_9_12]$ export MYHELLO=100#环境变量
#include <stdio.h>
#include <stdlib.h>
int main()
{if (getenv("PATH")){printf("PATH:%s\n", getenv("PATH"));}if (getenv("MYHELLO")){printf("MYHELLO:%s\n", getenv("MYHELLO"));}if (getenv("HELLO")){printf("HELLO:%s\n", getenv("HELLO"));}return 0;
}

 注意:

  1. 环境变量通常具有全局属性,可以被子进程继承下去。
  2. 我们之前说过本地变量不会被子进程继承,上面的代码也可以看出来。
  3. 但是为什么使用命令echo就可以查询到本地变量?因为echo是内建命令。

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

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

相关文章

嵌入式学习之链表

对于链表&#xff0c;要重点掌握链表和数组区别和实现&#xff0c;链表静态添加和动态遍历&#xff0c;链表中pointpoint-next,链表节点个数的查找&#xff0c;以及链表从指定节点后方插入新节点的知识。

服务器巡检表-监控指标

1、巡检指标 系统资源K8S集群NginxJAVA应用RabbitMQRedisPostgreSQLElasticsearchELK日志系统 2、巡检项 检查项目 检查指标 检查标准 系统资源 CPU 使用率 正常&#xff1a;&#xff1c;70% 低风险&#xff1a;≥ 70% 中风险&#xff1a;≥ 85% 高风险&#xff1a;≥ 9…

图片怎么压缩大小?这样压缩图片很简单

在日常生活中&#xff0c;我们常常需要处理各种各样的图片文件&#xff0c;但有时候图片的大小可能会成为问题。比如在上传图片到网站或者将图片发送给朋友时&#xff0c;过大的图片可能会导致上传速度变慢或者占用过多内存。这时&#xff0c;我们就需要用到图片压缩了&#xf…

【Python】爬虫基础

爬虫是一种模拟浏览器实现&#xff0c;用以抓取网站信息的程序或者脚本。常见的爬虫有三大类&#xff1a; 通用式爬虫&#xff1a;通用式爬虫用以爬取一整个网页的信息。 聚焦式爬虫&#xff1a;聚焦式爬虫可以在通用式爬虫爬取到的一整个网页的信息基础上只选取一部分所需的…

使用生成式 AI 增强亚马逊云科技智能文档处理

数据分类、提取和分析对于处理大量文档的组织来说可能具有挑战性。传统的文档处理解决方案是手动的、昂贵的、容易出错的,并且难以扩展。利用 Amazon Textract 等 AI 服务,亚马逊云科技智能文档处理(IDP)允许您利用业界领先的机器学习(ML)技术来快速准确地处理任何扫描文档或图…

Blender之锁定摄像机到视图方位

文章目录 当你在blender 中时&#xff0c;想要让你的摄像机跟随你的视图方位&#xff0c;以方便你的后期的制作&#xff0c;那应该怎么半&#xff1f; 先点击摄像机的图标&#xff0c;进入摄像机视图 然后按一下键盘的N 键&#xff0c;进入编辑模式&#xff0c;选择视图 最后…

【业务功能107】微服务-springcloud-springboot-Sentinel容器安装-熔断降级限流

Sentinel 在微服务架构下&#xff0c;会涉及到 微服务A需要远程调用其他的微服务B,C,D等的接口&#xff0c;比如商品服务接口&#xff0c;需要调用库存服务数据&#xff0c;秒杀服务数据等&#xff0c;这里就会衍生一个长链路的调用过程&#xff0c;那么一旦下游需要被调用的数…

800V威迈斯车载充电机

800V威迈斯车载充电机VMAX二合一车载充电系统高压平台&#xff0c;将传统的6.6KW双向OBC、2.5KW DC\DC进行系统级的高功率密度集成&#xff1b;采用磁集成技术方案&#xff0c;创新性地将产品的原边绕组&#xff0c;高压绕组及低压Busbar进行系统级的集成&#xff1b;OBC功能转…

力扣(LeetCode)算法_C++——稀疏矩阵的乘法

给定两个 稀疏矩阵 &#xff1a;大小为 m x k 的稀疏矩阵 mat1 和大小为 k x n 的稀疏矩阵 mat2 &#xff0c;返回 mat1 x mat2 的结果。你可以假设乘法总是可能的。 示例 1&#xff1a; 输入&#xff1a;mat1 [[1,0,0],[-1,0,3]], mat2 [[7,0,0],[0,0,0],[0,0,1]] 输出&am…

【STL】模拟实现map和set {带头结点的红黑树;红黑树的核心结构;红黑树的迭代器;红黑树的插入和查找;map和set的封装}

模拟实现map和set map和set是红黑树的两种不同封装形式&#xff0c;底层使用同一颗泛型结构的红黑树。set是红黑树的K模型&#xff1b;map是红黑树的KV模型。 下面的代码和讲解着重体现红黑树的底层实现和map\set上层封装的衔接。关于二叉搜索树性质&#xff0c;map和set的介…

UMA 2 - Unity Multipurpose Avatar☀️四.UMA人物部位的默认颜色和自定义(共享)颜色

文章目录 🟥 人物颜色介绍1️⃣ 使用默认颜色2️⃣ 使用自定义颜色🟧 UMA自定义颜色的作用🟨 自定义颜色还可作为共享颜色🟥 人物颜色介绍 UMA不同部位的颜色分为默认的内置颜色和我们新定义的颜色. 1️⃣ 使用默认颜色 比如不勾选UseSharedColor时,使用的眼睛的默认…

品牌策划经理工作内容|工作职责|品牌策划经理做什么?

一位美国作家曾说过“品牌是一系列期望、记忆、故事和关系&#xff0c;他们共同构成了消费者最终原则一个产品或者服务的原因。” 所以&#xff0c;品牌经理这个岗位主要是创造感知价值主张&#xff0c;激发消费者购买这个品牌后带来的感知价值&#xff0c;这种回报的本质相对…

Git 基本操作【本地仓库与远程仓库的推送、克隆和拉取】

文章目录 一、Git简介二、Git的下载安装三、Git常规命令四、新建本地仓库五、本地分支操作六、Git远程仓库七、远程仓库克隆、抓取和拉取八、总结九、学习交流 一、Git简介 Git是分布式版本控制系统&#xff08;Distributed Version Control System&#xff0c;简称 DVCS&…

使用rpm重新安装包

#查询 rpm -qa | grep cloudstack #卸载 rpm -e cloudstack-agent-4.18.0.0-1.x86_64 #安装 rpm -ivh cloudstack-agent-4.18.0.0-1.x86_64.rpm

【PowerQuery】PowerQuery学习路径

PowerQuery这么好,怎么去学习呢?相信很多初读本书的朋友迫切的希望了解整个PowerQuery全景知识和它提供的相应的功能。但是对于PowerQuery来说,一开始就会进行自定义函数的构建当然也是不可能的,这里有相应的学习路径来进行由浅入深的学习,帮助读者更好的理解PowerQuery的…

leetcode 649. Dota2 参议院

2023.9.11 先简化一下题意&#xff1a;本题的意思就是每次投票中&#xff0c;前面的议员可以干掉后面的议员(当然是干掉敌对方的)&#xff0c;然后他将参与下一次的投票&#xff0c;而被干掉的议员则不能参与投票了。 如&#xff1a;[R D D] -> [R D] ->[R D]->[D] 。…

【算法基础】时间复杂度和空间复杂度

目录 1 算法的评价 2 算法复杂度 2.1 时间复杂度&#xff08;Time Complexity&#xff09; 2.1.1 如何计算时间复杂度&#xff1a; 2.1.2 常见的时间复杂度类别与示例 2.2 空间复杂度 2.2.1 如何计算空间复杂度 2.2.2 常见的空间复杂度与示例 3 时间复杂度和空间复杂度…

【附安装包】2023最新版Python安装详细教程!一键安装,永久使用

一、python官网 Python官网主要有python的About (简介)、Downloads (下载)、Documentation(文档)、Community (团体)、Success Stories (成功案例)、News (新闻)、Events (事件动态)等栏目。 Python官网地址&#xff1a;https://www.python.org/ 【领取方式见文末】 二、在…

免费的低代码助力售后工单管理:快速搭建,高效定制

编者按&#xff1a;本文旨在阐述免费且高效的低代码平台在实现售后工单管理系统方面的优势、功能及其作用。这些优势和功能对于提高企业的服务质量和效率具有重要的意义。 关键词&#xff1a;低代码平台、售后工单系统、私有化部署 1.售后工单系统有什么作用&#xff1f; 售后工…

day55:C++ day5,运算符重载剩余部分、静态成员、继承

#include <iostream> #include <cstring> #define pi 3.14 using namespace std;class Shape { protected:double round;double area; public://无参构造Shape():round(40),area(100){cout<<"Shape::无参构造函数&#xff0c;默认周长为40&#xff0c;面…