Linux之键盘艺术

UNIX常被戏称为“它是为喜欢敲键盘的人设计的操作系统”。当然,UNIX中存在命令行的这一事实充分证明了这一点。但是用户使用命令行时往往不喜欢敲入太多字,所以命令中存在很多类似ls、cp、mv和rm等的短命令。
事实上,省事(laziness)(即用最少的击键次数执行最多的任务)是命令行最希望达到的目标之一。命令行的另一个目标是用户在执行任务时手指无需离开键盘,不使用鼠标。
我们将使用到以下命令:
1.clear:清屏
2.history:显示历史列表的记录

1.编辑命令行

bash使用了一个名为Readline的库(供不同的应用程序共享使用的线程集合)来实现命令行的编辑。
比如,通过箭头键移动光标。除此之外,bash还有很多其他功能,它们可以当做在工作中使用的附加工具。

(1)光标移动

下表列出了用来移动光标的组合键

组合键作用
Ctrl-A移动光标到行首
Ctrl-E移动光标到行尾
Ctrl-F光标向前移动一个字符,和右箭头键作用一样
Ctrl-B光标向后移动一个字符,和左箭头键作用一样
Alt-F光标向前移动一个字
Alt-B光标向后移动一个字
Ctrl-L清屏并把光标移到左上角;clear命令可以完成相同的工资

(2)修改文本

下表列出了用来编辑命令行字符的键盘命令

组合键作用
Ctrl-D删除光标处的字符
Ctrl-T使光标处的字符和它前面的字符对调位置
Alt-T使光标处的字和它前面的字对调位置
Alt-L把从光标到字尾的字符转换成小写字母的形式
Alt-U把从光标到字尾的字符转换成大写字母的形式

(3)剪切和粘贴(Killing and Yanking)文本

Readline文档中使用术语killing和yanking来指代通常所说的剪切和粘贴,下表列出了用来剪切和粘贴的命令。被剪切的内容存放在一个称为kill-ring的缓冲区中

组合键作用
Ctrl-K剪切从光标到行尾的文本
Ctrl-U剪切从光标到行首的文本
Alt-D剪切从光标到当前词尾的文本
Alt-Backspace剪切从光标到词头的文本。如果光标在一个单词的开头,则剪切前一个单词
Ctrl-Y把kill-ring缓冲区中的文本粘贴到光标位置

2.自动补齐功能

shell的一种称为“自动补齐”的机制为用户提供了很大的帮助。在输入命令时,按Tab键将触发自动补齐功能。下面让我们看看它是如何工作的。假设用户目录如下:
在这里插入图片描述
输入如下命令,但是不要按Enter键

ls P

此时按Tab键
在这里插入图片描述

观察shell是如何补齐这一行的。再看另一个例子,同样,也不要Enter键

ls l

按下Tab键
在这里插入图片描述
没有自动补齐,只有哔哔声。这是因为字母“l”和目录中一个以上的名称匹配。要让自动补齐功能生效,要保证输入的内容不模棱两可,即必须是确定性的,如果我们继续输入:
在这里插入图片描述
此时按下Tab键
在这里插入图片描述
自动补齐功能生效了。
这个例子给出的是文件名的自动补齐,这也是常用的方式。自动补齐也可以针对变量(如果单词以$开头)、用户名(如果单词以~开头)、命令(如果单词是命令行的第一个单词)和主机名(如果单词以@开头)起作用。主机名的自动补齐只针对/etc/hosts目录下的主机名生效。
有一些控制和元键序列与自动补齐功能相关联。

组合键作用
Alt-$显示所有可能的自动补齐列表。在大多数系统中,可通过按两次Tab键实现,而且也会更容易一些
Alt-*插入所有可能的匹配项。当需要用到一个以上的匹配项时,将比较有用

除了以上这些,还有相当多的组合键,可以在bash man页面的READLINE部分获取更多的相关内容列表。

3.使用历史命令

bash会保存使用过命令的历史记录。这些命令的历史记录表保存在用户目录的.bash_history文件中。这些历史记录非常有用,可以大大减少用户敲打键盘的次数,特别是和命令行编辑结合使用的时候。

(1)搜索历史命令

任何情况下,我们都可以通过如下命令查看历史记录的内容列表。
在这里插入图片描述
bash默认会保存用户最近使用过的500个命令。其中,500是个默认值。
假设我们想找到用来列出/usr/bin目录下内容的命令,我们可以这样做:
在这里插入图片描述
假设得到的搜索结果中有一行包含如下命令

88 ls -l /usr/bin > ls-output.txt

数字88表示这个命令行在历史记录列表中所处的行号,我们可以通过使用名为历史记录扩展(history expansion)的扩展类型来立即使用它。为了使用我们发现的命令行,可以进行如下操作:

!88

bash将把!88扩展为历史列表中88行的内容。
bash也支持以递增方式搜索历史记录。也就是说,当搜索历史记录时,随着输入字符数的增加,bash会相应地改变搜索范围。按下Ctrl-R键,接着输入你要查找的内容,可以开始递增式的搜索。当找到要查找的内容时,按Enter键表示执行此命令,而按下Ctrl-J将把搜索到的内容从历史记录列表中复制到当前命令行。当要查找下一个匹配项时(即向前搜索历史记录), 再次按下Ctrl-R键。若要退出搜索,按下Ctrl-G或者Ctrl-C即可。
首先按下Ctrl-R
在这里插入图片描述
提示符发生改变,提示正在进行逆向递增式搜索。称为“逆向”是因为查找的是从“现在”到过去的某个时间之间的操作。
当搜索操作返回了结果,此时我们可按Enter键执行搜索结果,也可按下Ctrl-J把搜索结果复制到当前命令行以便做进一步的编辑。
下面列出了一些手动操作历史记录的组合键

组合键作用
Ctrl-P移动到前一条历史记录,相当于向上箭头。
Ctrl-N移动到后一条历史记录,相当于向下箭头。
Alt-<移动到历史记录表的开始处
Alt->移动到历史记录表的结尾处,即当前命令行
Ctrl-R逆向递增地搜索,从当前命令行向前递增搜索。
Alt-P逆向非递增搜索,按下这个组合键,接着输入待搜索的字符串,在按Enter键后,搜索才真正开始执行
Alt-N向前非递增地搜索
Ctrl-O执行历史记录列表中的当前项,执行完跳到下一项。若要把历史记录中的一系列命令重新执行一遍,使用该组合键将很方便

(2)历史记录扩展

shell提供了一种专门用来扩展历史记录项的方式,即使用“!”字符。前面我们提到过如何通过在感叹号后面跟数字的方式,将来自历史记录列表中的命令插入到命令行中,除了这种方式,还有很多其他扩展方式。

序列行为
!!重复最后一个执行的命令,按向上箭头键再按Enter键也可实现相同的功能
!number重复历史记录中第number行的命令
!string重复最近的以string开头的历史记录
!?string重复最近的包含string的历史记录

当使用“!string”和“!?string”时,请务必小心谨慎,除非对历史记录中的内容非常确信。

(3)脚本

除了bash中的命令历史特性外,大部分Linux发行版本都包含一个称为脚本(script)的程序,它记录了shell的整个会话,并且将会话保存到一个文件中。该命令的语法是:

script [file]

其中file为用来保存会话记录的文件名。如果没有指定文件,默认使用文件typescript。脚本(script)的man页面给出了该程序的所有可选项和特性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dinha

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值