第八章 高级键盘技巧

前言

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

编辑命令行

  1. 基本介绍
  • bash 使用了一个名为 Readline 的库 (供不同的应用程序共享使用的线程集合) 来实现命令行的编辑。
  1. 光标移动
组合键 作用
Ctrl-A 移动光标到行首
Ctrl-E 移动光标到行尾
Ctrl-F 光标向前移动一个字符;和右箭头键作用一样
Ctrl-B 光标向前移动一个字符;和左箭头键作用一样
Alt-F 光标向前移动一个字
Alt-B 光标向后移动一个字
Ctrl-l 清屏并把光标移到左上角;clear 命令可以完成相同工作
  1. 修改文本
组合键 作用
Ctrl-D 删除光标处的字符
Ctrl-T 使光标处的字符和它前面的字符对调位置
Alt-T 使光标处的字符和它前面的字对调位置
Alt-L 把光标到字尾的字符换成小写字母形式
Alt-U 把光标到字尾的字符换成大写字母形式
  1. 剪切和粘贴文本
组合键 作用
Ctrl+K 剪切从光标到行尾的文本
Ctrl+U 剪切从光标到行尾的文本
Alt-D 剪切从光标到当前词尾的文本
Alt-Backspace 剪切从光标到词头的文本。如果光标在一个单词,则剪切前一个单词
Ctrl-Y 把 kill-ring 缓冲区的文本粘贴到光标的位置

自动补齐功能

  1. 基本介绍
  • shell 的一种称为自动补齐的机制为用户提供了很大的帮助。在输入命令时,按 Tab 键将触发自动补齐功能。
  • 假设用户目录如下:
    1
    2
    3
    [me@linuxbox ~]$ ls
    Desktop ls-output.txt Pictures Templates Videos
    Documents Music Public
  • 输入如下命令,但是不要按 Enter 键。
    1
    [me@linuxbox ~]$ ls l
  • 此时按 Tab 键:
    1
    [me@linuxbox ~]$ ls ls-output.txt
  • 再看另一个例子,同样也不要按 Enter 键。
    1
    [me@linuxbox ~]$ ls D
  • 按下 Tab 键:
    1
    [me@linuxbox ~]$ ls D
  • 没有自动补齐–只有哔哔声。这是因为字母 D 和目录一个以上的名称匹配。要让自动补齐功能生效,要保证输入的内容不模棱两可,即必须是确定性的。
  • 如果我们继续输入:
    1
    [me@linuxbox ~]$ ls Do
  • 此时按下 Tab 键:
    1
    [me@Linuxbox ~]$ ls Documents 
  • 自动补齐功能这次生效了。
  • 自动补齐也可以针对变量 (如果单词是以 $ 开头) 、用户名 (如果单词以 ~ 开头) 、命令 (如果单词是命令行的第一个单词) 和主机名 (如果单词以 @ 开头) 起作用。
  • 主机名的自动补齐只对 /etc/hosts 目录下的主机名生效。
  1. 自动补全命令
组合键 作用
Alt-$ 显示所有可能的自动补全列表。在大多数系统中,可通过按两次 Tab 键实现,而且也会更容易一些
Alt-* 插入所有可能的匹配项。当需要用到一个以上的匹配项时候,将比较有用

使用历史命令

  1. 基本介绍
  • 第一章我们已经提到,bash 会保存使用过命令的历史记录。这些命令的历史记录列表保存在用户主目录的 .bash_history 文件中。
  • 这些历史记录非常有用,可以大大减少用户敲打键盘的次数,特别是和命令行编辑结合使用的时候。
  1. 搜索历史命令
  • 任何情况下,我们都可以通过如下命令查看历史记录内容列表。
    1
    [me@Linuxbox ~]$ history | less
  • bash 默认会保存用户最近使用过的 500 个命令。其中,500 是个默认值,关于如何改变这个默认值在第十一章介绍。
  • 假设我们想找到用来列出 /usr/bin 目录下内容的命令,我们可以这样做:
    1
    [me@Linuxbox ~]$ history | grep /usr/bin
  • 假设得到的搜索结果中有一行包含如下有趣的命令。
    1
    88 ls -l /usr/bin > ls-output.txt
  • 数字 88 表示这个命令行在历史记录列表中所处的行号,我们可以通过使用名为历史记录扩展 (history expansion) 的扩展类型来立即使用它。
  • 为了使用我们发现的命令行,可以如下操作:
    1
    [me@Linuxbox ~]$ !88
  • bash 将把 !88 扩展为历史列表中的 88 行的内容。
  • bash 也支持以递增方式搜索历史记录。也就是说,当搜索历史记录时,随着输入字符数的增加,bash 会相应地改变搜索范围。
  • 按下 Ctrl-R 键,接着输入你要查找的内容时,按 Enter 键表示执行此命令,而按 Ctrl-J 将把搜索到的内容从历史记录列表中复制到当前命令行。当要查找下一个匹配项时 (即向前搜索历史记录) ,再次按下 Ctrl-R 键。
  • 请看下面例子
    1
    [me@Linuxbox ~]$
  • 首先按下 Ctrl-R
    1
    (reverse-i-search) '':
  • 提示符发生改变,提示正在进行逆向递增式搜索。称为逆向是因为查的是从现在到过去的某个时间之间的操作。
  • 接下来,输入要查找的内容,这个例子中是查找 /usr/bin 。
    1
    (reverse-i-search) '/usr/bin': ls -l /usr/bin > ls-output.txt 
  • 很快搜索操作返回了结果。此时我们可按 Enter 键执行搜索结果,也可按下 Ctrl-J 把搜索结果复制到当前命令行以便做进一步的编辑。
  • 假定按下 Ctrl-J ,把搜索结果复制到当前命令行。
    1
    [me@Linuxbox ~]$ ls -l /usr/bin > ls-output.txt
  • shell 将实时响应,命令行将被加载,准备运行。
  1. 历史记录命令
组合键 作用
Ctrl-p 移动到前一条历史记录。相当于向上箭头键
Ctrl-N 移动到后一条历史记录。相当于向下箭头键
Alt-< 移动到历史记录列表的开始处
Alt-> 移动到历史记录列表的结尾处。即当前命令行
Ctrl-R 逆向递增地搜索。从当前命令行向前递增搜索
Alt-P 逆向非递增地搜索。按下这个组合键,接着输入待搜索的字符串,在按 Enter 键后,搜索才真正执行
Alt-N 向前非递增地搜索
Ctrl-O 执行历史记录列表中的当前项,执行完跳到下一项。若要把历史记录中的一系列命令重新执行一遍,使用该组合键将很方便
  1. 历史记录扩展命令
序列 行为
!! 重复最后一个执行的命令。按向上箭头再按 Enter 键也可以实现相同的功能,而且操作更简单
!number 重复历史记录中第 number 行的命令
!string 重复最近的以 string 开头的历史记录
!?string 重复最近的包含 string 的历史记录

参考文章

  • 转载:Linux 命令行大全