「Linux 系统编程」Shell 及主键盘快捷键

1 什么是 Shell

在 Linux 系统中,Shell 即 命令解释器,是用户与操作系统内核之间的交互接口。Shell 接收用户输入的命令,解析后传递给内核执行,并将执行结果返回给用户。

除了执行单个命令,Shell 还支持脚本编程(通过编写 .sh 脚本文件批量执行命令),实现自动化任务。

1.1 Shell 家族

Linux 系统中有多种 Shell 版本:

  • Bourne Shell(sh):最早的 Unix Shell,是其他许多 Shell 的基础,功能相对简单,不支持命令行编辑等高级特性。

  • Bourne Again Shell(bash):是 sh 的增强版,兼容 sh 的语法,同时增加了 命令补全、历史记录、脚本编程扩展 等功能,目前是大多数 Linux 发行版(如 Ubuntu、CentOS)的默认 Shell。

  • C Shell(csh):语法类似 C 语言,支持命令历史、别名等功能。

  • TENEX C Shell(tcsh):csh 的增强版,增加了命令行编辑、路径补全等功能,交互性更好。

  • Korn Shell(ksh):结合了 sh 的语法和 csh 的交互特性,支持脚本调试、数组等高级功能,在商业 Unix 系统(如 AIX)中较常用。

  • Z Shell(zsh):功能强大的现代 Shell,兼容 bash,由 ksh 发展出来,支持更智能的补全、主题定制、插件扩展。

1.2 查看系统中的 Shell

我在虚拟机上安装的操作系统为 Ubuntu 18.04。

可以用以下命令查看当前系统中可用的 Shell:

1
cat /etc/shells

可以用以下命令查看系统当前正在使用的 Shell:

1
echo $SHELL


2 bash 命令和路径补齐

bash 提供了 命令 / 路径补齐功能,通过按下 Tab 键 自动补全未输入完整的命令或文件路径。

  • 命令补齐

    输入命令的前几个字符,按下 Tab 键,bash 会自动补全命令,前提是这条命令是唯一的

    若有多个匹配项,按 两次 Tab 键会列出所有可能的命令

    例如,输入 his 后按下 Tab 键,系统会补全为 history 命令;输入 hi 后按下 Tab 键无反应,第二次按下 Tab 键后会显示所有以 hi 为开头的命令。

  • 路径补齐

    输入文件 / 目录路径的前几个字符,按下 Tab 键,bash 会补全路径,前提是这条路径是唯一的

    若有多个匹配项,按 两次 Tab 键会列出所有可能的路径

    例如,输入 cd /usr/lo 后按下 Tab 键,系统会补全为 cd /usr/local 命令;输入 cd /usr/l 后按下 Tab 键无反应,第二次按下 Tab 键后会显示所有以 cd /usr/l 为开头的命令。


3 历史记录

bash 会记录用户输入的所有命令(默认保存最近 1000 条,可通过 HISTSIZE 变量修改)。

3.1 历史命令查看与执行

使用 history 命令列出所有历史命令,每条命令前有编号。输入 !编号 可以重复执行对应编号的命令;输入 !命令前缀 重复执行最近一条以该前缀开头的命令。

3.2 历史命令搜索

按下 Ctrl + R 进入反向搜索模式,输入关键词可匹配历史命令,按 Enter 执行,按 Ctrl + G 退出。

3.3 清除历史记录

使用 history -c 清空当前会话的历史记录;若需删除文件中的记录,可编辑 ~/.bash_history(历史记录默认保存在该文件中)。


4 主键盘快捷键

4.1 光标移动

快捷键组合 功能描述 备注/示例
Ctrl + A 将光标移动到命令行开头 输入 ls -l /usr 时,快速定位到 l
Ctrl + E 将光标移动到命令行结尾 长命令末尾补充内容时使用
Ctrl + F 光标向前(右)移动1个字符 等同于右方向键
Ctrl + B 光标向后(左)移动1个字符 等同于左方向键
Alt + F 光标向前(右)移动1个单词(以空格/标点分隔) cd /home/user 中,从 / 跳到 h
Alt + B 光标向后(左)移动1个单词 Alt + F 方向相反

4.2 编辑操作

快捷键组合 功能描述 备注/示例
Ctrl + C 终止当前运行的命令 中断 ping baidu.com 等进程
Ctrl + D 退出当前 Shell 会话;或删除光标处字符 替代 exit 命令,或类似 Delete 键功能
Ctrl + K 删除从 光标命令行结尾 的内容 echo "test" 中光标在 e 后,删除 e "test"
Ctrl + U 删除从 光标命令行开头 的内容 快速清空错误输入的长命令
Ctrl + W 删除光标前的1个单词 sudo service nginx start 中,光标在末尾时删除 start
Ctrl + Y 粘贴用 Ctrl + K/U/W 删除的内容 恢复误删的命令片段
Ctrl + L 清空终端屏幕(保留历史记录) 替代 clear 命令
Ctrl + _ 撤销上一次编辑操作(恢复误删) _ 需配合 Shift 键输入

4.3 历史命令

快捷键组合 功能描述 备注/示例
Ctrl + R 反向搜索历史命令(按关键词匹配) 输入 ls 可匹配最近含 ls 的命令
Ctrl + P 调用上一条历史命令 等同于上方向键
Ctrl + N 调用下一条历史命令 等同于下方向键

4.4 其他实用命令

快捷键组合 功能描述 备注/示例
Ctrl + S 暂停终端输出(防止刷屏) 大量日志输出时临时暂停
Ctrl + Q 恢复被 Ctrl + S 暂停的终端输出 继续查看暂停的输出内容
Alt + . 粘贴上一条命令的最后一个参数 先执行 ls /var/log,再输入 cd 后按此键,补全为 cd /var/log

「Linux 系统编程」Shell 及主键盘快捷键
https://marisamagic.github.io/2025/08/01/20250801/
作者
MarisaMagic
发布于
2025年8月1日
许可协议