Linux环境变量

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Linux环境变量

什么是环境变量?

环境变量(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 系统中,set 和 unset 是两个常用的命令,分别用于设置环境变量和删除环境变量。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!

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
Linux Shell
入职必会-开发环境搭建36-Linux常用操作-Linux环境变量
环境变量的作用是指定到哪个目录去找你输入的命令执行。环境变量的设置分为:临时设置和永久设置两种。
|
22天前
|
Java Linux
linux 对子用户配置java 环境变量
linux 对子用户配置java 环境变量
18 3
|
1月前
|
Linux
Linux环境变量及作用
Linux中的环境变量是系统配置参数,如HOME指示用户家目录,MAIL指邮件位置。`env`命令显示所有环境变量。系统有数百个变量,但了解关键的几个足够,如PATH、HOME、TERM等。环境变量由变量名和值组成,可自定义,如WORKDIR。局部变量需用`export`使其全局有效,以便其他用户使用。`su`命令用于切换用户,展示不同用户环境下变量值的差异。
27 0
Linux环境变量及作用
|
1月前
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
67 2
|
2月前
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
|
1月前
|
Java Linux Shell
【Linux】深度解剖环境变量
【Linux】深度解剖环境变量
15 0
|
2月前
|
Linux Shell 编译器
Linux进程——Linux环境变量
Linux进程——Linux环境变量
18 3
|
1月前
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别
|
1月前
|
存储 Java Linux
Linux环境变量配置及常见问题解决方案
Linux环境变量配置及常见问题解决方案
|
2月前
|
存储 Java Linux
Linux环境变量配置及常见问题解决方案
Linux环境变量配置及常见问题解决方案