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
指定命令的搜索路径.
- 我们平时写的一些C/C++代码,编译成可执行程序以后,通过 ./ 运行,本质是告诉操作系统可执行程序的位置。
- 但是系统自带的指令,本质也是C语言写的程序,为什么系统的指令不需要指定路径呢?
- 就是因为环境变量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
这就是添加了一个本地变量。
五.环境变量的继承
- 环境变量是可以被子进程继承的。
- 我们使用 export 导入的进程,就可以使用 echo 命令查询得到,echo 本质也是一个程序,之所以echo 可以查询到我们导入bash的环境变量本就是,echo 继承了bash的环境变量。
- 但是仅仅只是环境变量可以被子进程继承,本地变量是不可以子进程继承。
六.获取环境变量
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;
}
注意:
- argv是一个指针数组,数组每一个元素都是一个char*,每一个char*都指向了一个字符串。
- argc是argv数组的元素个数。
注意:
- argv数组存储的就是我们命令行输入的以空格为分隔的字符串。
- 顺序是从左往右
命令行的第三个参数:
测试代码:
#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;
}
运行结果:
注意:
- env也是一个指针数组,每一个数组元素存储的就是一个环境变量。
- 证明了环境变量是可以被子进程继承的。
- 应证了环境变量的组织方式。
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;
}
注意:
- 环境变量通常具有全局属性,可以被子进程继承下去。
- 我们之前说过本地变量不会被子进程继承,上面的代码也可以看出来。
- 但是为什么使用命令echo就可以查询到本地变量?因为echo是内建命令。
相关文章:

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

Screen的详细全面安装教程及Screen的用法
Screen可以大大提高终端使用效率,是Linux系统管理和运维的必备技能。当我们开启Screen后,只要Screen进程没有终止,其内部运行的会话都可以恢复。即使网络连接中断,用户也可以重新进入已开启的Screen中,对中断的会话进行…...
生成树、Prufer序列的计数问题:0912T1
看到生成树计数,很容易想到生成树计数 然后发现每个点有度数限制,我们可以先考虑枚举每个点的度数(也可以是Prufer 序列中的出现次数) 假设出现次数为 a a a,可以得出其生成树方案为 n ! ∏ ( a i − 1 ) ! \frac{…...
SQL_牛客网_SQL264_求每个登陆日期的次日留存率
牛客每个人最近的登录日期(五) 牛客每天有很多人登录,请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login)记录表,简况如下: id user_id client_id date 1 2 1 2020-10-12 2 3 2 2020-10-12 3 1 2 2020-10-…...
Hive 基础知识
目录 1.基础概念1.1 定义1.2 组件1.3 元数据1.4 内部表和外部表 2. Hive与关系型数据库的对比3. Hive 数据存储4. 参考文献 1.基础概念 1.1 定义 Hive是一个基于Hadoop的数据仓库基础设施工具,它可以将结构化的数据文件映射为一张数据库表,并提供类SQL查…...

【数据结构】树的基础知识及三种存储结构
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...

ABB 3BHB003688R0101接口模块
通信接口:接口模块通常具有多种通信接口,如以太网、串行通信、Modbus、Profibus等,以便与其他设备和系统进行数据交换。 协议支持:它们支持各种通信协议,确保与不同制造商的设备和控制系统兼容。 数据转换和适配&…...
精简 jre 涉坑记录
主要参考:https://zhuanlan.zhihu.com/p/91496457 主要问题: 1)jre 中有 client 和 server 之分。参考:关于JDK的Server和Client模式的切换_jacksonary的博客-CSDN博客 2)对 copy 出来的 rt 进行打 zip 包时&#x…...
Java程序员学习算法路线规划总结
文章目录 前言:必须清楚得基本数据结构:1.需掌握哪些算法?2.学习步骤以及路线 前言:必须清楚得基本数据结构: 数组(Array) 链表(Linked List) 栈(Stack&…...

火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 数据导入是衡量 OLAP 引擎性能及易用性的重要标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。 作为一款 OLAP 引擎,火山引…...

深挖“范围经济”穿越产业周期:TCL电子持续繁荣的密码
作者 | 曾响铃 文 | 响铃说 1878年,爱迪生创立了爱迪生电灯公司,14年后,摩根将该公司与另外两家合并成通用电气公司(GE)。 从一个小小的碳丝直流电灯泡开始,历经数次改弦更张,穿越两次世界大…...

Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误
作者:DAVID HOPE 本博客介绍了 Elasticsearch 相关性引擎 (ESRE) 及其 Elastic Learned Sparse Encoder 功能的新颖应用,特别是在日志分析中。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 包含一系列重要功能,可增强搜索能力…...

Swing程序设计(3)JDialog窗体
文章目录 前言一、JDialog窗体的介绍二、JDialog窗体的使用 1.JDialog的常用构造方法2.实例展示及分析总结 前言 JDialog窗体是窗体中的另一种类型的窗体,指对话框窗体。与JFrame窗体类似,绝大部分对于JFrame窗体使用的方法,对于JDialog窗体也…...

类和对象(1)
文章目录 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符和封装4.1访问限定符4.2封装 5.类的作用域6.类的实例化6.2结构体内存对齐规则 7.this指针7.2this指针的特性 封装(补充) 1.面向过程和面向对象初步认识 C面向对象但不纯面向…...

学会用命令行创建uni-app项目并用vscode开放项目
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 创建 uni-app 项目 命令行创建 uni-app 项目 编译和运行 uni-app 项目: 用 VS Code 开发 uni…...

java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ...
项目开发遇到下面这个报错了! 问题原因 直接说原因,就是因为进程间不能直接传递对象,应该传递该Binder对象的映射(代理对象),所以类型转换就出错了。如果在同一个进程中,直接传递对象没有关系&a…...
AIGC(生成式AI)试用 3 -- 专业主题
何为专业? 主要研究某种学业或从事某种事业 我的理解可能是在某个方向、某个行业,专业的更靠谱、说了更算、表达的更晰,结果更有说服力 本次提问:你我的专业 生成式AI知道你我的专业吗?生成式AI如何诠释你…...
rsyslog-日志管理 logrotate-日志轮转
日志的管理的方式,以及怎么自己写一个管理日志的小脚本,其实也不能算脚本 管理日志的进程 rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron… httpd/nginx/mysql: …...

类和对象续
目录 包 自定义包 包的访问权限控制 常见的包 Static成员 静态成员变量 静态成员方法 代码块 构造块 静态块 重写 继承 继承是啥? 父类成员访问 子类中访问父类成员变量 两者不同名 两者同名 子类中访问父类对的成员方法 super 子类构造方法 …...

SpringCloud:Feign实现微服务之间相互请求
文章目录 🎉欢迎来到Java学习路线专栏~SpringCloud:Feign实现微服务之间相互请求 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页:IT陈寒的博客🎈该系列文章专栏:Java学习路线📜其他专栏…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...