详解Linux中常见环境变量的特点与设置

2025-06-10 15:50

本文主要是介绍详解Linux中常见环境变量的特点与设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧...

前言

环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息。理解环境变量对于系统管理、软件开发都很重要。

一、环境变量的概念

环境变量是操作系统用来存储和传递与系统环境相关信息的一种机制,是以键值对形式定义的全局变量,供操作系统和应用程序读取和使用。
通常格式为:

当VALUE为多个时,以‘:’符号隔开js

KEY=VALUE
  • KEY:变量名
  • VALUE:对应值

那么它究竟有什么作用呢?我们来看这个例子:

详解Linux中常见环境变量的特点与设置

从上面我们可以看到存在一个可执行程序test,第一次我们执行它,程序并没有正常运行,当然都知道因为没有指定程序所在路径,所以程序不能正常运行,第二次指定了不就运行成功了,那么我们的指令在执行时为什么不用指定路径呢?在指令篇我们就介绍过,指令的本质就是一个写好的可执行程序,当时我们说,如果我们想要让自己写的,可执行程序,像指令一样直接运行,我们可以将程序拷贝到指令所在路径下:/usr/bin

那还是没有解释为什么指令可以直接运行,或者说bash是如何找到指令的可执行程序的呢?还有没有其他方法可以使我们的可执行程序像指令一样运行呢?接下来我们来认识一下本篇第一个环境变量:PATH

PATH是操作系统中最核心的环境变量之一,当我们在命令行输入一个命令时,操作系统会按照PATH中定义的目录依次搜索该命令对应的可执行文件,若未找到该命令对应的可执行文件就会提示:command not found

查看PATH:

echo $PATH

详解Linux中常见环境变量的特点与设置

PATH环境变量对应多个值,使用“:"隔离开

所以当我们将自己写的可执行文件,拷贝到/usr/bin路径下,系统在PATH对应的目中就可以找到。

还有什么方法可以解决这里的问题呢?只需要将我们自己写的可执行程序所在路径添加到PATH环境变量中,不就也可以完成搜索了

PATH=$PATH:/home/ltn/dir

详解Linux中常见环境变量的特点与设置

详解Linux中常见环境变量的特点与设置

刚才的test于前面路径存在的,可执行程序重名了,所以又换了个程序给大家演示,但这恰恰说明了系统是从第一个路径向后搜索程序的。

我们使用which查找指令时,就是在PATH环境变量中搜索的,所以现在我们就可以像查找指令一样查找我们自己的可执行程序了。

详解Linux中常见环境变量的特点与设置

二、常见的环境变量

环境变量… 作用对应VALUE
HOME当前用户的主目录路径/home/ltn
USER当前登录用户名ltn
PWD当前工作目录路径/home/ltn
HISTSIZE记录历史指令最大数10000

查看环境变量:

查看所有环境变量:

env

查看指定环境变量:

echo $环境变量名

仅是截取的一部分

详解Linux中常见环境变量的特点与设置

三、环境变量特点及其相关指令

为了方便接下来的讲解,我先带大家认识一个关于环境变量的系统调用接口:

详解Linux中常见环境变量的特点与设置

头文件:#include<stdlib.h>

参数:环境变量名

返回值:如果存在则返回一个指向环境变量名的指针,否则返回NULL

3.1 环境变量的全局性

环境变量最开始是在我们登录xshell时,操作系统给bash形成的,当我们执行某些指令时,bash会创建子进程,并且将环境变量继承下来(当然会做某些修改),简单来说:环境变量是子进程从父进程那里继承下来的。

接下来我们验证一下!!!

创建我们自己的环境变量:

export ltn =”1234“

详解Linux中常见环境变量的特点与设置

我们在当前bash进程定义了一个环境变量,如果子进程会继承父进程的环境变量,则可以打印出结果,否则程序什么都不输出。

   #include<stdio.h>  
   #include<unistd.h>  
   #include<stdlib.h>  
   int main()  
   {  
     printf("子进程的ltn->%s\n",getenv("ltn"));                                                                                      
     return 0;                                           
   }

详解Linux中常见环境变量的特点与设置

可以看到程序成功打印,所以子进程会继承父进程的环境变量。

3.2、环境变量的生命周期

  • 环境变量的生命周期与进程绑定
  • 进程终止时,环境变量也会被回收

正是有了继承的这种形式,我们之前所提到的权限概念,才会被每条指令遵守。

删除环境变量:

unset ltn

详解Linux中常见环境变量的特点与设置

四、环境变量的组织方式

我们之前在学习的C语言,不知道你有没有听过main函数的参数:

int main(int argc, char *argv[], char *env[])

第三个参数我们先不验证

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

这样一段代码,当我们执行它时,结果会怎么样呢?

详解Linux中常见环境变量的特点与设置

详解Linux中常见环境变量的特点与设置

可以看到我们以上面两种不同的方式执行,程序打印出了两种不同的结果,要知道怎么会这样,我们还是要知道参数是什么意思:

参数一 argc

作用:记录命令行参数的数量

规则:

1、argc的值javascript至少为1,因为第一个参数始终是程序自身的名称。

2、用户输入的每个参数(以空格分隔)都会增加argc的值。

参数二 argv

作用:存储命令行参数的具体值(用空格分开的代表不同参数),以字符串数组的形式表示

规则:

1、argv[0] 是程序名称(可能包含路径,取决于调用方式)。

2 、argv[1] javascript到 argv[argc-1] 是用户输入的参数。

3、 argv[argc] 是一个空指针(NULL),表示数组结束。

参数三、env

作用:指向系统的环境变量数组(从bash那继承的),每个元素是 KEY=VALUE 格式的字符串。

规则:

1、 环境变量数组以 NULL 结尾。

2、可以通过 getenv() 函数更安全地获取特定环境变量。

当知道了main函数的这些参数,我们就可以理解,为什么同一个指令加上不同的选项会有不同的功能了:当你在执行指令是带上不同参数,它就会存入到argv数组中,然后通过if else语句匹配不同代码块。实现不同功能。

五、C语言对环境变量的操作

5.1 设置环境变量:setenv

详解Linux中常见环境变量的特点与设置

头文件:#include<stdlib.h>

参数:

name:设置的环境变量名

value:设置的环境变量值

overwrite:是否覆盖已有值(非零表示覆盖)

示例:

     #include<stdio.h>
     #include<unistd.h>
     #include<stdlib.h>
     int main(int argc, char *argv[], char *env[])
     {
       if(setenv("ltn","Hell linux",0)==0);
       {
         printf("ltn set to->%s\n",getenv("ltn"));                                                                                   
     
      }
      return 0;
    }

详解Linux中常见环境变量的特点与设置

5.2 删除环境变量:unsetenv

详解Linux中常见环境变量的特点与设置

头文件:#include<stdlib.h>

参数:

name:环境变量名

示例:

     #include<stdio.h>
     #include<unistd.h>
     #include<stdlib.h>
     int main(int argc, char *argv[], char *env[])
     {
       if(setenv("ltn","Hell Linux",0)==0);
       {
         printf("ltn set to->%s\n",getenv("ltn"));
     
      }
      unsetenv("ltn");                                                                                                              
      printf("ltn->%s\n",getenv("ltn"));                                                                       
      return 0;                                                                                                
    }  

详解Linux中常见环境变量的特点与设置

创建好,并删除

5.3 遍历所有环境变量:environ

详解Linux中常见环境变量的特点与设置

envirhttp://www.chinasem.cnon是一个全局变量,内部存有所有环境变量的指针,,末尾指针指向NULL,具体介绍太长,不方便展示,大家可以自己看。

示例:

     #include<stdio.h>
     #include<unistd.h>
     #include<stdlib.h>
     extern char**environ;
     int main(int argc, char *argv[], char *env[])
     {
       char **env1=environ;
       while(*env1)
       {
        printf("%s",*env1);
        env1++;                                                                                                                     
      }
    
      return 0;
    }

详解Linux中常见环境变量的特点与设置

仅截取部分打印结果

下面我们来说一下第三给参数,第三参数,是一个环境变量数组,也就是说,我们可以通过直接变量得到全部环境变量:

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

详解Linux中常见环境变量的特点与设置

以上就是详解Linux中常见环境变量的特点与设China编程置的详细内容,更多关于Linux环境变量的资料请关注编程China编程(www.chinasem.cn)其它相关文章!

这篇关于详解Linux中常见环境变量的特点与设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154988

相关文章

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基