当前位置: 首页 > news >正文

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是内建命令。

相关文章:

Linux——环境变量

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

Screen的详细全面安装教程及Screen的用法

Screen可以大大提高终端使用效率&#xff0c;是Linux系统管理和运维的必备技能。当我们开启Screen后&#xff0c;只要Screen进程没有终止&#xff0c;其内部运行的会话都可以恢复。即使网络连接中断&#xff0c;用户也可以重新进入已开启的Screen中&#xff0c;对中断的会话进行…...

生成树、Prufer序列的计数问题:0912T1

看到生成树计数&#xff0c;很容易想到生成树计数 然后发现每个点有度数限制&#xff0c;我们可以先考虑枚举每个点的度数&#xff08;也可以是Prufer 序列中的出现次数&#xff09; 假设出现次数为 a a a&#xff0c;可以得出其生成树方案为 n ! ∏ ( a i − 1 ) ! \frac{…...

SQL_牛客网_SQL264_求每个登陆日期的次日留存率

牛客每个人最近的登录日期(五) 牛客每天有很多人登录&#xff0c;请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login)记录表&#xff0c;简况如下: 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的数据仓库基础设施工具&#xff0c;它可以将结构化的数据文件映射为一张数据库表&#xff0c;并提供类SQL查…...

【数据结构】树的基础知识及三种存储结构

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …...

ABB 3BHB003688R0101接口模块

通信接口&#xff1a;接口模块通常具有多种通信接口&#xff0c;如以太网、串行通信、Modbus、Profibus等&#xff0c;以便与其他设备和系统进行数据交换。 协议支持&#xff1a;它们支持各种通信协议&#xff0c;确保与不同制造商的设备和控制系统兼容。 数据转换和适配&…...

精简 jre 涉坑记录

主要参考&#xff1a;https://zhuanlan.zhihu.com/p/91496457 主要问题&#xff1a; 1&#xff09;jre 中有 client 和 server 之分。参考&#xff1a;关于JDK的Server和Client模式的切换_jacksonary的博客-CSDN博客 2&#xff09;对 copy 出来的 rt 进行打 zip 包时&#x…...

Java程序员学习算法路线规划总结

文章目录 前言&#xff1a;必须清楚得基本数据结构&#xff1a;1.需掌握哪些算法&#xff1f;2.学习步骤以及路线 前言&#xff1a;必须清楚得基本数据结构&#xff1a; 数组&#xff08;Array&#xff09; 链表&#xff08;Linked List&#xff09; 栈&#xff08;Stack&…...

火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术

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

深挖“范围经济”穿越产业周期:TCL电子持续繁荣的密码

作者 | 曾响铃 文 | 响铃说 1878年&#xff0c;爱迪生创立了爱迪生电灯公司&#xff0c;14年后&#xff0c;摩根将该公司与另外两家合并成通用电气公司&#xff08;GE&#xff09;。 从一个小小的碳丝直流电灯泡开始&#xff0c;历经数次改弦更张&#xff0c;穿越两次世界大…...

Elasticsearch:使用 ESRE 和生成式 AI 了解 TLS 日志错误

作者&#xff1a;DAVID HOPE 本博客介绍了 Elasticsearch 相关性引擎 (ESRE​​) 及其 Elastic Learned Sparse Encoder 功能的新颖应用&#xff0c;特别是在日志分析中。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 包含一系列重要功能&#xff0c;可增强搜索能力…...

Swing程序设计(3)JDialog窗体

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

类和对象(1)

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

学会用命令行创建uni-app项目并用vscode开放项目

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 创建 uni-app 项目 命令行创建 uni-app 项目 编译和运行 uni-app 项目&#xff1a; 用 VS Code 开发 uni…...

java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ...

项目开发遇到下面这个报错了&#xff01; 问题原因 直接说原因&#xff0c;就是因为进程间不能直接传递对象&#xff0c;应该传递该Binder对象的映射&#xff08;代理对象&#xff09;&#xff0c;所以类型转换就出错了。如果在同一个进程中&#xff0c;直接传递对象没有关系&a…...

AIGC(生成式AI)试用 3 -- 专业主题

何为专业&#xff1f; 主要研究某种学业或从事某种事业 我的理解可能是在某个方向、某个行业&#xff0c;专业的更靠谱、说了更算、表达的更晰&#xff0c;结果更有说服力 本次提问&#xff1a;你我的专业 生成式AI知道你我的专业吗&#xff1f;生成式AI如何诠释你…...

rsyslog-日志管理 logrotate-日志轮转

日志的管理的方式&#xff0c;以及怎么自己写一个管理日志的小脚本&#xff0c;其实也不能算脚本 管理日志的进程 rsyslogd&#xff1a;绝大部分日志记录&#xff0c;和系统操作有关&#xff0c;安全&#xff0c;认证sshd,su&#xff0c;计划任务at,cron… httpd/nginx/mysql: …...

类和对象续

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

SpringCloud:Feign实现微服务之间相互请求

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

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Unity3D中Gfx.WaitForPresent优化方案

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

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

高频面试之3Zookeeper

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

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...