Linux环境变量【终】

简介: Linux环境变量【终】

🌎环境变量




前言:

  上次我们简单了解了一下环境变量这个概念,今天我们继续深入了解。话不多说,开启我们今天的话题!


🚀环境变量的组织方式

✈️创建自己的环境变量

  我们有时候也需要配置自己的环境变量,我们可以使用如下命令:

export 变量名=内容

  这样就能创建自己的环境变量了。


✈️main函数参数

  在main函数中其实还存在一个参数:char *env[],和 argv类似,也是一个指针数组,不同的是 env的每一个指针指向的是每一行的环境变量

  我们不妨做实验将其打印出来观察:

#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[], char *env[])
{
  for(int i = 0 ; env[i] ; ++i)
  {
    printf("————————————————env[%d] -> %s\n", i, env[i);//为了能看出来我们是在打印
  }
  return 0;
}

  我们可以看到,打印出来的正是我们系统中所有的环境变量。

  每个程序都会收到一张环境表,环境表 是一个字符指针数组,每个指针指向环境变量字符串,也就是main函数的 env 参数。


✈️C语言提供的变量与接口

  C语言中除了main函数参数有 环境表 以外,C语言还为我们提供了第三方变量:

  很明显,这是一个二级指针,而它的最终指向也就是环境变量表。那么我们来证明一下:

1 #include<stdio.h>
  2 #include<unistd.h>
  3 
  4 int main()
  5 {
  6     extern char **environ;
  7     for(int i = 0; environ[i] ; ++i)
  8     {
  9         printf("environ[%d]:%s\n", i, environ[i]);                                                                                                         
 10     }
 11     return 0;
 12 }

  那么程序是如何拿到环境变量表的呢?我们都知道,程序的默认父进程都是bash,那么程序就是bash的子进程,而子进程的 环境变量表其实就是从父进程bash那里继承的

  除了环境变量以外,我们也可以用 getenv 接口获取环境变量:

  这里需要注意的是,getenv里的内容是环境变量的名称,通过这个名称返回对应的字符串,比如下面这段代码:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
int main()
{
    const char* username = getenv("USER");
    if(strcmp(username, "xzy") == 0)
    {
        printf("this is my process core function!\n");
    }
    else 
    {
        printf("your privilege low!\n");
    }
    return 0;
}


🚀环境变量与本地变量

✈️了解本地变量

  使用env命令只能查看环境变量,但是使用下面的命令可以查看所有的变量:

set #查看本地变量和环境变量

  也就是说,set不仅仅可以查看所有的环境变量,而且还可以查看本地变量。我们来看一个有趣的现象:

  export 我们刚刚学过,是导出自定义环境变量的命令,可以下面这个 HEHE 为什么不使用export也能定义出来?它也是环境变变量吗?而且还能被echo识别?我们不妨先看下面一段代码:

1: myenv.c ? ?                                                                                                             ?? buffers 
  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<unistd.h>
  4 
  5 int main()
  6 {
  7     const char* myenv = getenv("HAHA");
  8     if(myenv == NULL) printf("get environ null!\n ");
  9     else printf("myenv:%s\n", myenv);                                                                                               
 10     return 0;                                                                                                                  
 11 }

  我们把HAHA 换为 HEHE再看看结果:

  我们可以看到,这个时候getenv检测不出来这个 “环境变量”。

  其实,这个变量叫做 本地变量,至于为什么本地变量不能被getenv获取,这是因为 本地变量不是环境变量,本地变量只在bash有效,子进程不会继承本地变量

区别:

环境变量 本地变量
作用范围 环境变量是在操作系统级别定义的变量,可以被所有的子进程继承并使用,对整个系统和所有用户都有效 本地变量只在定义它的当前 shell 进程中有效,对于其它的子进程不可见
存储位置 环境变量通常存储在系统级别的配置文件中 本地变量则只存在于当前 shell 进程的运行环境中
继承性 环境变量可以被子进程继承并使用,对系统中所有的进程都是全局可见的 本地变量不能被子进程继承。如果需要将本地变量转换成环境变量,可以使用export命令

✈️取消本地变量和环境变量

  如果我们自定义的环境变量或者本地变量现在不想要了,我们可以使用这条指令:

unset 环境/本地变量名#取消环境/本地变量

  比如删除我们刚刚的 HEHE 和 HAHA:

  这样就将 环境/本地变量删除了。


🚀环境变量的出处

  不知道大家有没有想过,我们环境变量是存在哪的呢?为什么我们开机就有这些环境变量或者本地变量呢?

  上次我们也说了,为什么我们导入的环境变量重启会消失,是因为 我们操作是内存级的,并没有保存到磁盘,而每次重启内存数据丢弃,从磁盘重新拷贝数据到内存。

  那么究竟是哪个文件?我来带大家看一看:

  在Linux操作系统的家目录当中,隐藏文件有这样一个文件:.bash_profile文件,我们打开这个文件:

  其实这就是一个脚本文件,用来导入环境变量,系统启动时,bash会读取这个脚本文件,从而获取环境变量

  而今天我们想要一个重新登陆也能使用的自定义环境变量,那么我们就可以在下方把环境变量写入并保存即可:

  我们保存后到终端页面,使用下面命令让文件生效,那么这个环境变量就生效了:

source .bash_profile#使bash_profile内的环境变量生效

  当然我这台机器的Linux系统bash_profile文件并未生效,可能是登录时bash并未读取.bash_profile文件,所以不能生效,但是大部分人应该是没问题的。


📒✏️总结

  •  我们了解了main函数第三个参数可以获取环境变量,以及一个变量和一个接口可获取环境变量表。
  •  我们了解了什么是环境变量什么是本地变量。
  •  我们学习了如何永久导入环境变量以及如何删除环境变量或本地变量。

  创作不易,如果这篇文章对您有帮助的话,还望留下一个小小的赞支持博主呀~~

相关文章
|
Linux Shell
入职必会-开发环境搭建36-Linux常用操作-Linux环境变量
环境变量的作用是指定到哪个目录去找你输入的命令执行。环境变量的设置分为:临时设置和永久设置两种。
212 6
|
9月前
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1528 21
|
9月前
|
监控 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) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
11月前
|
Shell Linux
Linux-环境变量
通过合理设置和管理环境变量,可以显著提高工作效率和系统管理能力。理解并掌握这些基本操作,是每个Linux用户和管理员的必备技能。
352 13
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
663 4
|
Java Linux
linux 对子用户配置java 环境变量
linux 对子用户配置java 环境变量
206 3
|
Ubuntu Linux Shell
Ubuntu/linux系统环境变量配置详解
理解和掌握如何配置环境变量对于使用和管理Ubuntu/Linux系统非常重要。
687 2
|
Linux
Linux环境变量及作用
Linux中的环境变量是系统配置参数,如HOME指示用户家目录,MAIL指邮件位置。`env`命令显示所有环境变量。系统有数百个变量,但了解关键的几个足够,如PATH、HOME、TERM等。环境变量由变量名和值组成,可自定义,如WORKDIR。局部变量需用`export`使其全局有效,以便其他用户使用。`su`命令用于切换用户,展示不同用户环境下变量值的差异。
263 0
Linux环境变量及作用
|
关系型数据库 MySQL Shell
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
【权限提升】Linux系统&环境变量&定时任务&权限配置不当&MDUT自动化
356 4
|
Linux Shell
在Linux中,如何设置环境变量?
在Linux中,如何设置环境变量?