跳转至

Linux 输入输出与重定向


2014-04-29 by dongnan

开始之前

标准输入

标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。

标准输出

标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。

标准错误

标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。

为什么会有一个专门针对错误的特殊文件?

这是由于很多人喜欢把错误单独保存到一个文件中,特别是在处理大的数据文件时,可能会产生很多错误。 如果没有特别指定文件说明符,命令将使用缺省的文件说明符(你的屏幕,更确切地说是你的终端)。

文件重定向

  • command > filename:把把标准输出重定向到一个新文件中。
  • command >> filename:把标准输出重定向到一个文件中 (追加)。
  • command 1 > fielname:把标准输出重定向到一个文件中。
  • command > filename 2>&1:把标准输出和标准错误一起重定向到一个文件中。
  • command 2 > filename:把标准错误重定向到一个文件中。
  • command 2 >> filename:把标准输出重定向到一个文件中 (追加)。
  • command >> filename 2>&1:把标准输出和标准错误一起重定向到一个文件中 (追加)。
  • command < filename >filename2:把command命令以 filename文件作为标准输入,以 filename 2文件作为标准输出。
  • command < filename:把command命令以filename文件作为标准输入。
  • command << delimiter:把从标准输入中读入,直至遇到 delimiter分界符。
  • command <&m:把把文件描述符 m作为标准输入。 -command >&m:把把标准输出重定向到文件描述符 m中。
  • command <&-:把关闭标准输入。

举个栗子

0、1、2是标准输入、标准输出和标准错误:

标准输入重定向

cat 0</etc/passwd 
cat </etc/passwd

这两个命令等价,日常工作中常使用第2个命令。

标准输出重定向

cat /root/doc 1> newdoc
cat /root/doc > newdoc

这两个命令等价,日常工作中常使用第2个命令。

标准错误输出重定向

cat /root/ 2>error

2>error 将标准错误重定向到文件error文件。

标准输出和标准错误一起重定向到一个文件

apachectl -l > file 2>&1

2 >&1 将标准错误重定向到标准输出。

回到页面顶部