第三部分:3---环境变量

目录

什么是环境变量?

PATH环境变量:

临时修改环境变量PATH:

HOME环境变量:

可能使用环境变量的场景:

进程和环境变量的关系:

环境变量相关操作:

代码获取环境变量:

主函数传参获取环境变量:

通过C语言指针获取环境变量:

本地变量和环境变量的区别:

Linux命令分类:

取消环境变量:

查看环境变量:


什么是环境变量?

  • 环境变量是一个全局变量,系统中存在大量的环境变量,存在新式是以键值对的方式存在。

  • 每一个环境变量都有特殊功能,用于完成特定的系统功能。

  • 环境变量可以被系统中运行的任何进程访问。

  • 环境变量可以存储:目录路径、文件路径、系统信息、临时标志或状态等等。

PATH环境变量:

  • 执行一个命令,需要先找到他的可执行程序在哪,也就是要找到可执行程序的目录。

  • 系统命令可以直接调用,不指明目录,是因为他的目录存储在PATH中。

echo $PATH //打印PATH路径

  • PATH的本质就是一个由目录组成的字符串列表,各目录之间使用冒号分隔(Linux)。当输入一个命令时,操作系统会按照PATH变量中定义的目录顺序依次搜索对应路径,查询命令对应的可执行程序。找到就执行,找不到就报错。

临时修改环境变量PATH:

  • 这种修改适用于其他所有环境变量,且只会持续到当前终端会话结束。

  • 这种修改是对内存中当前会话的环境变量进行修改,并不会影响系统配置文件或其他会话中的 PATH 变量。

PATH=$PATH:new path

//将一个目录添加到环境变量

//PATH表示之前的目录字符串列表,如果不加PATH就会直接使用new path覆盖原来的PATH

  • 如果想要删除PATH中的某个目录,可以直接将去掉该目录的PATH覆盖原PATH。

HOME环境变量:

  • HOME环境变量存储当前用户主目录的路径。

  • 用户登陆时,从/etc/passwd 文件读取用户的主目录路径,赋值给HOME环境变量。

  • 用户登陆成功后,调用 "cd $HOME" 命令进入用户的主目录路径。

echo $HOME //查看HOME环境变量

可能使用环境变量的场景:

  • 身份认证,限定部分用户可以使用程序的部分功能。

  • 首先getenv获取USER环境变量的值,得到操作系统的当前用户的用户名。

  • 然后和可使用功能的用户列表做对比,当前用户在列表中,就可以使用功能,否则不行。

进程和环境变量的关系:

  • 命令行启动的进程,他们的父进程都是bash / shell。这些进程的环境变量是由bash / shell传递过来的。

  • 父进程的环境变量是从用户主目录中的.bash_profile文件中读取到的。当用户登录后,系统会自动从.bash_profile文件读取配置信息,将值填充到bash的环境变量表中。

环境变量相关操作:

echo $环境变量 //显示环境变量的变量值。

export 环境变量 //添加一个自己的环境变量到bash,使用env可以查看。并没有直接写入到配置文件,而是在bash的上下文中存储。如果想要写到配置文件,使用vim打开.bash_profile文件,将这句话添加到配置文件即可。

env //显示所有的环境变量。

unset //清楚环境变量。

set //显示本地定义的shell变量和环境变量。

代码获取环境变量:

复制代码
char* getenv(const char* name); //通过环境变量名称获取环境变量,使用要包含头文件<stdlib.h>。
printf("PATH: %s",getenv("PATH"));//获取PATH环境变量

主函数传参获取环境变量:

复制代码
int main(int argc,char* argv[])
{
    for(int i=0;argv[i];i++)
    {
        printf("%d : %s",i,argv[i]);
    }
}

通过C语言指针获取环境变量:

  • 通过C语言自动设置好的全局变量,可以在main函数不接受参数的情况下访问环境变量表( char* argv\[\] )。

    extern char** environ; //指向argv[]的指针。
    for(int i=0;environ[i];i++) //环境变量表的最后一个元素为nullptr
    {
    printf("environ[%d] : %s",i,environ[i]);
    }

本地变量和环境变量的区别:

  • 将本地变量使用export声明后,本地变量提升为环境变量。

    MY_BIANLIANG=100 //直接在命令行声明,属于本地变量。等于号两边不要带空格。
    export MY_BIANLIANG //使用export声明后,提升为环境变量

  • 本地变量只会在bash进程有效,不会被子进程继承。

  • 环境变量可以被所有子进程继承,来实现他的" 全局性 "。

Linux命令分类:

  • 内建命令:由Shell程序(如Bash、Zsh等)直接提供和解释执行;不需要启动新的进程,执行速度通常更快。常见的内建命令有 cd、echo、alias、export、set、history 等。

  • 外部命令:独立的可执行程序,当执行外部命令时,Shell会启动一个新的子进程来运行这个命令。常见的外部命令有 ls、grep、find、cp、mv、awk、sed 等。

取消环境变量:

unset MY_BIANLIANG

查看环境变量:

env //查看环境变量

set //查看包含环境变量的所有变量(包括本地变量)

相关推荐
楚枫默寒1 小时前
Linux 编辑文件后自动添加修改日期
linux·运维·bash
2601_961194023 小时前
27考研刘晓艳单词pdf
linux·sql·ubuntu·华为·pdf·.net
狂炫冰美式4 小时前
你还在古法PPT吗,试试HTML呢?免费编辑导出工具给 xdm 放这了
前端·后端·github
2023自学中5 小时前
imx6ull 开发板 推流ov5640数据,虚拟机用 ffplay 拉流播放
linux·音视频·嵌入式·开发板
shandianchengzi5 小时前
【记录】Ghidra|Ubuntu 26.04 下 Ghidra 界面缩放完整指南
linux·ubuntu·逆向·ghidra
Soari5 小时前
Ubuntu 根分区文件系统损坏,系统启动时自动检查失败
linux·运维·ubuntu
杨云龙UP5 小时前
Oracle Health Check巡检脚本使用SOP V2.0:从HTML原始报告→生成Word专业巡检报告→交付客户_2026-06-03
linux·运维·数据库·sql·oracle·报告·巡检
广州灵眸科技有限公司6 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) Linux虚拟机准备
linux·运维·服务器
Thecozzy6 小时前
PR经历(Understand-Anything)
github
Peace7 小时前
【Prometheus】
linux·运维·prometheus