高效地使用Shell交互
posts/efficient-shell-interaction背景
在日常使用 Linux 或进行服务运维时,Shell 是我们最常用的交互工具之一。熟练掌握高效的 Shell 操作,可以显著提升任务处理速度和整体工作效率。本文将介绍一些提升 Shell 交互效率的小技巧,重点涵盖 Bash 的 Emacs 快捷键 以及 Fish Shell 的专有快捷键。
Bash 基础快捷键
Bash 是大多数 Linux 发行版的默认 Shell,并且默认支持 Emacs 风格快捷键。因此我们先从 Bash 开始讲起。
我个人平时使用 Kitty Terminal —— 主要原因是 KDE 的 Konsole 与 Emacs 存在快捷键冲突,所以最终弃用了 Konsole。所以选择一个自己用着顺手的终端环境非常重要。
1. 光标移动
光标移动是日常使用中最频繁的操作之一,尤其是在需要临时修改命令时,例如给已有命令前加上 sudo 又或者将 systemctl status 改成 systemctl start。
以下是常用的光标移动快捷键:
- 移动到行首:
Ctrl + a- 助记:
ahead(移到最前方)。
- 助记:
- 移动到行尾:
Ctrl + e- 助记:
end(移到结尾)。
- 助记:
- 向前/向后移动一个字符:
Ctrl + f/Ctrl + b- 助记:
forward/back。
- 助记:
- 向前/向后移动一个单词:
Alt + f/Alt + b- 助记:
forward/back,但以单词为粒度。
- 助记:
总结: Ctrl 移动时针对「字符级别」操作。 Alt 移动时针对「单词级别」操作。
2. 高效删除与编辑
在终端中输入命令时,经常会遇到输入错误或需要快速修改的情况。如果只用 Backspace 一格一格删除,效率非常低。这时候删除类快捷键就能大幅提升操作效率。
- 删除到行尾:
Ctrl + k- 助记:
kill(把后面全“杀掉”) - 场景:写了一半发现参数不对,可以直接删掉行尾再补充。
- 助记:
- 删除到行首:
Ctrl + u- 助记:
up(把前面全删掉) - 场景:想重新输入命令时,不必
Ctrl + c另起一行,直接清空前半部分继续写。
- 助记:
- 删除下一个单词:
Alt + d- 助记:
delete(删除下一个单词) - 场景:输入
systemctl status nginx,但发现要改成apache,光标在s前面时直接用Alt + d删除status。
- 助记:
- 删除前一个单词:
Ctrl + w- 助记:
wipe(清除前一个单词) - 场景:输入错误的路径
/etc/ngnix/nginx.conf,光标在末尾时Ctrl + w删除nginx.conf,快速更换。
- 助记:
3. 命令导航
在交互式 Shell 中,命令历史是最重要的“效率神器”之一。以下快捷键能让你像在 Emacs 里一样上下浏览历史命令。
- 上一条命令:
Ctrl + p- 助记:
previous(上一条) - 场景:多次重启服务时,快速切换之前的
systemctl restart。
- 助记:
- 下一条命令:
Ctrl + n- 助记:
next(下一条) - 场景:向上翻太多了,再用
Ctrl + n回到后面的命令。
- 助记:
4. 历史命令搜索
- 搜索历史命令:
Ctrl + r- 助记:
reverse search(反向搜索历史) - 场景:忘记命令时使用,例如忘记上次重启 PostgreSQL 的命令,可以输入
Ctrl + r然后键入postgres,就会自动补全最近相关命令。(注意:匹配是从左到右匹配)
- 助记:
- 取消搜索:
Ctrl + g- 助记:
go away(退出搜索) - 场景:搜错了或者想重新输入命令时,直接
Ctrl + g退出。
- 助记:
5. 会话与命令管理
- 清屏:
Ctrl + l- 助记:
clear(效果等同clear命令)
- 助记:
- 回车(确认命令):
Ctrl + j- 助记:
jump(执行跳到下一行)
- 助记:
- 撤销操作:
Ctrl + _ - 中断命令:
Ctrl + c- 助记:
cancel(终止当前命令)
- 助记:
- 挂起进程:
Ctrl + z- 助记:
z→ Zzz(让进程“睡眠”) - 场景:运行
vim编辑时突然要处理别的东西,可以挂起vim,用fg恢复,或者用bg放到后台继续运行。
- 助记:
Fish Shell 专有快捷键
我日常使用的是 Fish Shell。与 Bash 相比,Fish Shell 更加注重交互体验和人性化设计,默认就提供了许多实用的快捷键。对于日常高频操作,它往往比 Bash 更“开箱即用”。下面介绍一些 Fish 的专有快捷键:
- 向前补全:
Ctrl + f- 助记:
forward(逐词向前接受建议) - 场景:输入
ssh se时,Fish 自动建议ssh server.example.com,按Ctrl + f可以逐词接受,而不是一下子整行补全。
- 助记:
- 显示命令手册:
Alt + h- 助记:
help - 场景:输入
grep时忘了参数,直接Alt + h打开man grep,不用手动查文档。
- 助记:
- 加入 sudo 前缀:
Alt + s- 场景:输完
systemctl restart nginx才发现忘了加sudo,按Alt + s就能瞬间补上,而不用退回去重新输入。
- 场景:输完
- 反向补全:
Shift + Tab(在补全菜单中向上选择)- 助记:和
Tab对应(向上选择) - 场景:补全菜单里选错了,可以用
Shift + Tab往上翻。
- 助记:和
- 清空命令:
Ctrl + c- 助记:
cancel(和 Bash 的Ctrl + U一致,不会留下^C)
- 助记:
- 多行命令上下跳转:
Ctrl + p/Ctrl + n- 助记:
previous / next(但以整条命令为单位移动) - 场景:编辑多行命令时例如
docker run,能快速上下切换,而不是逐行光标移动。
- 助记:
顺便这里推荐一下 Fish
除了快捷键,Fish 还有一些方便的功能,可以进一步提升效率:
自动建议:Fish 会根据历史和文件路径自动给出灰色建议,可以
→接受整行,或Ctrl + f逐词接受。强大的 Tab 补全:Fish 的 Tab 补全不仅能给出选项,还会显示参数解释(类似
--help的提示)。命令拼写检查:输入
gti status时,Fish 会智能提示是不是git status。内置语法高亮:命令不存在会变红,字符串自动配对高亮,能即时发现错误。
通用配置函数:
fish_config命令直接打开浏览器,图形化修改主题、提示符和快捷键,非常直观。插件系统:可以安装一些额外插件增强 Fish 的功能。例如:bass 可以让 fish 跑 bash 脚本(实际上 fish 和 bash 语法不兼容)。