news 2026/7/6 3:09:07

第五次shell理解练习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第五次shell理解练习

课后作业


《理解Shell》
一、Shell的类型

  1. 默认Shell配置位置
    用户登录后启动的默认Shell记录在/etc/passwd文件第7个字段,登录终端/图形终端仿真器都会自动加载该Shell,绝大多数Linux系统默认使用bash
  • 查看指定用户配置:cat /etc/passwd | grep 用户名
    示例:zhangzy:x:1165:1165:,,,:/home/zhanqzy:/bin/bash,末尾/bin/bash为默认Shell。
  1. Linux主流Shell程序
    通过ls -lF /bin/*sh可查看系统全部Shell可执行文件:
  • bash:系统主流交互Shell;rbash是bash限制模式软链接
  • dash:系统开机、脚本默认轻量Shell,/bin/sh软链接指向dash
  • csh、bsd-csh:C语法风格Shell
  • zsh/rzsh:扩展增强型Shell
  • static-sh(busybox):嵌入式极简Shell
  1. Shell切换操作
    直接输入Shell程序名(如/bin/dash)即可启动对应Shell;执行exit退出,返回上一级Shell。
    二、Shell父子进程关系(父Shell & 子Shell)
  2. 父Shell
    登录终端、图形界面打开终端时自动生成的交互式Shell,提供命令行提示符,是所有子Shell的父进程。
  3. 子Shell生成方式与验证
    在父Shell输入bash/其他Shell程序,会新建独立子Shell,多层输入可实现嵌套子Shell;
    (1)查看进程层级命令
    ps -f:查看进程PID、父PID(PPID) ps --forest:树形直观展示父子Shell嵌套结构
    exit`:逐层退出子Shell,回到上级父Shell
    (2)进程列表(括号()创建子Shell)
  4. 普通命令列表:cmd1;cmd2;cmd3,分号分隔,不生成子Shell,全部在当前Shell执行;
  5. 进程列表:(cmd1;cmd2;cmd3),括号包裹命令,强制创建子Shell独立运行;
  6. 子Shell检测变量:echo $BASH_SUBSHELL
    返回0:无额外子Shell;返回≥1:存在子Shell,数字代表嵌套层数。
    (3)后台运行 & 后台子Shell
    命令末尾加&将任务放入后台,释放终端前台:
  7. 基础后台:sleep 60 &,终端返回任务号与PID;
  8. 子Shell后台:(多条命令)&,在独立子Shell后台执行,不阻塞终端;
  9. 后台任务管理:
    • jobs:查看当前终端后台作业;jobs -l:附带进程PID;
    • 任务结束后终端自动打印终止提示。
      (4)协程 coproc(高级后台子Shell)
      coproc是bash内置工具,在后台生成独立子Shell,支持双向管道通信:
  10. 基础用法:coproc sleep 10,默认协程名COPROC
  11. 自定义协程名称:coproc My_Job { sleep 10; }
    语法强制要求:{前后带空格,命令末尾分号,}前留空格;
  12. 查看协程进程:jobs -l,协程生命周期独立于前台终端。

三、Shell命令分类:内建命令 vs 外部命令

  1. 外部命令(文件系统命令)

  2. 存储路径:/bin、/usr/bin、/sbin、/usr/sbin等目录下独立可执行文件;

  3. 执行机制:运行时调用fork创建全新子进程,资源开销更大;

  4. 示例:ps、ls

  5. 查找命令路径工具:
    which 命令:仅输出外部命令文件路径,无法识别内建命令;
    type -a 命令:同时展示内建实现+外部可执行文件两种形式。

  6. 内建命令(Shell内置)

  7. 实现机制:编译嵌入bash本体,无需创建子进程,执行速度更快;

  8. 典型基础内建:cd、exit、history、alias、type

  9. 特殊双实现命令:echo、pwd,既有Shell内置版本,也存在独立外部可执行文件;

  10. 判断命令类型:type cd,输出cd is a shell builtin代表内建。
    四、重点内建命令详解 1. history 命令(命令历史)

  11. 存储规则:命令先缓存内存,**关闭Shell会话时才写入家目录隐藏文件.bash_history

  12. 核心操作:
    history:查看当前会话内存中全部历史命令;
    cat ~/.bash_history:读取磁盘持久化历史文件(未退出前内容少于内存);
    story -a:强制将内存中当前会话历史写入.bash_history!!:快速执行上一条命令;!编号`:执行history对应序号命令;

  13. 配套练习:对比historycat .bash_history输出差异,执行history -a后再次对比。

  14. alias 命令(命令别名)

  15. 作用:为长命令/带参数命令设置简短别名,简化输入;

  16. 查看现有别名:alias -p,系统默认预装ll、la、l、grep --color等彩色别名;

  17. 自定义别名:alias li='ls -li'

  18. 生效范围:别名仅在当前Shell进程有效,新建子Shell/重启终端全部失效。
    五、小结

  19. 分清父Shell、子Shell进程层级,会用ps --forest查看树形进程;

  20. 掌握多种创建子Shell的方式:执行bash、括号进程列表、后台&、coproc协程;

  21. 区分两类命令:内建命令无新进程、速度快;外部命令fork子进程、依赖磁盘文件;

  22. 熟练使用history管理命令历史、alias自定义快捷命令。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 3:08:20

从404链接到开源知识库:Galgame Wiki 如何为小众文化“存档”

前几天整理浏览器收藏夹,点开一个名为“Galgame攻略”的文件夹。十几个链接,超过一半显示“404 Not Found”。剩下的几个,有的页面停留在2018年,有的跳转到了完全陌生的域名。我一个个点开,又一个个关掉。这些链接曾经…

作者头像 李华
网站建设 2026/7/6 3:08:16

《怪物猎人:荒野》 豪华中文版 全DLC VBS一键启狩猎

获取地址:《怪物猎人:荒野》 《怪物猎人:荒野》豪华中文全DLC整合,个人修复加入原生手柄直连支持并封装VBS一键启动脚本,解压双击自动配置运行环境进入游戏。 完整收录全部武器派生、怪物生态与剧情扩展,…

作者头像 李华
网站建设 2026/7/6 3:07:40

C++26 constexpr placement new 详解:编译期管理对象生命周期

C26 constexpr placement new 详解:编译期管理对象生命周期 本文是「C26 新特性单篇精讲」系列第 14 篇。阅读约需 5 分钟,文末可跳转完整合订本。 一、是什么 C26 允许在 constexpr 函数中使用 placement new,即在已分配内存上构造对象&…

作者头像 李华
网站建设 2026/7/6 3:05:15

实验室搬迁科普专业流程防护标准与合规核心要点

实验室搬迁不同于普通办公、家居搬迁,是一项高精密、高安全、高合规的专项技术工程,也是高校、科研院所、企业研发机构场地迁移中最容易出现操作疏漏的核心环节。实验室涉及精密分析仪器、理化实验设备、专用台柜、化学试剂耗材、生物留样标本、核心科研…

作者头像 李华
网站建设 2026/7/6 3:04:13

AI Agent开发实战:从零理解Agent、RAG与LangChain核心原理

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 你是不是也刷到过那些“付费9880元”、“一周学完Agent”、“超越所有人”的AI Agent课程广告?看着很诱人,但冷…

作者头像 李华
网站建设 2026/7/6 3:03:02

PCB 信号完整性设计:从 55 原则到 3H 间距的 5 条关键规则量化解析

PCB信号完整性设计的5条黄金法则:从理论到量化实践在高速PCB设计领域,信号完整性(SI)问题如同潜伏的暗礁,稍有不慎就会导致整个系统性能下降甚至功能失效。随着数字电路时钟频率的不断提升,信号上升时间不断…

作者头像 李华