我的编程空间,编程开发者的网络收藏夹
学习永远不晚

[Linux打怪升级之路]-环境变量

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

[Linux打怪升级之路]-环境变量

前言

作者:小蜗牛向前冲

名言:我可以接受失败,但我不能接受放

如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。

目录

一、认识环境变量

二、获取环境变量的三种方法

1、通过getenv获取

2、通过mian函数命令行第三个参数

3、通过第三方变量environ获取

三、设置环境变量 


本期学习目标:认识环境变量,了解三种环境变量的获取方式,环境变量的设置。

一、认识环境变量

环境变量(environment variables):般是指在操纵系统中用来指定操作系统运行环境的一些参数。

那我们怎么去理解呢?

我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找

常见的环境变量

  • PATH : 指定命令的搜索路径
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL : 当前Shell,它的值通常是/bin/bash。
  • USER: 标识当前的使用Linux的用户

我们上面说了这么多,我感觉还是有的模糊,这是非常正常的,下面我们去见一见环境变量:

echo $NAME //NAME:你的环境变量名称

 这里我们对三个常见的环境变量用echo命令进行查询,验证了他们的用途。但是其中我们思考一下:PATH这个环境变量指定命令搜寻路径,这个有什么用?为什么我们在Liunx下输入命令就能执行操纵,而我们输入自己的二进制文件的命令就没有用呢?

这里将不得不提环境变量PATH的功劳了,当我们调用系统命令的时候,他就能为命令指名路径并找到可执行程序从而实现这个功能。

测试HOME

在上面我们知道这个环境变量是能够标识执行者的身份的,这也就是为什么我们普通用户执行一些命令时候,会没有权限,必须切换为root或者提权才能够执行。

下面我们写个代码测试一下:

#include#include#define USER "USER"//将USER环境变量重新命名int main(){    char*who = getenv();//getenv能够获取环境变量    printf("user: %s\n",who);    return 0;}

这里可看到USER环境变量,他就能识别谁在使用系统,到底是root还是普通用户,这里我们要注意一个细节,我们在切换root:

su - //切换root

是用su -这里指的是重新登入root会重新载入有关root的信息,而用su命令仅仅只是切换root,环境变量可能还是在用普通用户的。 

和环境变量相关的命令

  1. echo: 显示某个环境变量值
  2. export: 设置一个新的环境变量
  3. env: 显示所有环境变量
  4.  unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量

二、获取环境变量的三种方法

这里将为大家展示三种获取环境变量的方法:

1、通过getenv获取

getenv是C语言中的一个库函数,专门用来获取环境变量

 上面我们通过getenv获取了USER的环境变量,通过getenv获取后,我们就能够合理的利用环境变量来达到我们相应的目的。

2、通过mian函数命令行第三个参数

在理解mian函数的第三个参数之前,我们要先看一看其他二个参数是干什么的。

int main(int argc, char *argv[]){if (argc != 2){printf("Usage: \n\t%s [-a/-b-c]\n", argv[0]);}if (strcmp("-a", argv[1]) == 0){printf("功能a\n");}if (strcmp("-b", argv[1]) == 0){printf("功能b\n");}if (strcmp("-c", argv[1]) == 0){printf("功能c\n");}return 0;}

这里简单解释一下:argc表示argv指针数组中有效数组元素的个数,其中指针数组存放的是我们在操纵系统下输入的第一个字符串的起始地址,后面的以此类推以NULL结束。

 其中我们可以看到其实grav指针数组的元素就是我们输入的字符串,其实当我们调用main函数时,系统就为我们调用二张表,一张命令行参数表argv,另外一张为环境变量表env。

env就为main函数的第三个参数:

int main(int argc, char* argv[], char* env[]){//NULL->0for (int i = 0;env[i];i++){printf("env[%d]:%s\n", i, env[i]);}}

 这里我们就通过main函数的第三个参数查看了环境变量。

3、通过第三方变量environ获取

#include int main(int argc, char *argv[]){ extern char **environ; int i = 0; for(; environ[i]; i++){ printf("%s\n", environ[i]); } return 0;}

这里我们要注意:libc中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时 要用extern声明

其实这里的environ就二级指针,他指向的就是env[]这个指针。

我们了解三种获取环境变量的方式,但是我觉的第一种用getenv函数获取是最方法,所以推荐用getenv获取环境变量。

三、设置环境变量 

在设置环境变量之前我们要先了解一个概念:本地变量和环境变量 。

本地变量是指中基本部有没有导入到操纵系统中,只在当前进程有效,而环境变量是导入到操纵系统中的也就说在env下可查看。

下面写个代码来验证:

#define MY_VAL "myval"int main(){char* myenv = getenv(MY_VAL);if (NULL == myenv){printf("myenv,not found\n");}printf("%s=%s\n", MY_VAL, myenv);}

 

这里我们可以看到 ,我们通过getevn并没有被找的,这是以为myval只是个本地的变量,但是我们如何将本地变量设置为全局的环境变量呢?其实如果我们本地变量已经存在在的这种情况下我们只要:

export myval//设置环境变量unset myval //取消环境变量

 这里我们就将本地变量设置成了环境变量。

这里我们可以看到tes是一个子进程(bash的子进程),而环境变量是具有全局属性的会被子系统继承下去,这就是我们是myval变的可查了,那继承这全局属性还有什么用呢?

这是因为在很多场景下,我们不会要父进程去执行,而是生成一个子进去执行相应的命令,而只有子进程具有父进程的全局属性命令才能够被执行成功。

 

来源地址:https://blog.csdn.net/qq_61552595/article/details/127910312

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

[Linux打怪升级之路]-环境变量

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

linux python升级及全局环境变

1、下载pythonwget https://www.python.org/ftp/python/3.4.5/Python-3.4.5.tgz 或者去官网下载压缩包2、安装python3依赖yum install openssl-devel
2023-01-31

Linux环境变量与程序执行路径

在Linux系统中,环境变量是一种存储系统设置的方法,这些设置可以被shell或操作系统中的其他程序使用当程序执行时,它需要知道从哪里找到所需的库和可执行文件。这就是程序执行路径的作用。程序执行路径通常包括以下几个部分:系统路径(Syst
Linux环境变量与程序执行路径
2024-09-25

Linux环境变量与脚本执行路径优化

在Linux系统中,环境变量和脚本执行路径的优化对于提高系统性能和用户体验非常重要优化环境变量:a. 减少不必要的环境变量:只保留对脚本执行有用的环境变量,避免过多的环境变量导致系统负担加重。b. 设置合理的默认值:为环境变量设置合理的
Linux环境变量与脚本执行路径优化
2024-09-25

Linux系统如何添加路径到PATH环境变量

这篇文章主要介绍了Linux系统如何添加路径到PATH环境变量,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在linux系统中,环境变量就是某一个目录的路径path,设置环境
2023-06-28

Linux环境变量对程序查找路径的影响

在Linux系统中,环境变量对程序查找路径有很大的影响PATH环境变量:PATH是一个由冒号分隔的字符串,其中包含了多个目录路径。当用户在终端中输入一个命令时,系统会在这些目录中查找对应的可执行文件。如果在PATH变量中指定的某个目录下存在
Linux环境变量对程序查找路径的影响
2024-09-24

Linux系统下怎么修改环境变量PATH路径

这篇文章主要介绍“Linux系统下怎么修改环境变量PATH路径”,在日常操作中,相信很多人在Linux系统下怎么修改环境变量PATH路径问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux系统下怎么修改环
2023-06-13

Linux系统中怎么修改环境变量PATH路径

Linux系统中怎么修改环境变量PATH路径,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。电脑中必不可少的就是操作系统。而Linux的发展非常迅速,有赶超微软的趋势。这里介
2023-06-16

编程热搜

目录