【Linux】Linux 环境变量

news2025/6/6 13:38:01

参考博客: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]]

  • 比如打印对应的PATHSHELLHOME环境变量的值
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

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

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

相关文章

OpenCV在图像上绘制文字示例

OpenCV计算机视觉开发实践&#xff1a;基于Qt C - 商品搜索 - 京东 OpenCV中除了提供绘制各种图形的函数外&#xff0c;还提供了一个特殊的绘制函数&#xff0c;用于在图像上绘制文字。这个函数是putText()&#xff0c;它是命名空间cv中的函数&#xff0c;其声明如下&#xff…

为什么要选择VR看房?VR看房有什么优点?

VR看房&#xff1a;革新传统&#xff0c;重塑体验 在当今社会&#xff0c;虚拟现实&#xff08;VR&#xff09;技术正以前所未有的速度渗透到我们生活的各个领域&#xff0c;其中VR看房作为房地产领域的重要创新。本文将讨论为什么要选择VR看房以及VR看房的主要优点&#xff0…

pytorch基本运算-范数

引言 前序学习进程中&#xff0c;已经对pytorch基本运算有了详细探索&#xff0c;文章链接有&#xff1a; 基本运算 广播失效 乘除法和幂运算 hadamard积、点积和矩阵乘法 上述计算都是以pytorch张量为运算元素&#xff0c;这些张量基本上也集中在一维向量和二维矩阵&#x…

Transformer实战——词嵌入技术详解

Transformer实战——词嵌入技术详解 0. 前言1. 词嵌入基础2. 分布式表示3. 静态嵌入3.1 Word2Vec3.2 GloVe 4. 使用 Gensim 构建词嵌入5. 使用 Gensim 探索嵌入空间6. 动态嵌入小结系列链接 0. 前言 在本节中&#xff0c;我们首先介绍词嵌入的概念&#xff0c;然后介绍两种实现…

[pdf、epub]300道《软件方法》强化自测题业务建模需求分析共257页(202505更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 在本账号CSDN资源下载&#xff0c;或者访问链接&#xff1a; http://www.umlchina.com/url/quizad.html 如果需要提取码&#xff1a;umlc 文件夹中的“300道软件方法强化自测题2025…

Vue3入门指南:从零到精通的快速上手

齐爷学vue3 一、Vue3入门 vite&#xff1a;前端构架工具&#xff0c;构建速度快于webpack。轻量快速、对TS&#xff0c;JSX&#xff0c;CSS开箱即用、按需编译。 创建Vue3工程 1.在想要创建Vue3的位置打开cmd&#xff0c;执行如下命令。 npm create vuelatest 2.功能只选择…

吴恩达MCP课程(5):mcp_chatbot_prompt_resource.py

前提条件&#xff1a; 1、吴恩达MCP课程&#xff08;5&#xff09;&#xff1a;research_server_prompt_resource.py 2、server_config_prompt_resource.json文件 {"mcpServers": {"filesystem": {"command": "npx","args"…

设计模式——抽象工厂设计模式(创建型)

摘要 抽象工厂设计模式是一种创建型设计模式&#xff0c;旨在提供一个接口&#xff0c;用于创建一系列相关或依赖的对象&#xff0c;无需指定具体类。它通过抽象工厂、具体工厂、抽象产品和具体产品等组件构建&#xff0c;相比工厂方法模式&#xff0c;能创建一个产品族。该模…

基于LocalAI与cpolar技术协同的本地化AI模型部署与远程访问方案解析

文章目录 前言1. Docker部署2. 简单使用演示3. 安装cpolar内网穿透4. 配置公网地址5. 配置固定公网地址前言 各位极客朋友们!今天要向大家推荐一套创新性的本地部署方案——LocalAI技术架构。这款开源工具包能够将普通配置的笔记本电脑转化为具备强大算力的AI工作站,轻松实现…

霍尔效应传感器的革新突破:铟化铟晶体与结构演进驱动汽车点火系统升级

一、半导体材料革新&#xff1a;铟化铟晶体的电压放大机制 铟化铟&#xff08;InSb&#xff09;晶体因其独特的能带结构&#xff0c;成为提升霍尔电压的关键材料。相较于传统硅基材料&#xff0c;其载流子迁移率高出3-5倍&#xff0c;在相同磁场强度下可显著放大霍尔电压。其作…

无法运用pytorch环境、改环境路径、隔离环境

一.未建虚拟环境时 1.创建新项目后&#xff0c;直接运行是这样的。 2.设置中Virtualenv找不到pytorch环境&#xff1f;因为此时没有创建新虚拟环境。 3.选择conda环境&#xff08;全局环境&#xff09;时&#xff0c;是可以下载环境的。 运行结果如下&#xff1a; 是全局环境…

从0开始学vue:pnpm怎么安装

一、什么是 pnpm&#xff1f; pnpm&#xff08;Performant npm&#xff09;是新一代 JavaScript 包管理器&#xff0c;优势包括&#xff1a; 节省磁盘空间&#xff1a;通过硬链接和符号链接实现高效存储安装速度更快&#xff1a;比 npm/yarn 快 2-3 倍内置工作区支持&#xf…

Python 网络编程 -- WebSocket编程

作者主要是为了用python构建实时网络通信程序。 概念性的东西越简单越好理解,因此,下面我从晚上摘抄的概念 我的理解。 什么是网络通信? 更确切地说&#xff0c;网络通信是两台计算机上的两个进程之间的通信。比如&#xff0c;浏览器进程和新浪服务器上的某个Web服务进程在通…

边缘计算应用实践心得

当数据中心的光纤开始承载不了爆炸式增长的物联网数据流时&#xff0c;边缘计算就像毛细血管般渗透进现代数字肌理的末梢。这种将算力下沉到数据源头的技术范式&#xff0c;本质上是对传统云计算中心化架构的叛逆与补充——在智能制造车间里&#xff0c;实时质检算法直接在工业…

EXCEL如何快速批量给两字姓名中间加空格

EXCEL如何快速批量给姓名中间加空格 优点&#xff1a;不会导致排版混乱 缺点&#xff1a;无法输出在原有单元格上&#xff0c;若需要保留原始数据&#xff0c;可将公式结果复制后“选择性粘贴为值” 使用场景&#xff1a;在EXCEL中想要快速批量给两字姓名中间加入空格使姓名对…

Jenkins | Linux环境部署Jenkins与部署java项目

1. 部署jenkins 1.1 下载war包 依赖环境 jdk 11 下载地址: https://www.jenkins.io/ 依赖环境 1.2 启动服务 启动命令 需要注意使用jdk11以上的版本 直接启动 # httpPort 指定端口 #-Xms2048m -Xmx4096m 指定java 堆内存初始大小 与最大大小 /usr/java/jdk17/bin/java…

react私有样式处理

react私有样式处理 Nav.jsx Menu.jsx vue中通过scoped来实现样式私有化。加上scoped&#xff0c;就属于当前组件的私有样式。 给视图中的元素都加了一个属性data-v-xxx&#xff0c;然后给这些样式都加上属性选择器。&#xff08;deep就是不加属性也不加属性选择器&#xff09; …

UDP/TCP协议全解

目录 一. UDP协议 1.UDP协议概念 2.UDP数据报格式 3.UDP协议差错控制 二. TCP协议 1.TCP协议概念 2.三次握手与四次挥手 3.TCP报文段格式&#xff08;重点&#xff09; 4.流量控制 5.拥塞控制 一. UDP协议 1.UDP协议概念 当应用层的进程1要向进程2传输报文&#xff…

Duix.HeyGem:以“离线+开源”重构数字人创作生态

在AI技术快速演进的今天,虚拟数字人正从高成本、高门槛的专业领域走向大众化应用。Duix.HeyGem 数字人项目正是这一趋势下的杰出代表。该项目由一支拥有七年AI研发经验的团队打造,通过放弃传统3D建模路径,转向真人视频驱动的AI训练模型,成功实现了低成本、高质量、本地化的…

ubuntu22.04安装megaton

前置 sudo apt-get install git cmake ninja-build generate-ninja安装devkitPro https://blog.csdn.net/qq_39942341/article/details/148388639?spm1001.2014.3001.5502 安装cargo https://blog.csdn.net/qq_39942341/article/details/148387783?spm1001.2014.3001.5501 …