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

【Linux】环境变量

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

【Linux】环境变量

大家好我是沐曦希💕


一、基本概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,是操作系统为了满足不同的应用场景预先在系统内预先设置的一大批全局变量。
如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

要执行一个程序或者指令,需要先找到这个程序,就需要带上路径来找到该程序。可是不带路径要怎么找到该程序呢?就需要用到环境变量。

  • 第一种方法
    把文件拷贝到系统的默认路径下:
    在这里插入图片描述
    但是这种方式存在缺陷:我们的指令没有经过测试,尽量不要把代码安装在系统里,会污染系统指令池

之所以能够找到,是因为系统的环境变量,比如在编写代码的时候,在链接的时候,我们不知道所链接的动态静态库在哪里,但是可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

使用su登录root用户,就是把root的环境变量等加载进来。

环境变量PATH
在这里插入图片描述

  • 第二种方法
export PATH=$PATH:当前路径

在这里插入图片描述
在Linux下bash(命令行)是可以定义变量。这是Linux下的环境变量,对于Xshell登录的时候系统会默认把.bash_profile执行一次,把环境变量找到当前的shell当中,所以一旦启动成功会在内存里维护一个变量$PATH

在这里插入图片描述
而对于windows下的环境变量我们就非常熟悉了,比如之前配置的jdk的环境变量
在这里插入图片描述

二、常见的环境变量

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

在这里插入图片描述

env(用于查看当前机器能用的所有环境变量)
在这里插入图片描述

1.查看环境变量的方法

  • 第一种

使用env查看所有的环境变量

  • 第二种

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

  • 补充

history用于查看我们曾经全部使用过的命令

三、系统调用获取环境变量

我们可以通过代码来获取环境变量

  • 1.getenv
    在这里插入图片描述
    以指令的形式获得环境变量
    在这里插入图片描述
    USER环境变量最大的意义就是可以标识当前使用Linux用户:
    在这里插入图片描述

我们可以利用strcmp直接去判断是否为root用户:
在这里插入图片描述
在这里插入图片描述
以root用户运行该程序:
在这里插入图片描述

这很好解释了之前遇到的问题:如何知道当前没有权限去访问,直接被拒绝呢?

执行指令的时候,通过访问任何文件,文件上面有对应的拥有者和所属组,会根据环境变量user去进行对应,对身份进行认证,环境变量会在不同的应用场景被使用。

四、设置环境变量

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

在这里插入图片描述
设置了一个局部变量,echo可以获取到,但是env获取不到myval,因为myval不是环境变量。

可以采用export将myval设置成环境变量

  • export

在这里插入图片描述

在这里插入图片描述
用export将本地变量myval转换成环境变量:
在这里插入图片描述

1.子进程继承

在命令行上运行mytest时候,bash就是一个系统进程,mytest也会变成一个进程(通过fork创建父子进程),是bash的子进程。而环境变量具有全局属性的根本原因是会被子进程继承下去,因为环境变量定义给bash,而子进程会全部继承下去,这就被称为环境变量。所以环境变量具有全局性,而本地变量只会在当前进程(bash内)有效。

为什么会继承下去?为了不同的应用场景,让bash替我们寻找指令路径,例如:身份认证;有些子进程需要用到这些信息,确认当前用户的信息。

  • set

set: 显示本地定义的shell变量和环境变量
在这里插入图片描述

  • unset

清除环境变量
在这里插入图片描述
取消环境变量需要一定的时间。

2.PWD

系统为什么知道我们当前的路径在哪里:如一开始学的ls,加上文件名就可以了,不需要加上路径,那ls为什么知道当前的路径是在哪里?

因为环境变量PWD记录着我们当前的路径,会随着我们路径改变而改变:
在这里插入图片描述
环境变量在bash中维护当前所处的路径,路径发生变化时,shell会调整环境变量的值,而运行ls是在创建子进程,而环境变量会被子进程继承,所以ls拿到了当前路径,所以ls不需要带上路径

  • 实现pwd指令
#include#include #define MYPWD "PWD"int main(){    char* myenv = getenv(MYPWD);    if(NULL == myenv)    {        printf("%s:not found\n",MYPWD);        return 1;    }    printf("%s\n",getenv(MYPWD));      return 0;}

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五、命令行参数

main函数也存在命令行参数,最多有三个。
main函数也是被系统调用的,所以可以理解为main函数的参数由系统/父进程进行传参的。
在这里插入图片描述
直接make发现报错:
在这里插入图片描述
在这里插入图片描述
要对Makefile进行更改
在这里插入图片描述

再运行一次:
在这里插入图片描述
在这里插入图片描述
命令行参数实际上是把程序名和选项传递给argv(指针数组)的,选项多少就需要定义argv的大小。

参数的意义在于可以通过命令行选项控制使其结果不同:

在这里插入图片描述
在这里插入图片描述

六、代码获取环境变量

  • 命令行第三个参数

在这里插入图片描述

其中char* argv[]是命令行参数,char* env[]是环境变量

在这里插入图片描述

  • 通过第三方变量environ获取 (extern char**environ)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在进程的上下文中,获取环境变量的三种方式
1.getenv(推荐)
2.char* env[](在main函数作为参数)
3.extern char** environ

七、写在最后

1.环境变量的组织方式

每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以’\0’结尾的环境字符串。
在这里插入图片描述
当然啦,环境变量的知识不止这些,例如putenv也可以获取环境变量:
在这里插入图片描述
总结来说,环境变量本质就是操作系统给我们设置的一批全局变量,在计算机开机启动,加载图形化窗口或者登录给我们设置好的。

而对比Windows配置环境变量的原因就是找系统中对应的可执行程序的路径。

来源地址:https://blog.csdn.net/m0_68931081/article/details/128547631

免责声明:

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

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

【Linux】环境变量

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

下载Word文档

猜你喜欢

【Linux】环境变量

大家好我是沐曦希💕 文章目录 一、基本概念二、常见的环境变量1.查看环境变量的方法 三、系统调用获取环境变量四、设置环境变量1.子进程继承2.PWD 五、命令行参数六、代码获取环境变量七、写在最后1.环
2023-08-23

Linux环境变量影响环境配置

Linux环境变量是用于定义系统和用户级设置的一种方法,它可以影响程序的行为和系统的运行方式。了解如何设置和查看环境变量对于Linux用户来说是非常重要的技能。以下是关于Linux环境变量影响环境配置的相关信息:环境变量的分类按生存周期分
Linux环境变量影响环境配置
2024-09-24

Linux环境变量与软件执行环境

Linux环境变量是操作系统中用于定义操作系统运行环境的一些参数,它们对软件的执行环境有着重要的影响。了解环境变量的配置和管理对于确保软件正确执行至关重要。环境变量的分类系统级环境变量:对所有用户都有效,通常存储在系统的全局配置文件中,如
Linux环境变量与软件执行环境
2024-09-24

Linux环境变量是什么

这篇文章主要介绍了Linux环境变量是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux环境变量是什么文章都会有所收获,下面我们一起来看看吧。linux系统是多用户的任务系统,对于每个用户都可以指定特
2023-06-28

linux java环境变量配置

配置如下:export JAVA_HOME=/apps/jdk1.8.0_181export PATH=$JAVA_HOME/bin:$PATHexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_H
2023-06-02

Linux有什么环境变量

本篇内容主要讲解“Linux有什么环境变量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux有什么环境变量”吧!Linux环境变量有:1、HOME,用户的主目
2023-02-06

Linux环境变量有哪些

Linux环境变量有很多,以下是一些常见的环境变量:1. PATH:指定系统查找可执行文件的路径2. HOME:用户的家目录路径3. USER:当前登录用户的用户名4. SHELL:指定用户默认的Shell程序5. LANG:指定系统默认的
2023-08-24

【Linux】Linux环境变量的理解 --- 命令行参数、shell子进程、环境变量、本地变量…

加油布鲁斯,你能行的! 文章目录 一、环境变量PATH中的系统默认搜索路径1.将程序安装到/usr/bin目录(不带./运行自己写的程序)2.将程序路径添加到PATH环境变量里面(不带./运行自己写的程序) 二、环境变量的深度
2023-08-25

linux如何删除环境变量

本篇内容主要讲解“linux如何删除环境变量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux如何删除环境变量”吧!在linux中,可以利用unset命令删除环境变量,该命令用于删除变量或
2023-06-29

linux环境变量如何设置

在Linux环境中,可以通过以下几种方式来设置环境变量:1. 临时设置环境变量:可以在命令行中使用 `export` 命令来临时设置环境变量,例如:```export MY_VARIABLE=value```2. 永久设置用户级别的环境变量
2023-08-31

linux的环境变量怎么看

今天小编给大家分享一下linux的环境变量怎么看的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。linux环境变量有两个位置:
2023-06-30

linux怎么编辑环境变量

要编辑Linux的环境变量,可以按照以下步骤进行操作:打开终端。使用以下命令打开环境变量文件(通常为`.bashrc`或`.bash_profile`):如果使用的是Bash shell:`vi ~/.bashrc` 或 `vi ~/.
2023-10-26

Linux怎么查看环境变量

本篇内容主要讲解“Linux怎么查看环境变量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux怎么查看环境变量”吧!查看环境变量env #显示全局变量,export的变量. 取消un
2023-06-06

linux怎么更新环境变量

要在Linux系统中更新环境变量,可以按照以下步骤进行操作:打开Terminal(终端)。使用文本编辑器(例如vi、nano或gedit)打开一个shell配置文件,例如~/.bashrc或~/.bash_profile。例如,输入以下命
linux怎么更新环境变量
2023-10-28

编程热搜

目录