目录
Please enable Javascript to view the contents

Linux效率-终端快捷命令

 ·  ☕ 3 分钟
核心结论说明
大多数快捷键来自 ReadlineBash、Python REPL、MySQL CLI 等交互程序常复用这套编辑能力
Ctrl+s 不是暂停程序,而是终端流控它发送 XOFF 暂停终端输出,Ctrl+q 发送 XON 恢复输出
Ctrl+cCtrl+z 不是一回事Ctrl+c 发送 SIGINT 中断进程,Ctrl+z 发送 SIGTSTP 挂起进程
Shell 粘贴通常不是 Ctrl+vCtrl+v 在 Readline 中表示“按字面插入下一个字符”,终端粘贴常用 Ctrl+Shift+v

1.简介

Linux 终端快捷键主要用于两类场景:

  1. 快速编辑当前命令行;
  2. 控制正在运行的前台进程。

需要注意:终端快捷键并不完全等同于桌面软件快捷键。很多按键实际来自三层机制:

来源作用例子
终端驱动控制前台进程、流控、EOFCtrl+cCtrl+zCtrl+dCtrl+s
Readline编辑命令行Ctrl+aCtrl+eCtrl+r
终端模拟器复制粘贴、窗口管理Ctrl+Shift+cCtrl+Shift+v

2.说明

2.1 程序控制

快捷键作用说明
Ctrl+c中断前台程序发送 SIGINT,程序通常会退出
Ctrl+z挂起前台程序发送 SIGTSTP,程序进入 stopped 状态
Ctrl+d发送 EOF空行时表示输入结束,也可退出 shell / python / mysql
Ctrl+s暂停终端输出XOFF 流控,不是暂停进程
Ctrl+q恢复终端输出XON 流控,解除 Ctrl+s

示例:

1
2
3
4
sleep 100
# Ctrl+z
jobs
fg %1

Ctrl+z 后,进程没有结束,只是被挂起。常用命令:

命令作用
jobs查看当前 shell 管理的后台/挂起任务
fg %1将任务 1 拉回前台
bg %1让任务 1 在后台继续运行
kill %1终止任务 1
如果终端突然“卡住”但程序看起来没退出,优先按 Ctrl+q。很多时候是误按了 Ctrl+s,终端输出被流控暂停。

2.2 光标移动

快捷键作用等价键
Ctrl+a移动到行首Home
Ctrl+e移动到行尾End
Ctrl+b左移一个字符
Ctrl+f右移一个字符
Alt+b左移一个单词部分终端为 Ctrl+←
Alt+f右移一个单词部分终端为 Ctrl+→
Ctrl+x Ctrl+x在当前位置和上次位置之间切换-

常用场景:

1
kubectl -n default get pods --selector app=demo -o wide

如果需要回到命令开头补 timesudo,用 Ctrl+a 比长按方向键快得多。

2.3 删除与剪切

快捷键作用
Ctrl+u删除光标前所有内容
Ctrl+k删除光标后所有内容
Ctrl+w删除光标前一个单词
Alt+d删除光标后一个单词
Ctrl+h删除光标前一个字符,等价 Backspace
Ctrl+d删除光标下一个字符;空行时发送 EOF

Readline 中的“删除”很多时候其实是 kill,内容会进入 kill-ring,可以用 Ctrl+y 粘回。

2.4 粘贴与撤销

快捷键作用说明
Ctrl+y粘贴最近 kill 的文本配合 Ctrl+uCtrl+kCtrl+w 使用
Alt+y在 kill-ring 中切换历史剪切内容需要先执行 Ctrl+y
Ctrl+_撤销上一次编辑部分终端可用 Ctrl+Shift+-
Ctrl+v按字面插入下一个字符例如插入 Tab、控制字符
Ctrl+Shift+v终端模拟器粘贴GNOME Terminal、Windows Terminal 常见

示例:插入一个真实 Tab 字符:

1
Ctrl+v Tab

2.5 历史命令

快捷键 / 写法作用
Ctrl+r反向搜索历史命令
Ctrl+p上一条历史命令,等价 ↑
Ctrl+n下一条历史命令,等价 ↓
history查看历史命令列表
!!执行上一条命令
!num执行 history 中编号为 num 的命令
!?string?执行最近一条包含 string 的命令
!$上一条命令的最后一个参数
!*上一条命令的所有参数

常见用法:

1
2
mkdir -p /tmp/demo-dir
cd !$

等价于:

1
cd /tmp/demo-dir

上一条命令忘记加 sudo

1
sudo !!

需要注意:历史展开会在执行前被 shell 替换,执行危险命令前建议先确认。

1
history | tail

2.6 常用组合

场景操作
当前命令写错,整行重来Ctrl+u
命令太长,回到开头补 sudoCtrl+a
命令末尾继续追加参数Ctrl+e
误按 Ctrl+s 后终端不动Ctrl+q
搜索历史里的 kubectl 命令Ctrl+r 后输入 kubectl
暂停前台任务临时回 shellCtrl+z,处理完后 fg
删除上一个参数Ctrl+w
恢复刚删除的内容Ctrl+y

3.总结

  1. Ctrl+c 是中断进程,Ctrl+z 是挂起进程,Ctrl+s 是暂停终端输出;
  2. 命令行编辑大多来自 Readline,Ctrl+a/e/u/k/w/r 是最高频快捷键;
  3. Ctrl+v 在 shell 中不是普通粘贴,而是插入下一个字符的字面值;
  4. 历史展开 !!!$ 很高效,但执行前需要确认,避免误操作;
  5. 终端快捷键的关键不是全部记住,而是掌握“移动、删除、历史、进程控制”四类高频动作。

4.参考

分享

Hex
作者
Hex
CloudNative Developer