当前位置: 代码网 > 服务器>服务器>Linux > 详解Linux中常见环境变量的特点与设置

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

2025年06月10日 Linux 我要评论
前言环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息。理解环境变量对于系统管理、软件开发都很重要。一、环境变量的概念环境变量是操作系统用来存储和传递与系统环境相关信息的一种机制,

前言

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

一、环境变量的概念

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

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

key=value
  • key:变量名
  • value:对应值

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

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

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

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

查看path:

echo $path

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

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

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

path=$path:/home/ltn/dir

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

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

二、常见的环境变量

环境变量… 作用对应value
home当前用户的主目录路径/home/ltn
user当前登录用户名ltn
pwd当前工作目录路径/home/ltn
histsize记录历史指令最大数10000

查看环境变量:

查看所有环境变量:

env

查看指定环境变量:

echo $环境变量名

仅是截取的一部分

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

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

头文件:#include<stdlib.h>

参数:环境变量名

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

3.1 环境变量的全局性

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

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

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

export ltn =”1234“

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

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

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

3.2、环境变量的生命周期

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

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

删除环境变量:

unset ltn

四、环境变量的组织方式

我们之前在学习的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;
  }    

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

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

参数一 argc

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

规则:

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

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

参数二 argv

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

规则:

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

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

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

参数三、env

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

规则:

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

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

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

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

5.1 设置环境变量:setenv

头文件:#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;
    }

5.2 删除环境变量:unsetenv

头文件:#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;                                                                                                
    }  

创建好,并删除

5.3 遍历所有环境变量:environ

environ是一个全局变量,内部存有所有环境变量的指针,,末尾指针指向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;
    }

仅截取部分打印结果

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

     #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环境变量的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com