输入输出重定向:把原本要从键盘获得的输入重定向为从文件或其他流获得;将原本要输出到屏幕上的输出流重定向为输出到文件或其他流中。

输入输出重定向涉及到三种流:

  • 标准输入流(stdin,文件描述符 0
  • 标准输出流(stdout,文件描述符 1
  • 标准错误输出流(stderr,文件描述符 2

重定向输出流

使用 >>> 可以重定向输出流,区别是,当目标文件已存在,> 会用新内容覆盖原文件内容(相当于 C 语言文件打开方式中的 w 方式),而 >> 则是将新内容追加到原文件尾部(相当于 a 方式)。

  1. 将标准输出重定向到文件中:

    1. $ command 1> filename
    2. $ command 1>> filename
    3. $ command >> filename # 不写 1 或者 2,也是重定向标准输出
  2. 将标准错误输出重定向到文件中:

    1. $ command 2> filename
    2. $ command 2>> filename
  3. 将所有输出重定向到文件中:

    1. $ command &>> filename
  4. 标准输出和标准错误输出重定向到不同文件中:

    1. $ command 1>> filename1 2>> filename2
  5. 标准输出和标准错误输出重定向到一个文件中,但分离开:

    1. $ command 1> filename 2> filename
  6. 标准输出和标准错误输出的相互重定向:

    1. $ command 1>&2 # 将标准输出重定向到标准错误输出
    2. $ command 2>&1 # 将标准错误输出重定向到标准输出

    注:如果有多个重定向,上面两种重定向要放到后面。例如:

    1. $ find / -name abcd 1>>/dev/null 2>&1

输出流重定向的常见用途:

  1. 快速向某个文件写入少量内容,例如:

    1. $ echo "export JAVA_HOME=/usr/local/jdk1.8.0" >> /etc/profile
  2. 保存命令的执行结果。

  3. 丢弃命令的错误输出,如:/dev/null 是一个字符设备文件,它就像一个黑洞,重定向到该文件的内容都会彻底消失。
    1. $ find / -name xxx 2>> /dev/null

重定向输入流