Linux重定向 2>1 中的是什么含义
在 2>&1
这个表达式里,&
起到了特殊的标识作用,下面为你详细解释其含义和背后的原理。
基础概念:文件描述符与重定向
在 Linux 和类 Unix 系统中,文件描述符是用于标识和访问文件或其他输入 / 输出资源的整数。常见的文件描述符有:
- 标准输入(
stdin
):对应文件描述符0
。 - 标准输出(
stdout
):对应文件描述符1
。 - 标准错误输出(
stderr
):对应文件描述符2
。
重定向操作符用于改变程序输入输出的方向,例如 >
用于将标准输出重定向到文件,<
用于将文件内容作为标准输入。
&
在 2>&1
中的作用
在 2>&1
里,&
的作用是告诉系统 1
代表的是文件描述符,而不是普通的文件名。如果没有 &
,系统会把 1
当作一个普通的文件名来处理。
对比有无 &
的情况
- 没有
&
的情况:假设执行2>1
,这里2>
表示将标准错误输出重定向,而1
会被当作一个普通的文件名,意思是把标准错误输出重定向到名为1
的文件中。 - 有
&
的情况:当执行2>&1
时,&
表明1
是一个文件描述符,即标准输出的文件描述符。所以2>&1
的含义是将标准错误输出重定向到标准输出所在的位置。
示例说明
以下示例可以更直观地展示 &
的作用:
示例 1:没有 &
的重定向
ls /nonexistent_dir 2>error_file
这里 ls
命令尝试列出一个不存在的目录,会产生错误信息。2>error_file
把标准错误输出重定向到 error_file
文件中。
示例 2:使用 &
的重定向
ls /nonexistent_dir >output_file 2>&1
>output_file
先将标准输出重定向到output_file
文件。>output_file等价于1>output_file。
2>&1
接着把标准错误输出重定向到标准输出所在的位置,也就是output_file
文件。所以最终标准输出和标准错误输出的信息都会被保存到output_file
中。
综上所述,2>&1
中的 &
是为了明确 1
是文件描述符而非文件名,从而实现将标准错误输出重定向到标准输出位置的功能。