在 Linux 命令行中,2>&1 的作用是将标准错误(stderr)重定向到标准输出(stdout)。
理解文件描述符
要理解 2>&1,首先需要知道 Linux 系统中的文件描述符:
0:代表 stdin(标准输入),默认是键盘。
1:代表 stdout(标准输出),默认是屏幕。
2:代表 stderr(标准错误),默认也是屏幕。
当你在终端执行一个命令时,它的正常输出会发送到 stdout(文件描述符 1),而错误信息会发送到 stderr(文件描述符 2)。通常情况下,这两个都会显示在你的屏幕上。
> 和 & 的作用
>是重定向符号,用于将一个文件描述符的内容重定向到另一个地方,比如文件。例如,ls > output.txt会将ls命令的正常输出写入到output.txt文件中。&符号在这里有两种作用:当它跟在一个重定向符号(如
>或<)后面时,它表示文件描述符,而不是文件名。当它用在命令行的末尾时,它表示将命令放入后台执行。
2>&1 的具体解释
现在,我们把它们组合起来看:
2>:这是一个重定向命令,表示将文件描述符 2(即 stderr)的内容进行重定向。&1:这里的&表示后面的1是一个文件描述符,而不是一个名为1的文件。所以,&1指的是文件描述符 1(即 stdout)。2>&1:合起来就是把stderr(文件描述符 2)重定向到stdout(文件描述符 1)。
简单来说,就是告诉系统:“把错误信息当成正常的输出信息来处理”。
示例
假设你有一个命令 command,它会产生正常输出和错误输出。
command > output.txt:这只会将正常输出写入output.txt文件。错误信息仍然会显示在屏幕上。command > output.txt 2>&1:这会先将 stderr 重定向到 stdout,然后>会将合并后的 stdout(包含了正常输出和错误输出)一起写入output.txt文件。这样,所有信息都会被保存在文件中,屏幕上则不会有任何输出。
总而言之,2>&1 是一种将所有输出(包括正常输出和错误输出)都收集到一起的常用技巧,这在需要将命令的完整结果(包括可能出现的错误)记录到文件时非常有用。