Bash Shell环境中快捷键介绍
2010-07-13 04:41:07 阿炯

这一些快捷方式是必须要提前掌握的,它将贯穿整个 Linux 使用生涯:
通过上下方向键↑ ↓来调取过往执行过的 Linux 命令;命令或参数仅需输入前几位就可以用 Tab 键补全等。
Ctrl + r:用于查找使用过的命令(history 命令用于列出之前使用过的所有命令,然后输入 ! 命令加上编号( !2 )就可以直接执行该历史命令);
Ctrl + l:清除屏幕并将当前行移到页面顶部;
Ctrl + c:中止当前正在执行的命令;
Ctrl + u:从光标位置剪切到行首;
Ctrl + k:从光标位置剪切到行尾;
Ctrl + w:剪切光标左侧的一个单词;
Ctrl + y:粘贴 Ctrl + U | K | Y 剪切的命令;
Ctrl + a:光标跳到命令行的开头;
Ctrl + e:光标跳到命令行的结尾;
Ctrl + d:关闭当前 Shell 会话;


Ctrl+p 重复上一次命令
Ctrl+a 光标移至行首
Ctrl+x 同上但再按一次会从新回到原位置
Ctrl+b 前移一个字符不删除字符情况下
Ctrl+h 删除前一个字符
Ctrl+u 删除光标至行首的字母
Ctrl+w 删除光标前的一个单词(以空格为分隔符)
Ctrl+d 删除提示符后一个字符或exit或logout
Ctrl+e 光标移至行尾
Ctrl+f 后移一个字符
Ctrl+k 删除光标至行尾的字符
Ctrl+r 向前查找用过的命令

Ctrl+l(字母L) 清屏,等同于clear命令
Ctrl+z 挂起进程(jobs命令查看挂起的进程)
Alt+d 删除光标后的一个单词
Tab 自动补齐


命令补齐
Ctrl-I 等同于按制表符键
Ctrl-W 不是删除光标前的所有字符,只是删除光标前的一个单词
Ctrl-P 是recall出上一个命令 Ctrl-N 是recall出下一个命令
ESC-F 光标向前步进一个单词
ESC-B 光标向后步进一个单词
Ctrl-M 等同于回车键
Ctrl-O 等同于回车键
Ctrl-V 使下一个特殊字符可以插入在当前位置, 如Ctrl-V 可以在当前位置插入一个字符, 其ASCII是9, 否则一般情况下按结果是命令补齐
Ctrl-C 撤消当前命令行的编辑,另起一行.
Ctrl-S 暂时冻结当前shell的输入
Ctrl-Q 解冻
ESC-c 使下一个单词首字母大写, 同时光标前进一个单词, 如光标停留在单词的某个字母上, 如word中的o字母上, 则o字母变大写. 而不是w
ESC-u 使下一个单词所有字母变大写, 同时光标前进一个单词, 同上, 如光标在o字母上, 则ord变大写, w不变
ESC-l 同ESC-U, 但使之全变为小写

移动命令行热键
Ctrl+F 向前移动一个字符
Ctrl+B 向后移动一个字符
Alt+F 向前移动一个单词
Alt+B 向后移动一个单词
Ctrl+A 移动到当前的行首
Ctrl+E 移动到当前的行末
Ctrl+L 清屏

编辑命令行按键
Ctrl+D 删除当前的字符
Ctrl+T 交换前后字符的位置
Alt+T 交换前后单词的位置
Alt+U 将当前词转换为大写
Alt+L 将当前词转换为小写
Alt+C 将当前词转换为首字符为大写字符
Ctrl+V 插入专用字符
Ctrl+V 剪切至行末的文本
Ctrl+U 剪切从行首至光标处的文本
Ctrl+M 剪切光标之前的词
Alt+D 剪切光标之后的词
Ctrl+Y 粘贴最近分割的文本
Alt+Y 粘贴以前的文本
Ctrl+C 删除整行

在调用命令行
单步移动:箭头键或用快捷键(Ctrl+PCtrl+N)
反向增量检索:Ctrl+R
正增量检索:Ctrl+S
反向检索:Alt+P
正向检索:Alt+N



下面内容大多数是总结.
Ctrl 键相关的快捷键:

Ctrl + a - Jump to the start of the line
Ctrl + b - Move back a char
Ctrl + c - Terminate the command //用的最多了吧?
Ctrl + d - Delete from under the cursor
Ctrl + e - Jump to the end of the line
Ctrl + f - Move forward a char
Ctrl + k - Delete to EOL
Ctrl + l - Clear the screen //清屏,类似 clear 命令
Ctrl + r - Search the history backwards //查找历史命令
Ctrl + R - Search the history backwards with multi occurrence
Ctrl + u - Delete backward from cursor // 密码输入错误的时候比较有用
Ctrl + xx - Move between EOL and current cursor position
Ctrl + x @ - Show possible hostname completions
Ctrl + z - Suspend/ Stop the command
补充:
Ctrl + h - 删除当前字符
Ctrl + w - 删除最后输入的单词

Ctrl+C和Ctrl+Z都是中断命令,但作用不同。
Ctrl+C是发送SIGINT信号,终止一个进程。
Ctrl+Z是发送SIGSTOP信号,挂起一个进程,将作业放置到后台(暂停状态)。与此同时,可以通过fg重启前台被中断的任务,也可以通过bg把中断的任务放到后台执行。
Ctrl+D表示一个特殊的二进制值EOF,代表输入完成或注销。


ALT 键相关的快捷键:
平时很少用,有些和远程登陆工具冲突。

Alt + < - Move to the first line in the history
Alt + > - Move to the last line in the history
Alt + ? - Show current completion list
Alt + * - Insert all possible completions
Alt + / - Attempt to complete filename
Alt + . - Yank last argument to previous command
Alt + b - Move backward
Alt + c - Capitalize the word
Alt + d - Delete word
Alt + f - Move forward
Alt + l - Make word lowercase
Alt + n - Search the history forwards non-incremental
Alt + p - Search the history backwards non-incremental
Alt + r - Recall command
Alt + t - Move words around
Alt + u - Make word uppercase
Alt + back-space - Delete backward from cursor
// SecureCRT 如果没有配置好,这个就很管用了。

其他特定的键绑定:
输入 bind -P 可以查看所有的键盘绑定,这一系列我觉得更为实用。

Here "2T" means Press TAB twice
$ 2T - All available commands(common) //命令行补全,我认为是 Bash 最好用的一点
$ (string)2T - All available commands starting with (string)
$ /2T - Entire directory structure including Hidden one
$ ./2T - Only Sub Dirs inside including Hidden one
$ *2T - Only Sub Dirs inside without Hidden one
$ ~2T - All Present Users on system from "/etc/passwd" //第一次见到,很好用
$ $2T - All Sys variables //写Shell脚本的时候很实用
$ @2T - Entries from "/etc/hosts" //第一次见到
$ =2T - Output like ls or dir //好像还不如 ls 快捷

补充:
Esc + T - 交换光标前面的两个单词

很多来自GNU 的 readline 库。另外一份总结也很好,记忆是所有技术人员的敌人,一次要把所有的都记住是不可能的;针对自己的使用习惯,对少数快捷键反复使用,短期内就会有效果。按类别来可分为以下四类:

1、编辑命令
2、历史搜索命令
3、控制命令
4、Bang(!) 命令

1、编辑命令

命令备注
Ctrl + a移到命令行首
Ctrl + e移到命令行尾
Ctrl + f按字符前移(右向)
Ctrl + b按字符后移(左向)
Alt + f按单词前移(右向)
Alt + b按单词后移(左向)
Ctrl + xx在命令行首和光标之间移动
Ctrl + u从光标处删除至命令行首
Ctrl + k从光标处删除至命令行尾
Ctrl + w从光标处删除至字首
Alt + d从光标处删除至字尾
Ctrl + d删除光标处的字符
Ctrl + h删除光标前的字符
Ctrl + y粘贴至光标后
Alt + c从光标处更改为首字母大写的单词
Alt + u从光标处更改为全部大写的单词
Alt + l从光标处更改为全部小写的单词
Ctrl + t交换光标处和之前的字符
Alt + t交换光标处和之前的单词
Alt + Backspace与 Ctrl + w 类似,分隔符有些差别


历史搜索命令

命令备注
Ctrl + r逆向搜索命令历史
Ctrl + g从历史搜索模式退出
Ctrl + p历史中的上一条命令
Ctrl + n历史中的下一条命令
Alt + .使用上一条命令的最后一个参数


控制命令

命令备注
Ctrl + l清屏
Ctrl + o执行当前命令,并选择上一条命令
Ctrl + s阻止屏幕输出
Ctrl + q允许屏幕输出
Ctrl + c终止命令
Ctrl + z挂起命令


Bang(!) 命令

命令备注
!!执行上一条命令
!blah执行最近的以 blah 开头的命令,如 !ls
!blah:p仅打印输出,而不执行
!$上一条命令的最后一个参数,与 Alt + . 相同
!$:p打印输出 !$ 的内容
!*上一条命令的所有参数
!*:p打印输出 !* 的内容
^blah删除上一条命令中的 blah
^blah^foo将上一条命令中的 blah 替换为 foo
^blah^foo^将上一条命令中所有的 blah 都替换为 foo


bash有两级用户提示符。第一级是你经常看到的 bash 在等待命令输入时的提示符。缺省的一级提示符是字符$(如果是超级用户root则是#号)。可以通过改变bash 的PS1变量的值来改变你的缺省提示符,例如:
PS1="Please enter a command"

把bash shell 的提示符该为指定的字符串。

当bash 期待输入更多的信息以完成命令时显示第二级提示符。缺省的第二级提示符是 >。 果你要改变第二级提示符,可以通过设置PS2变量的值来实现:
PS2="I need more information"

另外你还可以用特殊的字符来定义你的提示符,下面的列表列出了最常用的特殊字符。

提示符(PS-x)特殊字符代码
字符 含义
\! 显示该命令的历史记录编号。
\# 显示当前命令的命令编号。
\$ 显示$符作为提示符,如果用户是root的话,则显示#号。
\\ 显示反斜杠。
\d 显示当前日期。
\h 显示主机名。
\n 打印新行。
\nnn 显示nnn的八进制值。
\s 显示当前运行的shell的名字。
\t 显示当前时间。
\u 显示当前用户的用户名。
\W 显示当前工作目录的名字。
\w 显示当前工作目录的路径。

这些特殊字符能组合成很多种有用的提示符方案(也可以组合为很奇异的方案),例如把 PS1 设为:
PS1="\t"
这导致提示符显示当前的时间,就象下面的显示一样(提示符后面将不会有空格): 02:16:15

而下面的设置:
PS1=\t
将导致提示符变成下面的样子:
t
这显示了设置中引号的重要性,下面的提示符串:
PS1="\t\\ "
会使提示符看起来象这个样子:
02:16:30\
这种情况下,提示符后面会有一个空格,因为引号里有一个空格。

Shell中的特殊字符:
& ; | * ? ' " ' [ ] { } $ < > ( ) # / \ ! ~ space(空格)
字符        用途
换行符        启动命令执行
;        分隔命令
()        将命令分组组子shell执行,或者是标示函数
&        在后台执行命令
|        管道
>        重定向标准输出
>>            追加标准输出
<        重定向标准输入
<<            Here文档
*        匹配零个或多个字符串
?        匹配单个字符串
\        引用后面的字符
'        单引号,禁止替换
"        双引号,开启替换
[]        匹配引用中的字符类别
$        引用某个变量
.        (内置句点)只在行首执行命令
#        注释开始
{}        封闭函数体
:        内置空串,返回true
&,||,!        布尔的与、或、非
()        子shell
$()        命令替换
(())        算术表达式计算,let的同义词
$(())        算术展开(不用于被括起来的值中包含等号的情形)
[]        test命令
[[]]        条件表达式,类似于[];但添加了字符串比较



该文章最后由 阿炯 于 2024-07-08 21:06:03 更新,目前是第 2 版。