详解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.cppcns.com/os/linux/713405.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1154988

相关文章

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD