Linux环境变量

2024-01-03 10:49:43

????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???????????????🎬慕斯主页修仙—别有洞天?

? ?????????????????????????????????????????????????????????今日夜电波:HEART BEAT—YOASOBI

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2:20━━━━━━?💟──────── 5:35
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????🔄 ? ?? ? ? ? ?? ? ????

??????????????????????????????????????💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍


目录

什么是环境变量?

常见的环境变量

如何查看环境变量?

????????env—查看全部环境变量

????????echo +环境变量名

????????$PATH拓展

如何获取环境变量?

????????getenv()获取指定环境变量的值

????????通过命令行参数获取环境变量

????????通过第三方变量environ来获取环境变量

如何设置环境变量?

set和unset


什么是环境变量?

????????环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

????????常见的环境变量

PATH : 指定命令的搜索路径

HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

SHELL : 当前Shell,它的值通常是/bin/bash。

如何查看环境变量?

????????env—查看全部环境变量

????????在Linux和Unix-like系统中,env是一个命令行实用程序,用于显示当前环境中所有的环境变量及其值。它不接受任何参数,而是直接输出当前环境中所有的环境变量。

????????echo +环境变量名

????????例如:如果我们想查看$PATH,则可以用echo $PATH 来用于查看指定命令的搜索路径。

[amazon@iZ7xvfrafhk3mf5qwrf2gxZ ~]$ echo $PATH
/usr/local/apache/bin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/amazon/.local/bin:/home/amazon/bin

????????在以上打印出来的环境变量$PATH中,以冒号作为分隔符,每一个冒号,后面都对应着一个路径。如:

  1. /usr/local/apache/bin:这是一个指向Apache服务器二进制文件的目录路径。Apache是一个流行的Web服务器软件,安装在大多数Linux和Unix-like系统上。
  2. /usr/local/php/bin:这是一个指向PHP编程语言二进制文件的目录路径。PHP是一种流行的开源脚本语言,常用于开发动态网页和应用程序。
  3. /usr/local/mysql/bin:这是一个指向MySQL数据库管理系统二进制文件的目录路径。MySQL是一种流行的开源关系型数据库管理系统,常用于存储和处理数据。
  4. /usr/local/bin/usr/bin/usr/local/sbin/usr/sbin:这些都是标准的系统目录路径,包含了许多常用的工具和命令行程序。
  5. /home/amazon/.local/bin/home/amazon/bin:这些都是个人用户的目录路径,通常包含了一些自定义的工具和命令行程序。


????????在使用$PATH变量值时,系统会按照从左到右的顺序遍历目录中的二进制文件,并尝试运行第一个找到的匹配文件。因此,为了确保某个特定的命令可以正确地工作,你需要将其安装在$PATH变量中的某个目录中,并确保该目录出现在$PATH变量的前部。例如,如果你想在命令行中使用php,你可以在上述$PATH变量值中添加/usr/local/php/bin目录,并确保其出现在其他目录之前。

????????同理,如果要查看其他的环境变量也可用echo命令打印:

????????$PATH拓展

????????通过修改$PATH,使得程序不需要找到对应的路径即可运行,即: ./exe -> exe

export PATH=$PATH: 当前路径

????????通过以上代码将新的路径添加到$PATH环境变量中,使得系统可以自动找到对应的路径,而不需要自己再找路径,这也可以理解成“程序的安装”。

? PATH=$PATH:是Linux和Unix系统中常用的命令行语法,它可以用来添加新的路径到当前用户的PATH环境变量中。如果你直接使用PATH=路径将修改全部路径,会覆盖原有的$PATH路径。

????????如果你想将新的路径添加到PATH中,可以在PATH变量的末尾添加一个冒号(:),然后再添加新的路径。例如:

export PATH=$PATH:/path/to/new/directory

????????在这个例子中,我们将新的路径/path/to/new/directory添加到了当前用户的PATH环境变量中。这意味着系统现在会在新的路径中查找可执行文件。

????????注意,如果你已经设置了PATH环境变量,你需要在~/.bash_profile文件中添加上述命令或者运行 source ~/.bashrc 来使改变生效(实际上是修改了bash的脚本配置文件)。如果没有执行其中的语句,实际上只是临时的路径,在你的Linux重启后PATH环境变量会恢复原样(这是因为命令行启动的进程都是shell/bash的子进程,子进程的命令行参数和环境变量,是父进程bash给我们传递的)。如下:

如何获取环境变量?

????????getenv()获取指定环境变量的值

????????getenv()是C语言库函数,用于获取指定环境变量的值。它的原型如下:

char *getenv(const char *name);

????????参数name是要获取的环境变量名,函数返回值是一个字符串,表示环境变量的值。如果环境变量不存在,则返回NULL。

????????在C++中,可以通过std::getenv()函数来调用getenv()函数。其原型如下:

const char* getenv(const char* name);

????????参数name是要获取的环境变量名,函数返回值是一个字符串,表示环境变量的值。如果环境变量不存在,则返回NULL。

????????例如:如下为获取$USER的环境变量。

  #include<stdlib.h>
  #include<stdio.h>
  #include<unistd.h>
   
   int main()
   {
     char* ev=getenv("USER");
     if(ev)
     {
       printf("%s\n",ev);
  
     }
     return 0;                                                                                                                                                                            
   }

????????通过命令行参数获取环境变量

????????我们知道main()实际上包涵三个参数,即:main(int argc,char*argv[],char * envp[]),其中,argc是一个整数,表示命令行参数的数量(不包括程序名称)。argv[]是一个指向字符数组的指针,数组中的每个元素都是一个命令行参数的地址。envp[]是一个指向字符数组的指针,数组中的每个元素都是一个环境变量的地址。

????????如下:打印全部环境变量

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

????????通过第三方变量environ来获取环境变量

????????environ是一个全局变量,它是以环境变量的方式存储在栈上的字典。当你通过putenv()或setenv()函数添加环境变量时,它们实际上是在修改environ。

????????environ是一个指向struct passwd类型的指针,其中struct passwd是一个结构体,用于描述用户账户信息。在struct passwd中,environ字段指向一个包含环境变量的链表。每个链表节点都是一个包含环境变量名和值的字符串。

????????由于environ是一个全局变量,因此你可以直接访问它来获取或设置环境变量。例如:

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

如何设置环境变量?

????????在Linux中,export命令用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。使用export命令可以新增,修改或删除环境变量,供后续执行的程序使用。

????????export命令的一般语法格式为:

export [-fnp][变量名称]=[变量设置值]

????????具体参数含义如下:

  • -f 代表 [变量名称]中为函数名称。
  • -n 删除指定的变量。需要注意的是,这里的删除并不真正移除这个变量,而是使其不会输出到后续指令的执行环境中。
  • -p 列出所有的shell赋予程序的环境变量。

????????如下:

????????当然这只是临时修改的环境变量,当重启Linux系统后就不存在了,要想使其重启后仍然失效,你需要在~/.bash_profile文件中添加上述命令或者运行 source ~/.bashrc来使改变生效。

????????如下命令打开脚本配置文件,并且修改:

vim ~/.bash_profile

set和unset

????????在 Linux 系统中,setunset 是两个常用的命令,分别用于设置环境变量和删除环境变量。set 命令用于显示或设置 shell 的配置选项、命令别名、环境变量等。当它没有参数时,会显示当前 shell 的所有配置选项、命令别名和环境变量的信息。当它有参数时,可以设置相应的配置选项、命令别名或环境变量。

????????例如,要查看当前 shell 的所有环境变量,可以输入以下命令:

set

????????要设置一个名为 MY_VAR 的环境变量,并将其值设置为 Hello, World!,可以输入以下命令:

set MY_VAR=Hello, World!

??unset 命令用于删除环境变量。当它没有参数时,会列出所有可用的环境变量。当它有参数时,会删除指定的环境变量。


????????例如,要查看当前 shell 中的所有环境变量,可以输入以下命令:

env

????????要删除名为 MY_VAR 的环境变量,可以输入以下命令:

unset MY_VAR

????????注意,删除环境变量可能会影响到正在运行的程序。因此,在使用 unset 命令时,应该谨慎考虑其影响范围。


?????????????????????感谢你耐心的看到这里?( ′・?・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!?

????????????????????????????????? ? ? ?

????????????????????????????????????????????????????????????????????????给个三连再走嘛~??

文章来源:https://blog.csdn.net/weixin_64038246/article/details/135354471
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。