
课后作业《理解Shell》一、Shell的类型默认Shell配置位置用户登录后启动的默认Shell记录在/etc/passwd文件第7个字段登录终端/图形终端仿真器都会自动加载该Shell绝大多数Linux系统默认使用bash。查看指定用户配置cat /etc/passwd | grep 用户名示例zhangzy:x:1165:1165:,,,:/home/zhanqzy:/bin/bash末尾/bin/bash为默认Shell。Linux主流Shell程序通过ls -lF /bin/*sh可查看系统全部Shell可执行文件bash系统主流交互Shellrbash是bash限制模式软链接dash系统开机、脚本默认轻量Shell/bin/sh软链接指向dashcsh、bsd-cshC语法风格Shellzsh/rzsh扩展增强型Shellstatic-shbusybox嵌入式极简ShellShell切换操作直接输入Shell程序名如/bin/dash即可启动对应Shell执行exit退出返回上一级Shell。二、Shell父子进程关系父Shell 子Shell父Shell登录终端、图形界面打开终端时自动生成的交互式Shell提供命令行提示符是所有子Shell的父进程。子Shell生成方式与验证在父Shell输入bash/其他Shell程序会新建独立子Shell多层输入可实现嵌套子Shell1查看进程层级命令ps -f查看进程PID、父PIDPPID ps --forest树形直观展示父子Shell嵌套结构exit逐层退出子Shell回到上级父Shell2进程列表括号()创建子Shell普通命令列表cmd1;cmd2;cmd3分号分隔不生成子Shell全部在当前Shell执行进程列表(cmd1;cmd2;cmd3)括号包裹命令强制创建子Shell独立运行子Shell检测变量echo $BASH_SUBSHELL返回0无额外子Shell返回≥1存在子Shell数字代表嵌套层数。3后台运行 后台子Shell命令末尾加将任务放入后台释放终端前台基础后台sleep 60 终端返回任务号与PID子Shell后台(多条命令)在独立子Shell后台执行不阻塞终端后台任务管理jobs查看当前终端后台作业jobs -l附带进程PID任务结束后终端自动打印终止提示。4协程 coproc高级后台子Shellcoproc是bash内置工具在后台生成独立子Shell支持双向管道通信基础用法coproc sleep 10默认协程名COPROC自定义协程名称coproc My_Job { sleep 10; }语法强制要求{前后带空格命令末尾分号}前留空格查看协程进程jobs -l协程生命周期独立于前台终端。三、Shell命令分类内建命令 vs 外部命令外部命令文件系统命令存储路径/bin、/usr/bin、/sbin、/usr/sbin等目录下独立可执行文件执行机制运行时调用fork创建全新子进程资源开销更大示例ps、ls查找命令路径工具which 命令仅输出外部命令文件路径无法识别内建命令type -a 命令同时展示内建实现外部可执行文件两种形式。内建命令Shell内置实现机制编译嵌入bash本体无需创建子进程执行速度更快典型基础内建cd、exit、history、alias、type特殊双实现命令echo、pwd既有Shell内置版本也存在独立外部可执行文件判断命令类型type cd输出cd is a shell builtin代表内建。四、重点内建命令详解 1. history 命令命令历史存储规则命令先缓存内存**关闭Shell会话时才写入家目录隐藏文件.bash_history核心操作history查看当前会话内存中全部历史命令cat ~/.bash_history读取磁盘持久化历史文件未退出前内容少于内存story -a强制将内存中当前会话历史写入.bash_history!!快速执行上一条命令!编号执行history对应序号命令配套练习对比history与cat .bash_history输出差异执行history -a后再次对比。alias 命令命令别名作用为长命令/带参数命令设置简短别名简化输入查看现有别名alias -p系统默认预装ll、la、l、grep --color等彩色别名自定义别名alias lils -li生效范围别名仅在当前Shell进程有效新建子Shell/重启终端全部失效。五、小结分清父Shell、子Shell进程层级会用ps --forest查看树形进程掌握多种创建子Shell的方式执行bash、括号进程列表、后台、coproc协程区分两类命令内建命令无新进程、速度快外部命令fork子进程、依赖磁盘文件熟练使用history管理命令历史、alias自定义快捷命令。