高效地使用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 语法不兼容)。

参考链接