开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情
@TOC
前言
一、键盘高级操作技巧
事实上,命令行最为珍视的目标之一就是懒惰;用最少的击键次数来完成最多的工作。另一个目标是你的手指永远不必离开键盘,永不触摸鼠标。
在这一章节,我们将看一下 bash 特性,这些特性使键盘使用起来更加迅速,更加高效。
将会涉及以下命令:
- clear -清空屏幕
- history -显示历史列表内容
1.1 命令行编辑
Bash 使用了一个名为 Readline 的库(共享的线程集合,可以被不同的程序使用),来实现命令行编辑。例如,箭头按键可以移动鼠标。
注意:下面一些按键组合(尤其使用 Alt 键的组合),可能会被 GUI 拦截来触发其它的功能。当使用虚拟控制台时,所有的按键组合都应该正确地工作。
1.2 移动光标
按键 | 行动 |
---|---|
Ctrl-a | 移动光标到行首。 |
Ctrl-e | 移动光标到行尾。 |
Ctrl-f | 光标前移一个字符;和右箭头作用一样。 |
Ctrl-b | 光标后移一个字符;和左箭头作用一样。 |
Alt-f | 光标前移一个字。 |
Alt-b | 光标后移一个字。 |
Ctrl-l | 清空屏幕,移动光标到左上角。clear 命令完成同样的工作。 |
补充:
按键 | 行动 |
---|---|
ctrl-左/右 | 光标移动一个单词 |
End | 光标移动到句末 |
Home | 光标移动到句首 |
1.3 修改文本
表 9 - 2 列出了键盘命令,这些命令用来在命令行中编辑字符。
按键 | 行动 |
---|---|
Ctrl-d | 删除光标位置的字符。 |
Ctrl-t | 光标位置的字符和光标前面的字符互换位置。 |
Alt-t | 光标位置的字和其前面的字互换位置。 |
Alt-l | 把从光标位置到字尾的字符转换成小写字母。 |
Alt-u | 把从光标位置到字尾的字符转换成大写字母。 |
1.4 剪切和粘贴文本
Readline 的文档使用术语 killing 和 yanking 来指我们平常所说的剪切和粘贴。剪切下来的本文被存储在一个叫做剪切环 (kill-ring)
的缓冲区中。
按键 | 行动 |
---|---|
Ctrl-k | 剪切从光标位置到行尾的文本。 |
Ctrl-u | 剪切从光标位置到行首的文本。 |
Alt-d | 剪切从光标位置到词尾的文本。 |
Alt-Backspace | 剪切从光标位置到词头的文本。如果光标在一个单词的开头,剪切前一个单词。 |
Ctrl-y | 把剪切环中的文本粘贴到光标位置。 |
补充:
按键 | 行动 |
---|---|
Shift-Insert | 粘贴文本到光标所在内容 |
鼠标右键 | 粘贴文本到光标所在内容 |
1.5 自动补全
shell 能帮助你的另一种方式是通过一种叫做自动补全
的机制。当你敲入一个命令时,按下tab 键
,自动补全就会发生。
在有ls-output.txt文件的目录下
试着输入该命令时 最后不要enter:
[me@linuxbox ~]$ ls l
按下tab键:
[me@linuxbox ~]$ ls ls-output.txt
就自动补全了!!!ls-output.txt
自动补全的范围:
- 路径名自动补全
- 对变量起作用(如果字的开头是一个 “$”)
- 命令(如果单词是一行的第一个单词)
- 主机名(如果单词的开头是 “@”)主机名自动补全只对包含在文件/etc/hosts 中的主机名有效。
与自动补全相关联:
按键 | 行动 |
---|---|
Alt-? | 显示可能的自动补全列表。在大多数系统中,你也可以完成这个通过按两次 tab 键,这会更容易些。 |
Alt-* | 插入所有可能的自动补全。当你想要使用多个可能的匹配项时,这个很有帮助。 |
可编程自动补全 目前的 bash 版本有一个叫做
可编程自动补全工具
。可编程自动补全允许你(更可能是,你的发行版提供商)来加入额外的自动补全规则。通常需要加入对特定应用程序的支持,来完成这个任务。例如,有可能为一个命令的选项列表,或者一个应用程序支持的特殊文件类型加入自动补全。默认情况下,Ubuntu 已经定义了一个相当大的规则集合。可编程自动补全是由 shell 函数实现的,shell 函数是一种小巧的 shell 脚本,我们会在后面的章节中讨论到。
如果你感到好奇,试一下:
set | less
查看一下如果你能找到它们的话。默认情况下,并不是所有的发行版都包括它们。
1.6 利用历史命令
bash 维护着一个已经执行过的命令的历史列表。这个命令列表被保存在你主目录下,一个叫做.bash history 的文件里。
这个 history 工具是个有用资源,因为它可以减少你敲键盘的次数,尤其当和命令行编辑联系起来时。
1.7 搜索历史命令
在任何时候,我们都可以浏览历史列表的内容,通过:
[me@linuxbox ~]$ history | less
在默认情况下,bash 会存储你所输入的最后 500 个命令。在随后的章节里,我们会知道怎样调整这个数值。比方说我们想要找到列出目录/usr/bin 内容的命令。
一种方法,我们可以这样做:
[me@linuxbox ~]$ history | grep /usr/bin
bash 也具有按递增顺序
来搜索历史列表的能力。
这意味着随着字符的输入,我们可以告诉 bash 去搜索历史列表,每一个附加字符都进一步提炼我们的搜索。
启动递增搜索,输入 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 | 执行历史列表中的当前项,并移到下一个。如果你想要执行历史列表中一系列的命令,这很方便。 |
1.8 历史命令展开
通过使用 “!” 字符,shell 为历史列表中的命令,提供了一个特殊的展开类型。我们已经知道一个感叹号,其后再加上一个数字,可以把来自历史列表中的命令插入到命令行中。
[me@linuxbox ~]$ !88
如上就是显示第88行
历史命令
还有一些其它的展开特性:
序列 | 行为 |
---|---|
!! | 重复最后一次执行的命令。可能按下上箭头按键和 enter 键更容易些。 |
!number | 重复历史列表中第 number 行的命令。 |
!string | 重复最近历史列表中,以这个字符串开头的命令。 |
!?string | 重复最近历史列表中,包含这个字符串的命令。 |
脚本
除了 bash 中的命令历史特性,许多 Linux 发行版包括一个叫做 script 的程序,
这个程序可以记录整个 shell 会话,并把 shell 会话存在一个文件里面。 这个命令的基本语法是:
script [fifile]
命令中的 fifile 是指用来存储 shell 会话记录的文件名。如果没有指定文件名,则使用文件 typescript。
查看脚本的手册页,可以得到一个关于 script 程序选项和特点的完整列表。
1.9 拓展阅读
Wikipedia 上有一篇关于计算机终端的好文章: en.wikipedia.org/wiki/Comput… terminal
总结
在这一章中,我们已经讨论了一些由 shell 提供的键盘操作技巧,
这些技巧是来帮助我们减少工作量的:
- 移动光标
- 修改文本
- 剪切和粘贴
- 自动补全
- 历史命令