Linux命令行低保-技巧篇

Linux的命令行中除了常用的指令,还有重定向、管道这样的技巧,让简单的命令可以发挥更大的威力。同时,一些shell的快捷键也会在本文中展示。

重定向

重定向一般用于将程序的标准输入(stdin)/标准输出(stdout)/标准错误(stderr)改为某个文件,这三个IO流作为文件描述符的编号分别为0,1,2

重定向在很多场合下威力强大,但不要轻易尝试在命令之间使用

输出重定向

  • stdout

    • >:A > B,会将程序A的stdout改为文件B

      文件B不存在则创建之,所以> B可以创建文件

    • >>:A >> B,文件B采用追加写的方式打开

  • stderr

    • 2>:A 2> B,将程序A的stderr改为文件B
    • 2>>:A 2>> B,文件B采用追加写的方式打开
  • 合并输出

    • 通用ls -l /bin/usr > ls-output.txt 2>&1

      这里&[N]表示重定向到的目标,是一个文件描述符(专指三个标准IO流),从而将stderr重定向到了stdout上

      反之,先修改stderr指向具体文件,再修改stdout指向stderr同样奏效,注意先后

      同样的,要追加写的话,第一步重定向到具体文件时>>指定即可

    • bleeding edgels -l /bin/usr &> ls-output.txt

      这里&>表示将stdout和stderr组合,并重定向到同一个文件

      同理,如果要追加写,使用&>>即可

  • 抛弃stdout/stderr

    • 重定向到/dev/null,沿袭自UNIX的古老的比特垃圾桶

输入重定向

<:A < B,会将程序A的stdin改为文件B

管道

将前一个程序的标准输出用管道传输给下一个程序作为标准输入,组合命令来实现强大的功能

使用:command | command……

这样的命令,在处理数据时也被称为filter,并可以通过tee命令来查看中间结果

快捷键

下面是一些linux的shell中可以用到的快捷键,来加速命令的输入与修改。事实上,快捷键这种东西和shell的具体实现有关,这里使用linux大多数发行版默认的bash,它使用Readline库实现,并能正确响应这些快捷键操作

除了熟悉的Ctrl,Alt键也大有作为,它相当于Readline库理解的旧时的Meta Key,而且它做前缀的快捷键粒度一般比Ctrl粗。一个冷知识是,Linux下的Esc只要一用一松开,可以当作Alt键来使用shell快捷键

移动光标

  • Ctrl+
    • a/e:ahead/end,行级
    • f/b:forward/backward,字符级
    • l:clear,屏级
  • Alt+
    • f/b:forward/backward,词级

编辑

  • Ctrl+
    • d:delete,字符级

      注意:

      • 如果键盘输入传给其他程序而非shell,一般会被理解成EOF
      • 在空行使用还可以关闭终端会话
    • t:transpose,字符级

  • Alt+
    • t:transpose,词级
    • u/l:uppercase/lowercase,后半词级

剪切

在Readline中,将常用的剪切/粘贴(cut/paste)命名为kill/yank

  • Ctrl+
    • k/u:kill/upside-kill,半行级
    • y:yank
  • Alt+
    • d/Backspace:kill-word-forward/kill-word-backward,半词级

自动补全

按一下Tab键,即可在许多情景下,让shell尝试命令的自动补全

如果这个补全是有歧义的,则按两下Tab可以显示所有可行的补全项

  • Alt+
    • ?:显示所有可行的补全项
    • *:输入所有可行的补全项,在某些多文件参数命令中很有用

命令历史

除了history命令可以展示记录的命令行历史输入,也可以使用快捷键来利用这些历史记录

  • Ctrl+
    • p/n:prevois/next历史条目
    • r:reverse incremental search,反向,而且是带提示符的增量搜索,搜索到后Ctrl+j可以执行之
    • o:operate,不带提示符找到某一条历史条目后,执行之,并跳转到下一条,来重复执行指令序列
  • Alt+
    • </>:转到第一条/最后一条(也就是刚输入的命令)历史条目
    • p/n:非增量反向/前向搜索(后半个似乎经常失灵),带提示符,相较而言不常用

参考资料

The Linux Command Line