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

初识环境变量

初识环境变量

目录

  1. 什么是环境变量
  2. 常见的环境变量
  3. Linux中与环境变量的有关的命令
  4. 如何获取环境变量
  5. 环境变量的特点
  6. 环境变量的作用

1.什么是环境变量

我们在Linux操作系统下,使用指令,比如ls,pwd,cd等等,可以直接使用,但是我们编译完C/C++文件后产生的test可执行程序,我们却需要输入./test才能运行,我们加了一个路径才让程序跑起来,而平时的操作指令却不需要加路径,为什么?

  • 这是环境变量中的PATH在搞鬼

概念环境变量(Environment Variables)是操作系统用于存储配置信息的变量,这些信息可以影响系统和应用程序的行为。

又比如我们在编译C/C++文件时,我们并没有输入动/静态库的位置,但还是编译成功,原因是有相关环境变量帮助编译器进行查找。

2.常见的环境变量

  • PATH:指定操作系统查找可执行文件的目录列表。
  • HOME:当前用户的主目录路径。
  • USER:当前登录用户的用户名。
  • SHELL:默认的命令行解释器(shell)路径。
  • PWD:当前工作目录路径。
  • LANG / LC_ALL:设置系统的默认语言和区域,影响应用程序的本地化显示。
  • TEMP / TMP:系统临时文件存储路径,程序可在此创建临时文件。

3.Linux中与环境变量的有关的命令

  1. export

    • 用途:设置一个新的环境变量或将一个本地变量变为环境变量,使其在当前 shell 会话的子进程中可用。

    • 用法export VAR_NAME=value

      export PATH="$PATH:/new/path"	#在PATH环境变量下新增路径,需要带上旧的PATH,不然PATH将只有新的路径
      export MY_VAR="Hello"
      

    本地变量是什么?

    MY_VAR="Hello" 			#不加export,此时的MY_VAR就是本地变量
    export MY_VAR="Hello" 	#MY_VAR此时是就是临时的环境变量(仅对当前会话有效)
    
  2. echo

    • 用途:显示环境变量的值。

    • 用法echo $VAR_NAME

      echo $PATH
      echo $USER
      
  3. env

    • 用途:显示当前 shell 会话中的所有环境变量。也可以用于在临时设置环境变量的情况下执行一个命令。

    • 用法

      env             # 显示所有环境变量
      env VAR=value command  # 在特定环境变量设置下执行命令
      

      示例:

      env PATH=/tmp ./myprogram
      
  4. printenv

    • 用途:显示指定环境变量的值。如果不指定变量名,则显示所有环境变量。

    • 用法

      printenv PATH
      printenv          # 显示所有环境变量
      
  5. set

    • 用途:显示所有 shell 变量,包括环境变量和本地变量。也可以用来设置本地变量(但不默认导出为环境变量)。

    • 用法

      set              # 显示所有变量
      set VAR=value    # 设置一个本地变量
      
  6. unset

    • 用途:删除一个变量(环境变量或本地变量)。

    • 用法unset VAR_NAME

      unset MY_VAR	
      

4.如何获取环境变量

  1. 使用 Shell 命令获取环境变量

  2. 从配置文件中获取

    在 Linux 系统中,环境变量可以通过读取用户或系统配置文件获取,例如:

    • /etc/environment:全局环境变量配置文件,影响系统中的所有用户。
    • ~/.bashrc~/.bash_profile~/.profile:用户特定的配置文件,在用户登录时加载。
  3. 编程语言中获取环境变量,这里只讨论C语言

    • 通过系统调用获取–>getenv

      #include <stdio.h>
      #include <stdlib.h>
      int main()
      {printf("%s\n", getenv("PATH"));return 0;
      }
      
    • 命令行第三个参数

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

      对于main函数居然有三个参数,我是很震惊的,因为已经学了一年C/C++了,才知道。

      1. int argc(Argument Count):

        • 表示命令行参数的个数,包括程序本身的名称。
        • argc 的值至少为 1,因为第一个参数是程序的名称。

        例如,如果运行 ./myprogram arg1 arg2,则 argc 的值为 3。

      2. char *argv[](Argument Vector):

        • 一个字符串数组,包含所有命令行参数。
        • argv[0] 是程序的名称或路径,argv[1]argv[argc - 1] 是用户传递的参数。
        • argv 的最后一个元素通常是一个空指针(NULL),表示参数列表的结束。

        在前面的例子中,argv[0]./myprogramargv[1]arg1argv[2]arg2

      3. char *envp[](Environment Pointer):

        • 环境变量的字符串数组(通常不常见于标准 C,但在某些编译器和系统中支持)。
        • 每个元素都是一个以等号 = 分隔的字符串,形式为 "KEY=VALUE"
        • envp 的最后一个元素通常是一个空指针(NULL),表示环境变量列表的结束。

        通过 envp,程序可以直接访问调用它时的所有环境变量。需要注意的是,使用 envpmain 函数通常定义为 int main(int argc, char *argv[], char *envp[])

    • 通过第三方变量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;
      }
      
      • environ 是一个特殊的全局变量,它指向环境变量的数组。
      • environ没有包含在任何头文件中,所以在使用时 要用extern声明。
      • 在 Linux 和 Unix 系统中,environ 数组的最后一个元素为 NULL,表示环境变量列表的结束。

5.环境变量的特点

  • 继承性:父进程可以将其环境变量传递给子进程,子进程会继承父进程的环境变量副本。

    本地变量:没有继承性

  • 临时性:在命令行会话中设置的环境变量仅对当前会话有效。永久更改环境变量需要将其添加到系统或用户的环境配置文件中(如 .bashrc.profile 或 Windows 系统变量设置)。

  • 大小写敏感:在 Linux 和 Unix 系统中,环境变量名称区分大小写,而在 Windows 中则不区分大小写。

6.环境变量的作用

  1. 配置应用程序:许多应用程序通过读取环境变量获取其配置参数,比如数据库连接信息、API 密钥、以及调试模式等设置。

  2. 设置系统路径:环境变量 PATH 列出操作系统查找可执行程序的目录路径。系统在运行命令时,会按照 PATH 中定义的目录顺序查找对应的可执行文件。

    意味着当我们将test加入到的绝对路径加入到PATH后,那么我们就可以直接使用test指令。

  3. 用户信息与系统设置:环境变量还存储当前用户的相关信息(如 HOMEUSER 等),以及系统的临时目录路径(如 TEMPTMP)。

  4. 传递配置信息:环境变量为父进程向子进程传递配置信息提供了一个简便的方式。在运行进程时,操作系统会将当前环境变量复制到该进程中,使进程能直接读取这些变量。

在使用 gcc 编译程序时,环境变量主要起到配置应用程序设置系统路径的作用。

相关文章:

初识环境变量

初识环境变量 目录&#xff1a; 什么是环境变量常见的环境变量Linux中与环境变量的有关的命令如何获取环境变量环境变量的特点环境变量的作用 1.什么是环境变量 我们在Linux操作系统下&#xff0c;使用指令&#xff0c;比如ls,pwd,cd等等&#xff0c;可以直接使用&#xff0c…...

成像基础 -- 景深计算

景深计算 景深&#xff08;Depth of Field, DOF&#xff09;指的是在摄影中&#xff0c;能够清晰成像的物体前后距离的范围。景深的大小取决于多个因素&#xff0c;包括焦距、光圈值、物距以及相机感光元件的尺寸。 1. 景深的主要参数 焦距&#xff08; f f f&#xff09;&a…...

Git中从dev分支恢复master分支

问题 需要从dev分支恢复master分支。之前搞错远程地址了&#xff0c;把master分支搞乱了&#xff0c;现在需要从dev分支恢复代码到master分支。 步骤 git checkout dev # 切换到 dev 分支 git branch -D master # 删除本地 master 分支 git checko…...

12.5 Linux_进程间通信_信号灯

概述 什么是信号灯&#xff1a; 信号灯也称为信号量&#xff0c;代表的是一类资源&#xff0c;其值表示系统中该资源的数量。 主要用途是实现进程、线程的同步。 什么是P/V操作&#xff1a; P操作就是申请资源&#xff0c;V操作就是释放操作。 信号灯的种类&#xff1a; …...

Linux——cp-mv-rm命令

cp命令 复制文件 cp test01.txt test02.txt 复制文件夹 cp -r hsy01 hsy02 mv命令 移动文件/文件夹 rm命令 删除文件 rm test.txt 删除文件夹&#xff08;目录 rm -r hsy01 通配符 * 匹配任意内容 注意* 位置 强制删除-f root超级管理员...

上升点列

题目描述 在一个二维平面内&#xff0c;给定 n 个整数点 (xi​,yi​)&#xff0c;此外你还可以自由添加 k 个整数点。 你在自由添加 k 个点后&#xff0c;还需要从 nk 个点中选出若干个整数点并组成一个序列&#xff0c;使得序列中任意相邻两点间的欧几里得距离恰好为 1 而且…...

刷题 链表

面试经典150题 - 链表 141. 环形链表 class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow head, *fast head;while (fast ! nullptr && fast->next ! nullptr) {slow slow->next;fast fast->next->next;if (slow fast) {return…...

SQL 语法学习指南

目录 前言1. SQL 的基本概念1.1 SQL 的作用1.2 SQL 的特点 2. SQL 的基础语法2.1 数据查询 - SELECT 语句2.2 数据插入 - INSERT 语句2.3 数据更新 - UPDATE 语句2.4 数据删除 - DELETE 语句 3. SQL 的进阶语法3.1 聚合函数3.2 表连接 - JOIN3.3 子查询 4. SQL 学习建议4.1 多实…...

低代码可视化-uniapp商城首页小程序-代码生成器

在设计一个小程序的首页时&#xff0c;包含轮播图、通知栏和商品列表这三个元素是非常常见且有效的布局方式。这样的设计既能够吸引用户的注意力&#xff0c;又能够高效地展示信息和商品。 轮播组件 小程序首页幻灯片通常位于小程序的顶部或显著位置&#xff0c;通过滑动屏幕可…...

Vue3 富文本:WangEditor

wangEditor 开源 Web 富文本编辑器&#xff0c;开箱即用&#xff0c;配置简单 wangEditor 1. 安装依赖包 npm install wangeditor/editor-for-vuenext --save 2. 在引用页面加入如下代码 <template><div style"border: 1px solid #ccc"><Toolbar …...

Unity实现自定义图集(四)

以下内容是根据Unity 2020.1.0f1版本进行编写的   在之前的篇章中已经把自定义图集在编辑器上的使用,以及运行时所需的信息都准备好了,接下来就是魔改UGUI的Image组件,使其能够像Image那样运行时如果引用的资源有打自定义图集,则加载对应自定义图集的Texture。 1、思路 …...

k8s-pod的管理及优化设置

Pod是Kubernetes&#xff08;k8s&#xff09;中最小的资源管理组件&#xff0c;也是最小化运行容器化应用的资源对象。以下是对Pod的详细介绍&#xff1a; 一、Pod的基本概念 定义&#xff1a;Pod是Kubernetes中可以创建和管理的最小单元&#xff0c;是资源对象模型中由用户创…...

软件测试面试题大全

什么是软件测试&#xff1f; 答案&#xff1a;软件测试是一系列活动&#xff0c;旨在评估软件产品的质量&#xff0c;并验证它是否满足规定的需求。它包括执行程序或系统以识别任何缺陷、问题或错误&#xff0c;并确保软件产品符合用户期望。 软件测试的目的是什么&#xff1f…...

SQL第16课挑战题

1. 美国各州的缩写应始终用大写。更新所有美国地址&#xff0c;包括供应商状态&#xff08;Vendors表中的vend_state)和顾客状态&#xff08;customers表中的cust_state),使它们均为大写。 2. 第15课挑战题1要求将自己添加到customers表中&#xff0c;现在删除自己&#xff0c;…...

Python3 爬虫 中间人爬虫

中间人&#xff08;Man-in-the-Middle&#xff0c;MITM&#xff09;攻击是指攻击者与通信的两端分别创建独立的联系&#xff0c;并交换其所收到的数据&#xff0c;使通信的两端认为其正在通过一个私密的连接与对方直接对话&#xff0c;但事实上整个会话都被攻击者完全控制。在中…...

Leetcode 50. Pow ( x , n ) 快速幂、取模 C++实现

问题&#xff1a;Leetcode 50. Pow ( x , n ) 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数。 算法&#xff1a; 具体实现流程如下&#xff1a; 代码&#xff1a; class Solution { public:double myPow(double x, int N) {double ans 1;long long n N;if (n <…...

Java SE vs Java EE 与 JVM vs JDK vs JRE

Java SE&#xff08;Java Platform&#xff0c;Standard Edition&#xff09;: Java 平台标准版&#xff0c;Java 编程语言的基础&#xff0c;它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简单的服务器应用程序。…...

Linux YUM设置仓库优先级

1.安装yum-plugin-priorities优先级插件 yum install yum-plugin-priorities -y 2.设置仓库优先级 vim /etc/yum.repos.d/local.repo [local] namecentos7.5 baseurlfile:///mnt enable1 gpgcheck0 priority1 注释&#xff1a; priority1 #数字越小代表优先级越高&#xff…...

做一个不断更新的链接库

做一个不断更新的链接库 anaconda anaconda官方镜像源 anaconda清华镜像源 社区 CSDN CSDN-华为开发者空间 python开发库 股票爬虫 - akshare...

Ping32企业加密软件:保护数据安全

在数字化时代&#xff0c;数据安全已成为每个企业不可忽视的重要课题。无论是客户信息、财务报表&#xff0c;还是商业机密&#xff0c;数据的安全性直接关系到企业的声誉与运营。为了应对不断变化的安全威胁&#xff0c;选择一款可靠的企业加密软件尤为重要。在这里&#xff0…...

避坑指南:为什么你的神经网络总过拟合?Dropout层参数设置全解析

避坑指南&#xff1a;为什么你的神经网络总过拟合&#xff1f;Dropout层参数设置全解析 训练神经网络时&#xff0c;最令人沮丧的莫过于看到验证集准确率在某个点突然停滞不前&#xff0c;而训练集指标却持续攀升——典型的过拟合信号。作为从业者&#xff0c;我们常陷入两难&a…...

解决CLI工具接入DeepSeek API流式传输失败的实战指南

最近在对接DeepSeek的API时&#xff0c;遇到了一个挺典型的问题&#xff1a;用CLI工具调用API进行流式传输时&#xff0c;经常中途失败&#xff0c;返回的错误信息又比较模糊&#xff0c;调试起来很头疼。特别是在处理长文本生成或者需要连续对话的场景下&#xff0c;这个问题直…...

使用 Java Comparator 实现复杂排序逻辑

本文介绍了如何使用它 Java Comparator 对 Actor 对列表进行排序&#xff0c;包括 Actor 有类型(如 "Artist"、"Producer"、"Mixer" 等等)和名称。排序规则是:首先按类型优先排序("Artist" 最优先&#xff0c;然后是 "Producer&q…...

SEO_资深从业者的高级SEO策略与实战技巧

前言&#xff1a;SEO的进阶之道 在当今互联网时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经不再是一个简单的任务。对于资深从业者来说&#xff0c;SEO不仅仅是一门技术&#xff0c;更是一门艺术。本文将从多个角度探讨资深从业者的高级SEO策略与实战技巧&…...

雷达式多参数水文监测站

雷达式多参数水文监测站用先进的非接触式测量技术&#xff0c;结合水库断面参数精准计算流量&#xff0c;全程无需接触水体&#xff0c;从根源上规避水体环境对监测设备的影响。不受风、环境温度、雾霾、水体泥沙、漂浮物等外界因素干扰&#xff0c;即便在汛期水流浑浊、漂浮物…...

虚拟控制器与设备模拟从入门到精通:ViGEmBus驱动技术指南

虚拟控制器与设备模拟从入门到精通&#xff1a;ViGEmBus驱动技术指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在游戏开发与输入设备模拟领域&#xf…...

ai辅助开发新思路:让快马kimi模型将ps“液化”滤镜创意变成网页动画

最近在做一个创意项目时&#xff0c;突然想到&#xff1a;如果能将PS里那个超好玩的"液化"滤镜效果搬到网页上&#xff0c;让用户直接通过鼠标拖拽就能实时扭曲图片&#xff0c;应该会很有趣。作为一个设计师转前端的跨界选手&#xff0c;我决定挑战一下这个想法。 理…...

MedGemma 1.5效果对比:在线大模型vs本地MedGemma在医学术语解释准确性评测

MedGemma 1.5效果对比&#xff1a;在线大模型vs本地MedGemma在医学术语解释准确性评测 1. 引言&#xff1a;为什么需要本地医疗AI助手&#xff1f; 想象一下&#xff0c;你或者家人身体不舒服&#xff0c;想在网上查查症状&#xff0c;结果搜出来一堆广告、营销号文章&#x…...

5分钟搞定COCO数据集下载与配置:从官网到百度云全攻略(附多线程加速技巧)

COCO数据集极速获取指南&#xff1a;从官方源到镜像站的全链路方案 刚接触计算机视觉的新手们&#xff0c;往往在第一步获取数据集时就遭遇"劝退"——动辄几十GB的COCO数据集&#xff0c;官网下载速度堪比蜗牛爬行&#xff0c;百度云限速让人抓狂。本文将分享一套经过…...

CogVideoX LoRA微调终极指南:用消费级GPU打造个性化视频生成模型

CogVideoX LoRA微调终极指南&#xff1a;用消费级GPU打造个性化视频生成模型 【免费下载链接】CogVideo text and image to video generation: CogVideoX (2024) and CogVideo (ICLR 2023) 项目地址: https://gitcode.com/GitHub_Trending/co/CogVideo 你是否曾经梦想过…...