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

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+c 终止进程
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 库。另外一份总结也很好,记忆是所有技术人员的敌人,一次要把所有的都记住是不可能的;针对自己的使用习惯,对少数快捷键反复使用,短期内就会有效果。

bash有两级用户提示符。第一级是你经常看到的 bash 在等待命令输入时的提示符。缺省的一级提示符是字符$(如果是超级用户,则是#号)。你可以通过改变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-04-08 15:13:07 更新,目前是第 2 版。