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 和子进程都能用。
  • 内建命令:专门操作这两种变量,不创建新进程。
    一句话:
    内建命令管变量,本地自用,环境公用。**
相关推荐
清水白石0081 小时前
解锁 Python 性能潜能:从基础精要到 `__getattr__` 模块级懒加载的进阶实战
服务器·开发语言·python
济6171 小时前
ARM Linux 驱动开发篇---Linux设备树特殊节点及linux内核解析dtb文件过程--- Ubuntu20.04
linux·嵌入式·嵌入式linux驱动开发
Doro再努力1 小时前
【Linux操作系统14】操作系统概念与管理思想深度解析
linux·运维·服务器
Trouvaille ~1 小时前
【Linux】poll 多路转接:select 的改良版,以及它留下的遗憾
linux·运维·服务器·操作系统·select·poll·多路复用
没有bug.的程序员1 小时前
本地开发环境优化深度实战:Docker Compose 编排内核、依赖服务治理与极速环境搭建指南
运维·docker·容器·compose·本地开发·编排内核·依赖服务治理
Doro再努力1 小时前
【Linux操作系统13】GDB调试进阶技巧与冯诺依曼体系结构深度解析
linux·运维·服务器
blueSatchel1 小时前
GPIO子系统源码研究
linux·c语言
8125035331 小时前
计算机网络全栈连载计划
linux·网络·网络协议·计算机网络
袁袁袁袁满1 小时前
Linux如何保留当前目录本身并清空删除目录内的所有内容(文件+文件夹)?
linux·运维·服务器·清空删除目录内的所有内容