Shell - 0,1,2是什么意思?2>&1 ,1> , &>什么意思?
0,1,2是什么意思?
bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO:
- 0,aka STDIN_FILENO即标准输入(一般是键盘)
- 1,aka STDOUT_FILENO标准输出(一般是显示屏,准确的说是用户终端控制台)
- 2,aka STDERR_FILENO标准错误(出错信息输出)
2>&1 是什么意思?
问:
为了将 stderr 和 stdout 合并成 stdout 流,我们将它附加到命令中:
2>&1
例如,要查看编译 g++ main.cpp 的前几个错误:
g++ main.cpp 2>&1 | head
2>&1 的具体含义是什么?
答:
文件描述符 1 是标准输出(stdout)。
文件描述符 2 是标准错误(stderr)。
起初,2>1 看起来像是将 stderr 重定向到 stdout 的好方法。但是,它实际上会被解释为“将 stderr 重定向到名称为 1 的文件”。
& 表明其后面和前面的(数字)是文件描述符,而不是文件名。因此,我们使用 2>&1。考虑将 >& 作为重定向合并运算符。
2>&1 & 什么意思?
至于最后一个&,则是让bash在后台执行。
command >out.file 2>&1 &
command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。 2>&1 是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个& , 是让该命令在后台执行。
原文链接:https://blog.csdn.net/chenluancl/article/details/2140060
1> 和 &> 什么意思?
在Unix和类Unix的shell中,1,2和&是特殊的符号,用于在重定向时指定要重定向的数据流。它们的含义如下:
1:stdout 是发送程序输出的默认位置,默认情况下,输出出现在运行 shell 或 shell 脚本的窗口中。
2: 这表示标准错误输出(stderr)。当你执行一个命令时,有两种主要的输出流:标准输出(stdout)和标准错误输出(stderr)。标准输出通常包含命令的主要结果,而标准错误输出则包含了错误信息。2>就是将标准错误输出重定向到某个文件。
&: 在重定向中,&表示“所有的”。所以,&>表示将所有的输出(包括标准输出和标准错误输出)都重定向到某个文件。
例如,command 2> /dev/null会将command的错误输出丢弃,而command &> /dev/null则会将command的所有输出都丢弃。
相关知识点
在操作系统术语中,正在运行的程序被称为进程。Unix/Linux/POSIX(包括 Windows)环境中的每个进程都有三个不同的输入/输出文件描述符,分别是标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。
● stdin 是程序的默认输入源--默认情况下,字符来自键盘。对应文件描述符数字 0。
● stdout 是发送程序输出的默认位置,默认情况下,输出出现在运行 shell 或 shell 脚本的窗口中。
● stderr 标准错误也可以从程序中发送到输出,但它只应该输出到程序中编写错误消息的地方。
shell 提供了一种机制,你可以让一个正在运行的程序在不修改程序本身的情况下更改它的输入位置和输出位置,这种技术就是重定向。
参考文档
- https://blog.csdn.net/m0_57236802/article/details/131871134
- https://baijiahao.baidu.com/s?id=1791842199325996839&wfr=spider&for=pc
- stackoverflow question 818255《bash网络安全运维》