Linux--进程(七)环境变量

环境变量概念

环境变量=系统的"全局小纸条",上面写着各种配置、路径、参数,所有程序能看、能用。

它到底是什么? 可以理解为:

系统开机时就已经写好的一堆键值对;格式:名字=内容;整个系统、所有shell、你写的程序、都可以读到它

Linux去哪里找可执行文件?---->它只能去一个地方找,:PATH环境变量里面写的那些目录。

别的地方一律不找。

输入echo $PATH, 告诉我们当我们输入命令时,Linux只会在以下的文件中找命令,别的地方一律不去。

这里的冒号是 目录和目录之间的分隔符。

PATH就是找命令的 [搜索范围],输入的任何命令就是只能在PATH路径里寻找,不在PATH里面的程序,必须写路径(比如./)才能运行。

作用是:可以不用写完整路径,直接输入名字就能运行命令。

把自定义目录添加到系统的PATH环境变量中。

作用

引入环境变量,它是系统级的变量,变量名和变量内容,往往具有全局属性。

HOME:指定用户的主工作目录

SHELL:当前SHELL,他的值通常是/bin/bash

获取环境变量的方法

如何通过代码获取环境变量

第一种方法通过main函数的第三个参数char *env[ ]来访问环境变量。

第二种获取环境变量的方法。全局指针extern char **environ,environ是一个全局的字符串指针数组,他和main函数第三个参数env[ ],指向的是同一份环境变量数据。

第三种获取环境变量的方法是:getenv(name)

在代码里获取这些数据作用

在代码里获取环境变量,本质上就是让程序**"看菜吃饭、灵活适配"**:

不用把路径、用户名、开关等写死在代码里,程序会自动读取系统的"全局配置"。

运行前改一下环境变量,就能改变程序的行为,不用重新编译。

让程序在不同用户、不同机器上都能"自动适应",更智能也更省心。

一句话总结:环境变量就是程序的"运行时配置表",帮程序适配环境、灵活控制行为。

环境变量是父进程给的。孙子进程也可以看到环境变量。

bash进程的环境变量,又是从哪里来的? ------- >从Linux的系统配置文件来的,

程序、命令等都是bash进程的子进程。----->子进程代码和数据可以共享

内建命令:

我用最通俗、最简洁的话给你讲懂:

什么是内建命令?

内建命令 = 直接嵌在 Shell 内部的命令

不是外面单独的程序,运行时不创建新进程。

对比一看就懂

  • 普通命令(如 ls 、 gcc 、 find )

是独立程序,运行时会创建新进程。

  • 内建命令(如 cd 、 pwd 、 export 、 echo )

是Shell 自己的功能,运行不创建新进程。

为什么要有内建命令?(最关键)

拿 cd 举例:

  • 如果 cd 是外部命令,它会开子进程

  • 子进程改了目录,影响不到父进程(你的 Shell)

  • 所以 cd 必须是内建命令,直接改当前 Shell 的环境

export 设置环境变量也一样:

必须是内建,才能直接修改当前进程的环境变量。

总结

内建命令 = Shell 自带的功能,不创建新进程,能直接修改当前 Shell 的环境(目录、环境变量等)。

判断内建命令

  1. 一句话判断
  • 内建命令:不创建新进程,就是当前 Shell 自己执行。

  • 外部命令:会创建新进程,是开一个子进程去跑。

  1. 最直观区分方法(你现在就能用)

方法A:看是不是 Shell 自带功能

这些一定是内建,不创建进程:

  • cd

  • pwd

  • export

  • echo

  • exit

  • history

凡是改当前 Shell 状态的(目录、环境变量),一定是内建。

方法B:用 type 命令查(最准)

bash

type cd

type ls

type export

  • 输出 builtin → 内建,不创建进程

  • 输出 /usr/bin/xxx → 外部命令,创建新进程

  1. 最核心记忆点(考试必背)
  • 能影响当前 Shell 的 → 必须内建 → 不创建进程

如: cd 、 export

  • 只是干活、不影响当前 Shell 的 → 外部命令 → 创建进程

如: ls 、 cat 、 gcc

超简洁总结

内建命令:自己干,不创建新进程。

外部命令:叫别人干,创建新进程。

内建命令的作用

  1. 修改当前 Shell 进程自身的状态

比如切换目录、设置环境变量、退出终端。

  1. 不创建新进程,执行更快

  2. 只有内建命令,才能真正影响当前 Shell

外部命令改不动当前进程的目录、环境变量。

一句话终极总结

内建命令,就是让 Shell 自己干活,直接修改当前进程,不创建子进程。

本地变量

本地变量是什么?

只在当前 Shell 进程里有效,

子进程看不见、用不了的变量。

和环境变量的区别(最关键)

  • 本地变量:只在自己进程里有,不传给子进程

  • 环境变量:会继承给子进程

怎么定义

bash

name=张三

这就是本地变量。

怎么变成环境变量

bash

export name

export 一下,就变成环境变量,子进程能拿到。
一句话总结
本地变量:自己用,不传给儿子。只在bash内部,属于当前shell自己的变量。

环境变量:大家用,能传给儿子。

三个环境之间的联系和区别

**- 本地变量:只在当前 Bash 里,子进程看不见。

  • 环境变量:Bash 和子进程都能用。
  • 内建命令:专门操作这两种变量,不创建新进程。
    一句话:
    内建命令管变量,本地自用,环境公用。**
相关推荐
xiaokangzhe17 分钟前
Linux系统安全
linux·运维·系统安全
feng一样的男子25 分钟前
NFS 扩展属性 (xattr) 提示操作不支持解决方案
linux·go
南棱笑笑生29 分钟前
20260310在瑞芯微原厂RK3576的Android14查看系统休眠时间
服务器·网络·数据库·rockchip
xiaokangzhe33 分钟前
Nginx核心功能
运维·nginx
松果17743 分钟前
以本地时钟为源的时间服务器
运维·chrony·时间服务器
XDHCOM1 小时前
ORA-32152报错咋整啊,数据库操作遇到null number问题远程帮忙修复
服务器·数据库·oracle
Highcharts.js1 小时前
Highcharts React v4.2.1 正式发布:更自然的React开发体验,更清晰的数据处理
linux·运维·javascript·ubuntu·react.js·数据可视化·highcharts
ayaya_mana1 小时前
快速安装Nginx-UI:让Nginx管理可视化的高效方案
运维·nginx·ui
c++之路2 小时前
Linux网络协议与编程基础:TCP/IP协议族全解析
linux·网络协议·tcp/ip
Charlie__ZS3 小时前
Ubuntu 22.04新建用户,并赋予管理权限
linux·os·ubuntn