前言
环境变量是程序运行的'隐形配置',程序地址空间是进程访问内存的'底层规则',这两类知识点是打通 Linux 系统底层逻辑的关键纽带。理解它们不仅能解释'为什么命令能直接运行''进程如何安全访问内存'等核心问题,更能为编写灵活的命令行工具、排查内存相关问题提供底层支撑。
本文将从环境变量的概念、常用指令与系统调用入手,逐步延伸到 main 函数的命令行参数用法、常规命令与内建命令的区别,最终深入程序地址空间的布局、虚拟地址与物理地址的映射原理(含页表、写时拷贝等核心机制)。全文兼顾理论深度与实操性,每个知识点都配套具体指令示例,文末还附上高频习题及解析,帮助读者夯实基础、检验学习成果。
环境变量
概念:一般是指在操作系统中用来指定操作系统运行环境的一些参数。
不同的环境变量有不同的用途,通常具有全局属性。
- 这里的全局属性意思是可以被子进程继承。
bash 本身在启动的时候,会从操作系统的配置文件中读取环境变量信息。
每次启动,环境变量都会被重置。
父进程的环境变量变了,子进程会跟着变。
常见的环境变量
PATH: 指定命令的搜索路径HOME: 指定用户的主工作目录SHELL: 当前 shell,它的值通常是/bin/bashHISTSIZE:history能保存之前使用指令的最大条数SSH_TTY: 终端设备的路径(SSH 远程登陆的话会有)USER和LOGNAME(这俩没啥区别):代表当前登录的用户是谁PWD: 表示当前的路径 (修改这个不会改变现在在哪个路径哈)OLDPWD: 通过cd命令切换目录时,标记上一次的路径
和环境变量相关的指令
echo: 显示某个环境变量值export: 设置一个新的环境变量env: 显示所有环境变量 (想只看一个的话就grep那样)unset: 清除环境变量set: 显示所有本地变量和环境变量- 修改环境变量:eg:
PATH=$PATH:/home/renshen
引申: 本地变量–只在当前
bash进程里有效本地变量转变成环境变量:
export 变量名(不用加=值)
通过系统调用获取或设置环境变量
- 系统调用:
getenv,putenv - 引申:
chdir这个系统调用可以改路径
main 函数的命令行参数
其实 main 函数是 int main(int argc, char *argv[],char *env[]);
- 第一个参数是接受到的命令行参数的总个数 (包括程序名)
- 第二个参数是命令行参数(最后一个位置会放一个
nullptr)- 命令行的指令当字符串传过来的
- 第三个参数是环境变量数组


