|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
## IDENT_IDENTITY: 夜神月 保持低旋律节奏 >>> [ 进入个人主页 ] <<< |
| |--------------------------------------------------------------------------------------|---|----------------------------------------------------------------------------------------| | MODULE_01 《C++ 学习》 | | MODULE_02 《Linux 学习》 | |
| SYSTEM_STATUS: STABLE // ENCRYPTION: ACTIVE |
|--------------------------------------------------------------------------------|
|
|
文章目录
-
- 一、命令行参数
- 二、环境变量
- 1.概念、实际场景
- 2.引入Linux环境变量3-4个,拓展linux常见的环境变量
- [3.获取、设置环境变量 命令](#3.获取、设置环境变量 命令)
- [4、 环境变量的"生命周期"与内存本质](#4、 环境变量的“生命周期”与内存本质)
-
- [4.1. 溯源:环境变量从何而来?](#4.1. 溯源:环境变量从何而来?)
- [4.2. 初始化逻辑链("炸开"环境变量)](#4.2. 初始化逻辑链(“炸开”环境变量))
- [4.3. 指令本质归纳(408 考点对比)](#4.3. 指令本质归纳(408 考点对比))
- [4.4. 深度探讨:磁盘文件 vs 内存 PCB](#4.4. 深度探讨:磁盘文件 vs 内存 PCB)
-
- [4.5、 总结:从符号看系统协议](#4.5、 总结:从符号看系统协议)
一、命令行参数

main函数里 存在3个命令参数
int argc 代表数组中元素的格式
char* argv[] 指针数组
char* env[] 环境变量
二、环境变量
1.概念、实际场景
W下的环境变量

- 环境变量概念
命令行进行查找的地方、具有全局性
-
实际场景

2.引入Linux环境变量3-4个,拓展linux常见的环境变量
bash
[ljy@VM-0-12-centos 12-30]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ljy/.local/bin:/home/ljy/bin
bash
[ljy@VM-0-12-centos 12-30]$ env | head -5
XDG_SESSION_ID=50065
HOSTNAME=VM-0-12-centos
SHELL=/bin/bash
TERM=xterm
HISTSIZE=3000
bash
[ljy@VM-0-12-centos 12-30]$ echo $HOME
/home/ljy
[ljy@VM-0-12-centos 12-30]$ echo $PWD
/home/ljy/12-30
[ljy@VM-0-12-centos 12-30]$ echo $OLDPWD
/home/ljy
结论:任何进程启动时都会存在两张表,1.命令行参数表。2.环境变量表。
3.获取、设置环境变量 命令
一、 核心进程逻辑拆解
-bash(会话首进程 / 进程鼻祖)
- 角色 :它是整个登录会话的根节点(Session Leader)。
- 功能 :专门负责读取
~/.bash_profile并"炸开"(初始化)全局环境变量。 - 深度理解 :它不只是"后台"的鼻祖,而是全会话进程 (包含前台与后台)的始祖。它通过操作系统底层的
fork()系统调用产生子进程。
S+状态下的bash(前台代理 / 翻译官)
- 角色 :当前正在占领终端、与用户直接交互的代理进程。
- 功能:专门负责接收键盘输入的指令,并进行语法解析。
- 关键标识 :状态位中的
+代表前台进程组 。在 Linux 逻辑中,只有带+的进程才能直接"吃"到你从键盘敲进去的指令。
二、 思维补丁:系统逻辑闭环
- 数据流向图
键盘输入 → \rightarrow → 终端设备 (TTY) → \rightarrow → S+ 状态的 bash (解析器) → \rightarrow → 执行具体指令
- 环境变量的"遗传学"
- 初始化 :
-bash启动时通过读取配置文件划定"疆域"。 - 继承性 :
-bash初始化的变量,会被其派生的S+状态子 bash 完美继承,无需重复读取。
三、 考研模式总结(金句摘要)
"-" 标定血缘与初衷(初始化环境);
"+" 标定权力与交互(掌控前台输入)。
[温故知新:408 考点关联]
在操作系统中,进程状态的切换(S、R、Z等)是核心考点。理解了 + 号代表前台组,就理解了为什么
环境变量的由来
每一次登录linux的时候,操作系统都会为我们提供一个bash进程,这个bash进行是所有前后端的鼻祖。用于命令解析,且是死循环。
它的逻辑是
bash-> ~ /.bash_profile->~/.bashrc->/etc/bash->*
从而获取环境变量。
4、 环境变量的"生命周期"与内存本质
4.1. 溯源:环境变量从何而来?
每当你登录 Linux 时,系统会自动创建一个 -bash 进程。这个进程是所有前后端程序的鼻祖 ,其核心逻辑是一个持续运行的死循环,专门用于命令解析。
4.2. 初始化逻辑链("炸开"环境变量)
-bash 启动后,会按照以下逻辑顺序层层读取配置文件:
-bash→ \rightarrow →~/.bash_profile→ \rightarrow →~/.bashrc→ \rightarrow →/etc/bashrc→ \rightarrow → 获取完整环境
4.3. 指令本质归纳(408 考点对比)
| 指令 | 操作本质 | 408 考研逻辑映射 |
|---|---|---|
echo |
读取变量值 | 进程内存读取:从 PCB 环境变量区获取数据并输出。 |
export |
新增/提升变量 | PCB 动态扩展:在进程控制块中新增环境变量条目,并标记为可继承。 |
env |
显示环境变量 | 环境表快照:只显示 PCB 中会被子进程继承的"全局变量"。 |
set |
显示所有变量 | 全集观察:显示当前 Shell 的环境变量 + 局部变量 + 函数定义。 |
unset |
删除变量 | 内存销毁:从当前进程的环境变量表中抹除指定条目。 |
4.4. 深度探讨:磁盘文件 vs 内存 PCB
- 持久化逻辑 :在
~/.bash_profile中修改环境变量,本质是修改磁盘上的静态配置文件。 - 运行期逻辑 :
export动作本质是在**进程控制块(PCB)**内存空间中动态新增/修改数据。 - 生效机制 :配置文件仅在登录瞬间被加载;若要在运行中同步磁盘修改,必须使用
source命令将静态配置"注入"到内存 PCB 中。
4.5、 总结:从符号看系统协议
- "-" (登录位):标定血缘与初衷。代表它是从磁盘读取配置、初始化环境的"创世进程"。
- "+" (前台组):标定权力与交互。代表它拥有当前 TTY 终端的控制权,是直接吞吐用户指令的代理。
[408 考研划重点]
理解环境变量的继承性是掌握 fork() 与 exec() 系统调用的前提。子进程继承的是父进程环境变量的副本(基于写时复制技术),这种设计保证了进程间环境的相对隔离与安全性。