STDIN(0), STDOUT(1), STDERR(2), 2 > &1

当我们在 shell 中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符(文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推)来引用这些文件。由于文件描述符不容易记忆,shell 同时也给出了相应的文件名。 

STDIN  (0): 标准输入,位置 /dev/stdin, 缺省为键盘,也可以是文件或其他命令的输出
STDOUT (1): 标准输出,位置 /dev/stdout, 缺省为 Terminal,也可以是文件
STDERR (2): 标准错误,位置 /dev/stderr, 缺省为 Terminal,也可以是文件

在执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。下面列出了最常用的重定向组合,并给出了相应的文件描述符。 
在对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。

常用文件重定向命令 

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

Note: 有些程序(特别是象bash 、make这样执行了其他程序的程序)的设计者为了省事,把一些正常情况的信息也放在stderr中输出(即使程序本身并无错误),而stdout用来输出被调用程序的执行时信息,在这种情况下如果需要将屏幕中的所有输出输出到文件需要使用 2>&1.

原文地址:https://www.cnblogs.com/tannerBG/p/5164117.html