Linux Shell全面学习实操总结
这次小学期围绕Shell完成了整套学习与实操全程在Xshell远程连接Linux环境完成所有命令测试把Shell相关的基础概念、进程关系、运行模式、命令分类都梳理清楚也整理了完整实操过程与对应的现象方便后续复盘回顾。Shell本身是用C语言编写的程序相当于我们和Linux操作系统内核沟通的桥梁它不只是平时敲命令交互的工具还能作为编程语言编写后缀为.sh的脚本文件脚本第一行一般会写上#!/bin/bash这个特殊标识用来告诉系统使用bash解释器运行脚本换成#!/bin/sh在多数场景下也能正常使用甚至还能替换成python的解释器路径执行其他类型脚本。Linux系统里能使用的Shell种类并不单一常见的有sh、bash、csh、ksh、dash等其中bash是绝大多数发行版默认使用的Shell用户登录终端时自动启动的Shell类型由/etc/passwd文件控制文件每行的第七个字段记录了对应账号的默认解释器输入cat /etc/passwd | grep 自己用户名就能查看配置也可以用ls -LF /bin/*sh浏览系统内全部可用Shell程序想要临时切换其他Shell直接输入对应程序路径即可比如/bin/dash执行exit就能切回上一层Shell。登录终端后自动启动的交互Shell称为父Shell只要在命令行输入bash系统就会生成全新的子Shell重复执行bash会形成多层嵌套的子进程结构想要直观查看进程之间的父子嵌套关系可以使用ps --forest命令输出内容里PID代表进程编号PPID记录当前进程的父进程编号每执行一次exit就会逐层关闭子Shell回到上一级父进程。我们可以借助环境变量$BASH_SUBSHELL判断当前是否处于子Shell环境变量输出数字为0代表没有新建子Shell数值大于0则代表存在子Shell数字大小对应嵌套层级用分号分隔多条命令顺序执行不会创建子Shell输出变量值始终是0如果把整套命令包裹在括号内执行系统会单独生成子Shell运行括号里的内容变量数值会变为1多层括号嵌套数值还会继续增加。Shell支持多种运行模式日常最常用的后台模式只需要在命令末尾添加符号程序就会放到后台执行不会占用当前终端输入权限执行sleep 60 这类测试命令后jobs可以查看所有后台任务ps -f能够查看系统完整进程列表后台任务运行结束后按下回车终端会自动打印任务完成提示把带括号的进程列表放到后台运行还能避免子Shell的输入输出绑定当前终端适合执行耗时较长的批量操作。除了普通后台任务Shell还提供coproc协程功能同样会在后台创建独立子Shell执行命令不指定名称时进程默认标识为COPROC如果想要自定义协程名称要遵守固定语法花括号前后、命令末尾分号后方都必须保留空格标准写法为coproc 自定义名称 { 执行命令; }运行后搭配jobs -l可以查看协程进程详细信息。Linux里所有命令分为内建命令和外部命令两类外部命令是独立存放在/bin、/usr/bin等目录下的可执行文件像ps就属于典型外部命令执行外部命令时系统会通过fork创建全新子进程会产生一定性能开销我们可以用which或者type -a查询外部命令存放路径which指令只能检索磁盘上的外部程序无法识别Shell内置指令。内建命令直接编译集成在Shell程序内部运行时不需要新建子进程执行速度更快cd、exit都是纯内置命令echo、pwd比较特殊同时存在内置版本和外部程序版本输入type -a 命令名可以完整展示一条命令的所有实现形式清晰区分内置与外部程序。history是非常实用的内置命令能够记录终端所有输入过的指令所有操作记录先临时存放在内存中只有关闭终端、执行exit退出当前Shell会话时内存里的记录才会写入用户家目录下的隐藏文件.bash_history直接用tail查看这个文件只能看到上一次会话结束前保存的命令而history读取内存会展示当前终端全部实时输入内容两者输出内容会存在明显差异执行history -a可以强制把内存里的全部历史命令写入文件执行完成后再次读取.bash_history文件内容就会和history输出完全同步。同时history支持快捷调用历史指令输入!!可以直接执行上一条命令!加上命令编号就能调取对应序号的历史操作搭配history | grep 关键词还能快速筛选需要的历史记录。alias也是高频使用的内置命令核心作用是给冗长的常用命令自定义简短别名减少重复输入输入alias -p能够查看系统预先配置好的全部别名系统自带ll、la、ls等简化指令ll等价于ls -alF还自带彩色输出参数方便查看文件信息自定义别名语法为alias 别名‘完整命令及参数’比如alias myls‘ls -li’创建完成后直接输入自定义名称就能执行对应命令需要注意别名仅在当前Shell会话内生效切换新终端或者新建子Shell后自定义别名会失效不会影响其他用户的Shell配置。整套实操全部在Xshell环境完成每一类知识点都配套对应的操作指令与运行截图把Shell类型、父子进程、运行模式、内外命令区分、history和alias两个核心内置命令的用法完整串联起来搭建起清晰的知识框架每条命令都标注了对应的用途和关键参数作用也完成了课程要求的history对比实验先观察history与.bash_history输出差异再执行history -a对比文件内容变化所有实操内容整合后整理成这篇学习记录满足本次课程作业的全部要求后续只需要把文章发布到CSDN提交文章链接即可完成作业。