【linux】详谈 环境变量

目录

一、基本概念

二、常见的环境变量

取消环境变量

三、获取环境变量

通过代码获取环境变量

环境变量的特性

[1. getenv函数:获取指定的环境变量](#1. getenv函数:获取指定的环境变量)

[2. environ获取环境变量](#2. environ获取环境变量)

四、本地变量

五、定义环境变量的方法

临时定义(仅对当前会话有效)

永久定义(对所有会话有效)


linux专栏:传送门!

一、基本概念

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

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

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

二、常见的环境变量

查看环境变量

bash 复制代码
echo $NAME //NAME:你的环境变量名称

把我们自己的路径中的可执行放入环境变量中

bash 复制代码
PATH=$PATH:可执行程序所在的路径

bash会形成一张表,叫环境变量表如上图这样存储环境变量。bash还有一张命令行参数表。bash先拿到指令在环境变量中进行查找。

所以要执行一个程序,会先找到bash通过PATH环境变量来找指令。

取消环境变量

bash 复制代码
unset 要取消的环境变量

三、获取环境变量

通过代码获取环境变量

环境变量的特性

环境变量是可以被子进程继承下去的(也就是说环境变量是全局的)

其实我们所写的所有进程都是子进程,因为它们(不包括由我们所写的进程所创建的进程)的父进程都是bash,也就是说bash就是把它的环境变量通过main函数传参给了我们所写的进程

1. getenv函数:获取指定的环境变量

cpp 复制代码
man getenv //查看
cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>

int main(int argc,char* argv[],char* env[])
{
    pid_t id=fork();
    if(id==0)
    {
        //子进程执行
        char* username=getenv("USER");
        printf("you are: %s\n",username);
    }
    return 0;
}

用于验证身份

如果当前用户不是我们设置的用户,即使是root用户来了也不行


2. environ获取环境变量

cpp 复制代码
man environ //查看

这里是一个二级指针,指向了char* env[]这个指针数组来查看对应的变量

四、本地变量

本地变量:作用域仅限于当前会话或进程及其子进程,不同用户的本地变量相互独立,不会影响其他用户或系统层面的环境配置。本地变量是不会被子进程继承的,只在bash内部有效的变量

创建本地变量

myname,赋值为用户

bash 复制代码
myname=name

验证本地变量的特性

本地变量不会被子进程继承。只在bash中

可以发现本地变量不会被子进程继承

移除本地变量

cpp 复制代码
unset 本地变量名或者是环境变量名

五、定义环境变量的方法

临时定义(仅对当前会话有效)

使用export命令:

我们可以同过export命令,把子进程的东西给父进程。但是这时候就会出现疑惑,子进程不是继承父进程的东西吗。其实export是内建命令不需要创建子进程,而是让bash自己亲自执行,bash自己掉函数或者进行系统调用。

例如,要定义一个名为MY_VARIABLE的环境变量,并将其值设置为my_value,可以在终端中输入以下命令:

bash 复制代码
plaintext
export MY_VARIABLE = my_value

注意,在等号两边不能有空格,否则会出现错误。正确的写法也可以是export MY_VARIABLE=my_value。
在命令行直接赋值(适用于简单变量):

可以直接使用VARNAME=value的形式来定义一个变量,但这种变量不是环境变量,只是一个普通的 shell 变量。如果要将其变成环境变量,可以使用export命令。

bash 复制代码
plaintext
MY_VAR=test
export MY_VAR

永久定义(对所有会话有效)

通过修改配置文件(适用于特定用户)

对于 Bash shell 用户(大多数 Linux 默认的 shell):

可以编辑用户主目录下的.bashrc文件(这个文件在用户每次打开一个新的 Bash 终端时会被读取)。使用文本编辑器(如vi或nano)打开~/.bashrc文件,在文件末尾添加如下内容:

bash 复制代码
plaintext
export MY_PERMANENT_VARIABLE = my_permanent_value

保存文件后,在终端中运行source ~/.bashrc或者重新打开一个终端,新定义的环境变量就会生效。这个变量会在用户每次登录或者打开新的 Bash 终端时自动设置。

对于所有用户(系统级别的环境变量):

可以编辑/etc/profile文件。这是一个系统级别的配置文件,会对所有用户生效。在/etc/profile文件中添加环境变量定义的方式与在.bashrc文件中类似,例如:

bash 复制代码
plaintext
export SYSTEM_VARIABLE = system_value

注意,修改/etc/profile文件需要管理员权限(root用户权限)。修改完成后,所有用户在下次登录或者打开新的终端时,新的环境变量就会生效。


本篇完,下篇见!

相关推荐
阿珊和她的猫27 分钟前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
_Kayo_2 小时前
node.js 学习笔记3 HTTP
笔记·学习
一只栖枝2 小时前
华为 HCIE 大数据认证中 Linux 命令行的运用及价值
大数据·linux·运维·华为·华为认证·hcie·it
fouryears_234173 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~3 小时前
C#---StopWatch类
开发语言·c#
wuicer5 小时前
ubuntu 20.04 安装anaconda以及安装spyder
linux·运维·ubuntu
lifallen5 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研5 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
快乐的划水a5 小时前
组合模式及优化
c++·设计模式·组合模式
CCCC13101635 小时前
嵌入式学习(day 28)线程
jvm·学习