「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 |
|
可以用以下命令查看系统当前正在使用的 Shell:
1 |
|
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 |