【Linux】Linux 环境变量
参考博客:https://blog.csdn.net/sjsjnsjnn/article/details/125533127
一、环境变量
1.1 基本概念
- 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数
- 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
- 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。
1.2 常见的环境变量
- PATH : 指定命令的搜索路径
- HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
- SHELL : 当前Shell,它的值通常是/bin/bash
1.3 查看环境变量
- 我们可以通过echo命令来查看环境变量
1.3.1 查看PATH的环境变量
echo $PATH

1.3.2 查看HOME的环境变量
- 对于不同的用户,它们的
$HOME变量都不一样 - 对于普通用户和
root用户,查看的结果如下

1.3.3 查看SHELL环境变量
SHELL通常指的是命令解释器所在的位置
echo $SHELL

1.4 添加环境变量
- 对于一个个
shell命令,它们都是一个个可执行程序,比如下面的ll指令 - 它们的位置存储在环境变量中,因此系统可以直接找到并执行

- 但是我们自己写的程序,如果没有把位置加入到环境变量,那么就无法直接运行,需要指定路径

- 一般我们可以通过
export命令,添加程序的路径到$PATH下,比如
export PATH = $PATH ~/C++/linux_study/linux-address
- 这样就把我们的程序路径添加到了环境变量
- 再次执行,发现已经可以找到程序所在的位置,并且执行了

1.5 环境变量相关命令
1.5.1 env命令
- 显示所有环境变量

1.5.2 set命令、export命令
set:显示本地定义的shell变量和环境变量export:设置一个新的环境变量,还可以将本地变量导出环境变量;
下面的实例演示了添加一个本地变量,然后通过export将本地变量变为环境变量,通过env命令可以查询

1.5.3 unset命令
unset命令用于清除环境变量和本地变量
下面演示了清除环境变量myval后,再次查询环境变量,已经找不到对应的值了

1.6 环境的组织方式
每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。

1.7 通过代码获取环境变量
1.7.1 main函数命令行参数
main函数可以通过外部命令行添加参数,其中int argc表示参数的数量,char* argv[]表示参数的字符串数组(其中第一个参数为自身),char* env[]表示系统环境变量字符串数组
int main(int argc, char *argv[], char *env[])
- 下面的代码,通过命令行,传入了参数
-test1,通过指定参数可以指定调用的函数
void test1()
{std::cout << "This is test1 function" << std::endl;
}int main(int argc, char *argv[], char *env[])
{if (argc < 2){std::cout << "argc < 2" << std::endl;return -1;}if (strcmp(argv[1], "-test1") == 0){test1();}else if (strcmp(argv[1], "-test2") == 0){test2(env);}else if (strcmp(argv[1], "-test3") == 0){test3();}else if (strcmp(argv[1], "-test4") == 0){test4();}return 0;
}
运行结果如下
Pasted image 20250604182838
main函数除了有命令行参数,还有环境变量,也就是第三个参数。它是用来获取环境变量的
- 下面的代码,遍历并打印出来了所有的系统环境变量
void test2(char *env[])
{for (int i = 0; env[i]; ++i){std::cout << "env[" << i << "] = " << env[i] << std::endl;}
}
打印的结果如下

通过第三方变量environ获取,这是系统提供的一个获取环境变量的第三方变量,是一个二级指针

- 通过
extern变量访问到外部的字符串指针,打印所有的环境变量
void test3()
{extern char **environ;for (int i = 0; environ[i]; ++i){std::cout << "environ[" << i << "] = " << environ[i] << std::endl;}
}

使用getenv()函数获取环境变量对应的值
- 可以通过
man命令查看对应的手册
man getenv
![[Pasted image 20250604183813.png]]
- 比如打印对应的
PATH、SHELL和HOME环境变量的值
void test4(){std::cout << "PATH = " << getenv("PATH") << std::endl;std::cout << "SHELL = " << getenv("SHELL") << std::endl;std::cout << "HOME = " << getenv("HOME") << std::endl;
}
运行结果如下

更多资料:https://github.com/0voice
相关文章:
【Linux】Linux 环境变量
参考博客:https://blog.csdn.net/sjsjnsjnn/article/details/125533127 一、环境变量 1.1 基本概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C代码的时候,在链接的时候&am…...
OpenCV在图像上绘制文字示例
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 OpenCV中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数,用于在图像上绘制文字。这个函数是putText(),它是命名空间cv中的函数,其声明如下ÿ…...
Java 抗量子算法:构建后量子时代的安全基石
一、量子计算带来的加密挑战 在传统加密体系中,RSA、ECC 等公钥算法依赖大数分解和离散对数问题的难解性。然而,量子计算机的 Shor 算法可在多项式时间内破解这些算法,使现有加密体系面临颠覆性威胁。例如,2048 位 RSA 密钥的破解…...
Kubernetes 集群到 Jumpserver
以下是使用 ServiceAccount Token(令牌) 连接 Kubernetes 集群到 Jumpserver 的 详细分步指南,包括权限配置、Token 获取和常见问题排查。 1. 创建 ServiceAccount 并分配权限 1.1 创建 ServiceAccount 在 Kubernetes 集群中创建一个专用于…...
Android7 Input(十)View 处理Input事件pipeline
概述: 本文主要描述View对InputEvent事件pipeline处理过程。 本文涉及的源码路径 frameworks/base/core/java/android/view/ViewRootImpl.java InputEvent事件处理 View处理input事件是调用doProcessInputEvents方法,如下所示: void doProcessInputEvents() {//…...
图像数据如何表示为概率单纯形
目录 图像数据灰度图像彩色图像概率单纯形条件应用场景 图像数据 图像数据通常由像素值组成,这些像素值可以是灰度值(对于黑白图像)或RGB值(对于彩色图像)。每个像素的值通常在0到255之间。为了将图像数据表示为概率单…...
(11)Service Mesh架构下Java应用实现零信任安全模型
Service Mesh架构下Java应用实现零信任安全模型 📌 TL;DR: 本文详细介绍如何在Service Mesh架构中实现零信任安全模型,包括身份认证、授权控制、加密通信和持续监控四大核心技术,以及与Istio、Envoy等组件的集成方案。 目录 零信任安全模型概述关键技术实现最佳实践Service…...
什么是内网映射?如何将内网ip映射到外网访问?
随着互联网科技和信息技术的快速发展,很多原理及技术开始被应用到互联网信息科技领域,其中内网iP映射就成为非常普通常见的一个操作。那么什么是内网ip映射?如何将内网ip映射到外网? 一、什么是内网ip映射? 简单理解…...
为什么要选择VR看房?VR看房有什么优点?
VR看房:革新传统,重塑体验 在当今社会,虚拟现实(VR)技术正以前所未有的速度渗透到我们生活的各个领域,其中VR看房作为房地产领域的重要创新。本文将讨论为什么要选择VR看房以及VR看房的主要优点࿰…...
linux 串口调试命令 stty
linux 串口调试命令 stty 文章目录 linux 串口调试命令 sttystty 常见命令选项:常用参数:一次性设置串口所有常见参数总结 stty(设置终端行模式)命令是用来配置终端设备(包括串口设备)的输入和输出行为的工…...
C++STL-vector的使用
vector的定义方式 方式1:构造某一个类型的空容器 vector<int> v1;//构造一个int类型的空容器 方式2:构造一个含有n个val的某类型容器 vector<int> v2(10, 2);//构造一个含有10个2的int类型的容器 方式3:拷贝构造某类型容器 …...
图简记。。
模仿: algorithm-journey/src/class059/Code01_CreateGraph.java at main algorithmzuo/algorithm-journey Code01_CreateGraph C语言: #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAXN 11 #define MAX…...
pytorch基本运算-范数
引言 前序学习进程中,已经对pytorch基本运算有了详细探索,文章链接有: 基本运算 广播失效 乘除法和幂运算 hadamard积、点积和矩阵乘法 上述计算都是以pytorch张量为运算元素,这些张量基本上也集中在一维向量和二维矩阵&#x…...
uefi协议设计目的
在EDK2的术语体系中,GUID定义的是协议的标识符,而具体实现的函数集合称为协议的实现。它们是同一协议的不同抽象层次,以下是详细解释: 1. 协议(Protocol)的两层含义 (1) 协议规范(接口定义&am…...
springcloud openfeign 偶现 Caused by: java.net.UnknownHostException
背景 最近查看日志发现某服务偶现Caused by: java.net.UnknownHostException 同时查看eureka的access.log 出现如下异常 10.xxx.xxx.xxx - - [27/May/2025:23:57:29 0800] “PUT /eureka/apps/{appName}/{host}:xxx-job:8082?statusUP&lastDirtyTimestamp1748351637173 H…...
Transformer实战——词嵌入技术详解
Transformer实战——词嵌入技术详解 0. 前言1. 词嵌入基础2. 分布式表示3. 静态嵌入3.1 Word2Vec3.2 GloVe 4. 使用 Gensim 构建词嵌入5. 使用 Gensim 探索嵌入空间6. 动态嵌入小结系列链接 0. 前言 在本节中,我们首先介绍词嵌入的概念,然后介绍两种实现…...
[pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在本账号CSDN资源下载,或者访问链接: http://www.umlchina.com/url/quizad.html 如果需要提取码:umlc 文件夹中的“300道软件方法强化自测题2025…...
Vue3入门指南:从零到精通的快速上手
齐爷学vue3 一、Vue3入门 vite:前端构架工具,构建速度快于webpack。轻量快速、对TS,JSX,CSS开箱即用、按需编译。 创建Vue3工程 1.在想要创建Vue3的位置打开cmd,执行如下命令。 npm create vuelatest 2.功能只选择…...
前端常见错误
1. TypeError: Cannot read property xxx of undefined 错误原因:尝试访问一个 undefined 或 null 对象的属性 / 方法。 示例代码: const user { name: "John" }; console.log(user.address.street); // user.address 为 undefined 解决方…...
吴恩达MCP课程(5):mcp_chatbot_prompt_resource.py
前提条件: 1、吴恩达MCP课程(5):research_server_prompt_resource.py 2、server_config_prompt_resource.json文件 {"mcpServers": {"filesystem": {"command": "npx","args"…...
关于DDOS
DDOS是一门没什么技术含量的东西,其本质而言是通过大量数据报文,发送到目标受害主机IP地址上,导致目标主机无法继续服务(俗称:拒绝服务) DDOS灰产人期望达成的预期目标,几乎都是只要把对面打到 …...
云服务器自带的防御可靠吗
最近有不少朋友问我,云服务器自带的防御靠不靠谱。就拿大厂的云服务器来说,很多都自带5G防御。但这5G防御能力,在如今的网络攻击环境下,真的有些不够看。 如今,网络攻击手段层出不穷,攻击流量更是越来越大。…...
Java详解LeetCode 热题 100(27):LeetCode 21. 合并两个有序链表(Merge Two Sorted Lists)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:迭代法(哨兵节点)3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:递归法4.…...
设计模式——抽象工厂设计模式(创建型)
摘要 抽象工厂设计模式是一种创建型设计模式,旨在提供一个接口,用于创建一系列相关或依赖的对象,无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建,相比工厂方法模式,能创建一个产品族。该模…...
基于LocalAI与cpolar技术协同的本地化AI模型部署与远程访问方案解析
文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址前言 各位极客朋友们!今天要向大家推荐一套创新性的本地部署方案——LocalAI技术架构。这款开源工具包能够将普通配置的笔记本电脑转化为具备强大算力的AI工作站,轻松实现…...
Linux 云服务器部署 Flask 项目(含后台运行与 systemd 开机自启)
一、准备工作 在开始正式部署之前,请确认以下前提条件已经准备好: 你有一台运行 Linux 系统(CentOS 或 Ubuntu)的服务器; 服务器有公网 IP,本例中使用:111.229.204.102; 你拥有该服务器的管理员权限(可以使用 sudo); 打算使用 Flask 构建一个简单的 Web 接口; 服务…...
霍尔效应传感器的革新突破:铟化铟晶体与结构演进驱动汽车点火系统升级
一、半导体材料革新:铟化铟晶体的电压放大机制 铟化铟(InSb)晶体因其独特的能带结构,成为提升霍尔电压的关键材料。相较于传统硅基材料,其载流子迁移率高出3-5倍,在相同磁场强度下可显著放大霍尔电压。其作…...
无法运用pytorch环境、改环境路径、隔离环境
一.未建虚拟环境时 1.创建新项目后,直接运行是这样的。 2.设置中Virtualenv找不到pytorch环境?因为此时没有创建新虚拟环境。 3.选择conda环境(全局环境)时,是可以下载环境的。 运行结果如下: 是全局环境…...
从0开始学vue:pnpm怎么安装
一、什么是 pnpm? pnpm(Performant npm)是新一代 JavaScript 包管理器,优势包括: 节省磁盘空间:通过硬链接和符号链接实现高效存储安装速度更快:比 npm/yarn 快 2-3 倍内置工作区支持…...
React从基础入门到高级实战:React 实战项目 - 项目二:电商平台前端
React 实战项目:电商平台前端 欢迎来到本 React 开发教程专栏的第 27 篇!在前 26 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件、状态、路由、性能优化和设计模式等核心知识。这一次,我们将通过一…...
