D5:学习Shell之五
高级键盘技巧
One of the most cherished goals of the command line is laziness, another goal is never having to lift our fingers from keyboard and reach for the mouse.
本章涉及命令:
- clear —— 清除屏幕内容
- history —— 显示历史列表内容
命令行编辑
bash使用一个名为Readline的库来实现命令行编辑。
注意,以下一些组合键可能会被GUI截获用于其他功能,当使用虚拟控制台时,所有组合键应该可以正常工作
移动光标
下表列出移动光标的组合键:
组合键 |
动作 |
Ctrl-a |
将光标移动到行首 |
Ctrl-e |
将光标移动到行尾 |
Ctrl-f |
将光标向后移动一个字符,相当于右箭头 |
Ctrl-b |
将光标向回移动一个字符,相当于左箭头 |
Alt-f |
将光标向后移动一个词 |
Alt-b |
将光标向回移动一个词 |
Ctrl-l |
清除屏幕并将光标移动到左上角,相当于执行clear命令 |
修改文本
下表描述用于在命令行上编辑字符的键盘命令:
组合键 |
动作 |
Ctrl-d |
删除光标所在的字符 |
Ctrl-t |
将光标位置的字符与它前面的字符互换 |
Alt-t |
将光标位置的词与它前面的词互换 |
Alt-l |
将光标位置到词末尾的字符转换为小写 |
Alt-u |
将光标位置到词末尾的字符转换为大写 |
剪切和粘贴文本Cutting and Pasting (Killing and Yanking) Text
Readline文档使用术语killing和yanking来指代通常所说的剪切(cutting)和粘贴(pasting)。
组合键 |
动作 |
Ctrl-k |
删除从光标处到行尾的文本 |
Ctrl-u |
删除从光标处到行首的文本 |
Alt-d |
从光标处到当前词尾的文本 |
Alt-Backspace |
删除从光标处到当前词开头的文本。如果光标位于词头,则删除前一个词 |
Ctrl-y |
将删除的文本插入当前光标的位置 |
完成
shell可以帮助我们的另一种方式是通过一种称为完成(completion)的机制。当键入命令的同时按tab键时,就会自动完成。
这大约相当于常说的“补全”。补全可以针对命令,也可以针对路径、文件名等。还可以针对变量(以$开头的词)、用户名(以~开头的词)、主机名(以@开头的词)。
下表是完成命令:
组合键 |
动作 |
Alt-? |
显示可能完成的列表。在大多数系统上,您也可以通过第二次按Tab键来执行此操作,这要容易得多。 |
Alt-* |
插入所有可能的完成项。当您想要使用多个可能的匹配项时,这非常有用。 |
在bash的手册页里有一个“READLINE”列表,描述了所有相关信息。
使用历史
命令的历史列表是保存在用户主目录中的.bash_history文件中的。
查找历史
任何时候都可以使用以下命令来查看历史内容:
[me@linuxbox ~]$ history | less
bash默认可以保存曾经使用过的最后500条命令,现代多数系统可以将其设置为1000。
以下命令可以列出我们使用过的/usr/bin命令的历史:
[me@linuxbox ~]$ history | grep /usr/bin
假设运行结果包含以下一行:
88 ls -l /usr/bin > ls-output.txt
88是历史命令列表中行号。我们可以使用另一种类型的扩展(称为历史扩展):
[me@linuxbox ~]$ !88
bash将会扩展!88到历史记录列表的第88行的内容,并执行它。
bash还提供了增量搜索历史记录列表的功能。(此功能tcsh和sh都没有)
按Ctrl-r开始增量搜索,然后按我们要查找的文本。找到该行后,可以按Enter键执行命令,也可以按Ctrl-j键将该行从历史记录列表复制到当前命令行。
要查找下一个出现的文本(在历史记录列表中向上移动),请再次按Ctrl-r。要退出搜索,请按Ctrl-g或Ctrl-c。
组合键 |
动作 |
Ctrl-p |
移动到上一个历史记录条目。这与向上箭头的动作相同。 |
Ctrl-n |
移动到下一个历史记录条目。这与向下箭头的动作相同。 |
Alt-< |
移动到历史记录列表的开头(顶部)。 |
Alt-> |
移动到历史记录列表的末尾(底部),即当前命令行。 |
Ctrl-r |
反向增量搜索。这将从当前命令行递增地搜索历史记录列表。 |
Alt-p |
反向搜索,非增量。使用此键,键入搜索字符串并按enter键,然后执行搜索。 |
Alt-n |
正向搜索,非增量 |
Ctrl-o |
执行历史记录列表中的当前项并前进到下一项。如果我们试图重新执行历史记录列表中的一系列命令,这是很方便的。 |
历史扩张
shell通过使用!字符为历史记录列表中的项目提供一种特殊类型的扩展。
历史扩展命令:
组合键 |
动作 |
!! |
重复上一个命令,这比按上箭头并按回车简单 |
!number |
重复对应number条目的历史 |
!string |
重复以字符串开头的最后一个历史记录列表项 |
!?string |
重复包含字符串的最后一个历史记录列表项 |
尽量不要用!string和!?string,除非完全确定历史记录里的条目。
bash手册页中有更详细的介绍。
script
除了bash中的命令历史记录功能外,大多数Linux发行版还包括一个名为script的程序,该程序可用于记录整个shell会话并将其存储在文件中。语法如下:
script [file]
如果未指定file则默认使用typescript作为输出文件名。
详细的使用方法可参考script命令的手册页。