命令行参数和环境变量

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ## 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.获取、设置环境变量 命令

一、 核心进程逻辑拆解

  1. -bash(会话首进程 / 进程鼻祖)
  • 角色 :它是整个登录会话的根节点(Session Leader)
  • 功能 :专门负责读取 ~/.bash_profile 并"炸开"(初始化)全局环境变量。
  • 深度理解 :它不只是"后台"的鼻祖,而是全会话进程 (包含前台与后台)的始祖。它通过操作系统底层的 fork() 系统调用产生子进程。
  1. S+ 状态下的 bash(前台代理 / 翻译官)
  • 角色 :当前正在占领终端、与用户直接交互的代理进程。
  • 功能:专门负责接收键盘输入的指令,并进行语法解析。
  • 关键标识 :状态位中的 + 代表前台进程组 。在 Linux 逻辑中,只有带 + 的进程才能直接"吃"到你从键盘敲进去的指令。

二、 思维补丁:系统逻辑闭环

  1. 数据流向图

键盘输入 → \rightarrow → 终端设备 (TTY) → \rightarrow → S+ 状态的 bash (解析器) → \rightarrow → 执行具体指令

  1. 环境变量的"遗传学"
  • 初始化-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() 系统调用的前提。子进程继承的是父进程环境变量的副本(基于写时复制技术),这种设计保证了进程间环境的相对隔离与安全性。

相关推荐
xlq223221 分钟前
9.make_进度条
linux·运维·服务器
坐怀不乱杯魂7 分钟前
Linux - 网络指令
linux·服务器·网络
玄斎19 分钟前
华为ENSP配置实验:双网段互通 + DNS 解析 + Web 访问,一步实现全网可达(基础)
运维·服务器·网络·学习·华为·hcia·ensp
苏三福19 分钟前
clawdbot 使用
linux·运维·ubuntu
岳来23 分钟前
docker 容器参数LinkLocalIPv6Address 和 LinkLocalIPv6PrefixLen
运维·docker·容器·ipv6
Qinti_mm23 分钟前
Linux高性能使用:架构、内核与系统的完美适配
linux·架构·内核·系统
海域云-罗鹏35 分钟前
该如何选择深圳进行算力服务器托管
运维·服务器
init_236144 分钟前
【hcie-09】vxlan 同子网通信
linux·运维·服务器
爱吃生蚝的于勒1 小时前
【Linux】进程信号的产生(一)
linux·运维·服务器·c语言·开发语言·数据结构·c++
Codigger官方1 小时前
算力的去中心化重构:简析Codigger分布式计算生态
linux·vim