Xshell六
一、Shell的类型Shell是用户和Linux内核之间的沟通桥梁按照启动方式和使用场景可以划分成四种类型分别是交互式、非交互式、登录Shell、非登录Shell。交互式Shell就是我们通过Xshell远程登录之后正常使用的终端环境带有命令提示符可以手动逐行输入指令系统即时给出运行反馈同时支持命令别名、历史命令回溯、Tab补全等交互功能。非交互式Shell一般伴随Shell脚本运行而产生在执行 .sh 脚本的时候自动开启不需要人为手动输入指令程序会依照脚本从上至下自动依次执行语句不存在交互提示符。登录Shell产生于账号登录环节不管是SSH远程登录还是本机账号登录初次进入系统的顶层Shell就是登录Shell它会完整加载全局配置文件以及用户专属的环境配置文件。我们也可以输入 bash --login 手动创建一个登录Shell。而非登录Shell是已经登录系统之后额外创建出来的比如新开终端窗口、直接输入bash指令唤起的新Shell进程它只会加载局部配置文件不会读取登录阶段的环境参数。二、Shell进程以及父子关系每一个Shell本质都是独立的进程由此衍生出父Shell和子Shell的概念。我们登录之后最先拥有的终端进程就是父Shell后续由它衍生开辟出来的新Shell进程全部称为子Shell。子Shell会完整复制父Shell当下的环境变量数据但是二者的内存空间相互隔离。如果在子Shell里面修改路径、自定义变量操作结束退出之后父Shell原本的数据不会发生任何改变。容易创建子Shell的操作有圆括号命令分组、管道符运算、后台任务运行、直接运行脚本文件。可以依靠系统变量 $BASH_SUBSHELL 判断层级数值为0代表父Shell数字大于零时则代表子Shell数值大小对应嵌套层数。我们可以使用 ps --forest 命令以树形结构直观查看所有进程之间的父子从属结构清晰分辨PID之间的上下级关系。三、Shell的父子关系补充特性使用圆括号包裹指令执行一定会生成子进程与之对比大括号仅用作命令分组并不会创建子Shell内部的所有操作都会直接作用在父Shell环境里。生命周期具备联动性一旦手动关闭父Shell执行exit退出命令所有依附它运行的子Shell进程也会随之一同结束运行。四、Shell的运行模式第一种为顺序执行模式依靠分号分隔多条命令能够在一行之内依次执行多个指令全程都在父Shell之中串行运行不会开辟新进程。格式示例 pwd ; ls ; whoami。第二种为子Shell运行模式将多条命令放置在圆括号内部执行单独开辟子环境运行任务在子Shell中切换工作目录不会改动外层终端原本的路径位置。第三种是后台运行模式在整条命令的末尾添加符号 任务就会转入后台静默运行。终端不需要长时间等待程序结束可以立刻释放命令输入光标继续执行别的操作。配套管理指令jobs可以查看当前全部后台任务jobs -l可以额外展示任务对应的进程编号fg能够把后台任务切换至前台运行bg可以将暂停的任务重新在后台启动kill命令可以根据任务编号或者PID结束进程。五、内建命令与外部命令内建命令直接内嵌在Shell程序本体当中调用的时候不需要创建新进程运行速度更快。常见的包含history、alias、cd、exit、echo等指令可以输入 type 命令名 来查验命令属性。外部命令是存放在磁盘当中独立的可执行文件每次调用都会新建一个子进程来完成运行开销相对更大。ls、cat、mkdir、ps都属于外部命令可以借助which命令查询它的文件存放路径。二者最核心的差别就是进程创建机制内建命令依托当前Shell直接运行外部命令必须fork出新进程才可以正常执行。六、内建命令history原理history命令主要作用是记录终端会话里全部输入过的历史指令命令记录会先临时存放在内存当中系统默认只有在正常关闭终端会话时才会自动把内存里的数据保存到隐藏文件 .bash_history 之中。1. history 和 cat .bash_history 的输出差异history调取的是内存里的数据可以看到本次登录之后刚刚输入的所有命令输出内容自带行编号能够使用!加行号快速重复执行历史指令。cat .bash_history读取磁盘上的文件仅保存上一次会话结束之后留存的命令无法查看本次还未退出终端的新指令输出只有纯命令文本没有行号标识。2. 执行history -a之后产生的变化参数 -a 代表追加写入执行这条指令之后会把当前内存中还没有落盘的命令立刻追加保存到.bash_history文件里面不用等到关闭终端。执行完毕再次cat查看文件文件末尾会新增本次会话全部操作记录磁盘文件内容和内存里的历史记录就会保持一致。拓展常用参数history 后面加上数字可以只展示末尾指定条数的历史记录history -w会直接用当前内存记录覆盖磁盘历史文件history -r可以把磁盘里的历史文件重新读取加载进内存history -c能够清空内存中全部的历史命令缓存。同时还有快捷调用方式!!可以直接重复执行上一条命令!加上开头关键词可以调取匹配前缀最近的一条历史命令运行。七、内建命令 alias 别名用法1.alias属于Shell内建命令主要功能就是给冗长的命令设置自定义简写别名减少重复输入的工作量。2.直接输入alias不加参数能够查看系统目前已经配置好的全部别名。临时别名的设置格式为 alias 别名完整原命令设置完成之后当下终端可以直接使用简写名称运行指令缺点是会话关闭之后配置就会失效。八、成果截图