目录
大家天天开心🙂
- bash进程的流程。
- 环境变量在系统指令和用户程序的应用。
- 环境变量修改(命令行&配置文件的修改)理解。
前言
明确
- Linux当中70%以上的命令程序都是用C语言写的
- 执行命令程序和运行自己写的程序没有任何区别
- 自己程序运行必须要带路径(绝对/相对都可)
- 系统指令可带可不带(带不要瞎带)
- 环境变量具有全局特性是可以被子进程看到的
无论是全局变量还是局部变量,子进程的代码是继承父进程的,数据是拷贝的(子进程和父进程的数据是相互独立的)- 进程的独立性:父进程的数据是可以被子进程看到&访问(修改❌),子进程的数据是不能被父进程看到。
- 每个用户启动都会有一个单独的bash进程,bash单独给这个用户形成命令行参数表和环境变量表。以及配置文件都是每个用户都有一份。互相独立,不影响。
- 每开启一个终端就会有1个bash进程。
- 一个用户也可以有多个bash进程。
回顾上篇博文
- 登录Linux系统
- 创建bash进程
- 在命令行中输入参数
- bash进程获取参数的路径&可执行程序
- 可执行程序是用户自己写(自己带路径)
- 可执行程序是系统指令(在bash进程的上下文环境变量中找)
- 创建子进程
- bash并把【命令行参数表】传给子进程main函数(传参)
- 子进程接着执行自己的代码
产生这样一个问题:为什么我们自己的程序运行启动的时候需要带路径,但是系统的命令程序可带可不带路径❓
回答:在Linux当中,存在一些全局变量的设置(环境变量),告诉命令行解释器(bash进程),应该去那些路径底下去寻找这些可执行程序。
☞综下:ls不用带路径,因为ls所在的路径在环境变量当中。
基本概念&理解
概念&特性
- 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
- 如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
- 环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性 。
- 环境变量都是大写。
整体理解
- 登录Linux系统的时候,OS就把系统配置已经加载到了bash进程的上下文中(内存),系统配置就包括环境变量。
- 当用户在命令行解释器中输入系统命令的时候,bash进程就拿到了命令行参数,根据环境变量,找到指令的可执行程序和路径,并创建指令的子进程。
- (bash进程会根据$PATH在自己内存的上下文 配置信息中的 各种环境变量中找到对应的环境变量,并在此环境变量中找到对应的指令程序的路径和可执行程序)。
环境变量的作用
- bash在执行命令的时候,需要先找到命令。因为要把命令所对应的二进制文件加载到内存中。
- bash的上下文的环境变量中维护了一批指令的路径。
- 默认这批指令的路径是bash创建子进程的搜索路径。
- 找到了就加载并运行
- 没找到就commend not fund
- 注意❗:系统中有