[笔记]快乐的Linux命令行《八》键盘高级操作技巧

105 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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 提供的键盘操作技巧,

这些技巧是来帮助我们减少工作量的:

  • 移动光标
  • 修改文本
  • 剪切和粘贴
  • 自动补全
  • 历史命令