Linux环境变量

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS Agent(兼容OpenClaw),2核4GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 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!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
Linux Shell
入职必会-开发环境搭建36-Linux常用操作-Linux环境变量
环境变量的作用是指定到哪个目录去找你输入的命令执行。环境变量的设置分为:临时设置和永久设置两种。
300 6
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
2050 21
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
10480 2
|
Shell Linux
Linux-环境变量
通过合理设置和管理环境变量,可以显著提高工作效率和系统管理能力。理解并掌握这些基本操作,是每个Linux用户和管理员的必备技能。
535 13
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
973 4
|
Java Linux
linux 对子用户配置java 环境变量
linux 对子用户配置java 环境变量
343 3
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
1192 2
|
Linux
Linux环境变量及作用
Linux中的环境变量是系统配置参数,如HOME指示用户家目录,MAIL指邮件位置。`env`命令显示所有环境变量。系统有数百个变量,但了解关键的几个足够,如PATH、HOME、TERM等。环境变量由变量名和值组成,可自定义,如WORKDIR。局部变量需用`export`使其全局有效,以便其他用户使用。`su`命令用于切换用户,展示不同用户环境下变量值的差异。
416 0
Linux环境变量及作用
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
596 4
|
Linux Shell 编译器
Linux进程——Linux环境变量
Linux进程——Linux环境变量