第三部分: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 //查看包含环境变量的所有变量(包括本地变量)

相关推荐
Zuckjet15 分钟前
V8 引擎的性能魔法:JSON 序列化的 2 倍速度提升之路
前端·chrome·v8
大路谈数字化1 小时前
Centos中内存CPU硬盘的查询
linux·运维·centos
John_ToDebug1 小时前
Chromium base 库中的 Observer 模式实现:ObserverList 与 ObserverListThreadSafe 深度解析
c++·chrome·性能优化
luoqice2 小时前
linux下查看 UDP Server 端口的启用情况
linux
放飞自我的Coder2 小时前
【github-action 如何为github action设置secrets/environment】
github·action
倔强的石头_3 小时前
【Linux指南】动静态库与链接机制:从原理到实践
linux
绝无仅有3 小时前
编写 Go 项目的 Dockerfile 文件及生成 Docker 镜像
后端·面试·github
赏点剩饭7783 小时前
linux中的hostpath卷、nfs卷以及静态持久卷的区别
linux·运维·服务器
绝无仅有3 小时前
使用 Docker 部署 Go 项目(Beego 框架)
后端·面试·github
神鸟云3 小时前
DELL服务器 R系列 IPMI的配置
linux·运维·服务器·网络·边缘计算·pcdn