当前位置: 首页 > news >正文

Shell的理解

一、什么是Shell & 系统有哪些Shell
1. 查看自己默认用的Shell
我们登录Linux终端时自动运行的shell,写在 /etc/passwd 文件里,第7段就是默认shell。
# 查看自己用户的配置
cat /etc/passwd | grep 你的用户名
示例输出:
zhangzy:x:1165:1165:,,,:/home/zhangzy:/bin/bash
末尾 /bin/bash 代表我默认使用bash。
2. Linux里常见的Shell
系统所有shell程序都放在 /bin 文件夹,执行这条命令查看全部:
ls -lF /bin/*sh
常用shell简单介绍:

1. bash:最常用,我们上课全程用这个

2. dash:轻量小shell,系统开机脚本用它

3. zsh、csh:拓展功能更强的shell,可选使用

4. sh:不是独立程序,是dash的快捷链接

3. 切换不同shell

想临时体验dash,直接输入程序名;想退出回到原来窗口输入exit:
/bin/dash # 进入dash
exit # 退出dash,返回bash
二、父Shell和子Shell(本节课重点)

1. 基础概念

父Shell:打开终端、登录系统自动弹出的第一个bash窗口,最顶层shell。

子Shell:在父shell里输入bash、用括号包命令、后台运行程序时,系统新建的一层shell。

2. 实操:创建多层子shell
bash # 创建第1层子shell
bash # 创建第2层子shell
ps --forest # 查看进程树,能看到层层嵌套的bash
exit # 退出一层子shell,回到上一层
每输一次bash就多一层子shell,exit一层一层往上退。

3. 怎么判断当前是不是子shell

系统自带变量 $BASH_SUBSHELL:

输出0 = 当前是父shell

输出1/2 = 处于1层/2层子shell

对比两种命令写法

1. 分号 ; 执行(不产生子shell)
pwd; ls; echo $BASH_SUBSHELL
# 结果输出0,所有命令在父shell运行,cd会改变当前文件夹
2. 括号 () 执行(生成子shell)
(pwd; ls; echo $BASH_SUBSHELL)
# 结果输出1,cd只会在括号内生效,不会影响外面终端
4. 后台运行命令 & jobs管理

命令末尾加 &,程序放到后台跑,不卡住终端:
sleep 60 & # 后台休眠60秒
jobs # 查看所有后台任务
jobs -l # 查看后台任务+进程编号
5. 协程 coproc(拓展内容)

coproc 会自动在后台开一个子shell运行程序,语法有严格要求:

1. { 前后必须有空格

2. 最后一条命令末尾加分号 ;

3. ; 和 } 中间留空格
# 默认名字协程
coproc sleep 10
# 自定义协程名称
coproc MyJob { sleep 10; }
jobs -l # 查看协程任务
三、两种命令:内建命令 和 外部命令

1. 外部命令

是独立存在的文件,存放在 /bin、/usr/bin,运行时会新建子进程,速度慢。
比如ps、ls都属于外部命令。
which ps # 查看命令文件位置
type -a ps
2. 内建命令

直接集成在bash内部,没有单独文件,运行不需要新建子进程,速度更快。
cd、exit、history、alias都是内置命令。
type cd # 输出 cd is a shell builtin
type exit
3. 特殊命令:既有内置、又有外部文件
echo、pwd 同时有两种版本:
type -a echo
# 输出两行:
# echo is a shell builtin(内置)
# echo is /bin/echo(外部文件)
which echo # 只显示外部文件路径

http://www.jsqmd.com/news/1125638/

相关文章:

  • 机器人5公里长跑背后的技术:强化学习与模型预测控制如何实现动态平衡
  • 毕业季全网刚需,2026 新版 AI 论文软件盘点,兼顾写作、降重、模拟审稿
  • AI 前沿日报 | 2026年7月4日
  • 腾讯云CVM上一键部署CubeSandbox,线下实操初体验
  • 别踩2026视频转换成文字付费误区:我实操总结的控成本实用经验
  • 【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
  • YOLOv8与卡尔曼滤波融合:构建实时目标检测与跟踪系统
  • 【案例教程】基于GMTSAR合成孔径雷达干涉测量InSAR数据处理、形变信息提取与分析
  • Codex桌面客户端:零代码接入DeepSeek等大模型,打造本地AI助手
  • 英伟达AI Compute Partnership:从“卖铲人“到“收租人“的算力金融化革命
  • yolov26改进 | 主干/Backbone篇 | 轻量级移动端网络ShuffleNetv1(附代码+修改教程)
  • 如何快速掌握SysML v2:面向系统工程师的终极MBSE建模指南
  • CubeSandbox 快照、克隆、回滚部署实操体验|OC城市行深圳站
  • OpenCode 实战技巧:从入门到高效开发
  • 开题高效撰写新解法:okbiye 一站式 AI 开题功能化解科研入门难题
  • 我在腾讯云 CVM 上实操 CubeSandbox:从部署到体验快照、克隆和回滚分享
  • 剑星 全内容 中文全DLC 脱离虚拟机 即点即玩
  • 图像和视频处理的核心概念(在图像上画矩形)
  • 好无聊上班的一天
  • 搞懂视图!MySQL 数据表、视图核心差异实战总结
  • 沭阳苗木基地怎么选?老炮儿跑场真心话
  • 4-20mA电流环接收器设计与INA196应用详解
  • 旋转向量,旋转矩阵,四元数,欧拉角之间的转换公式
  • 救命!UniApp上架App Store踩4.3a红线,我靠这招3天逆袭过审了[特殊字符]
  • 学习嵌入式Day3
  • Postfix 邮件服务器 3 大安全加固策略:SPF/DKIM/DMARC 配置与端口 25/465/587 辨析
  • 毕设 深度学习照片上色与动态化
  • 实战指南:如何用开源工具永久保存你的QQ空间数字记忆
  • 从粉丝项目到技术实践:构建自动化内容管理流水线
  • Linux top/ps 命令实战:5分钟定位CPU 100%与内存泄漏的进程