数据流分三种,标准输入流(stdin)、标准输出流(stdout)、标准错误输出流(stderr)
标准输入流默认由键盘输入产生,标准输出流是执行命令时的输出日志,这些日志包含正常的日志输出与命令扫行失败的错误输出,即标准输出流与标准错误输出流
将本应由键盘输入或输出到屏幕上的数据流重定向到文件或设备上(保存到文件或设备中),称之为数据流重定向
2> /dev/null
0
,使用 <
或 <<
表示1
,使用 >
或 >>
表示2
,使用 2>
或 2>>
表示>
:以【覆盖】的方式,将【正确的数据】输出到文件或设备上>>
:以【追加】的方式,将【正确的数据】输出到文件或设备上2>
:以【覆盖】的方式,将【错误的数据】输出到文件或设备上2>>
:以【追加】的方式,将【错误的数据】输出到文件或设备上当需要将某些日志不重要的数据流重定向走,但又不想保存文件占用空间时,重定向数据流 /dev/null
设备上,相当于将数据丢入黑洞
示例:
将标准输出丢入黑洞
$ cat /etc/profile > /dev/null
将标准错误输出丢入黑洞
$ find / -name .bashrc 2> /dev/null
非root用户没有权限访问其他用户家目录,会输出错误日志,以下例子由此产生错误信息
1、【反例】分别设置stdout与stderr到同一文件
$ find / -name .bashrc > /tmp/stdtestlogs1 2> /tmp/stdtestlogs1
输入流交叉,会导致文件内容次序错乱
2、【正例1】输出两者到同一文件,语法1 [command]> [file] 2>&1
$ find / -name .bashrc > /tmp/stdtestlogs2 2>&1
3、【正例2】输出两者到同一文件,语法2 [command] &> [file]
$ find / -name .bashrc &> /tmp/stdtestlogs3
4、将所有日志输入黑洞
$ find / -name .bashrc > /dev/null 2>&1
5、将错误日志输入黑洞
$ find / -name .bashrc 2> /dev/null
即,将原本由键盘输入的数据,改由文件内容提供
在标准输入流重定向中,<
与 <<
作用不是覆盖与追加了,<
表示使用文件提供数据,<<
用来【设置输入结束的字符】
【例1】:将 ~/.bashrc
输出重定向到 /tmp/stdintest
中
$ cat > /tmp/stdintest < ~/.bashrc
【例2】:设置【输入结束字符】,将一段文字输入到 /tmp/stdintest2
中
$ cat > /tmp/stdintest2 <<EOF
这是一条测试
这是一条测
这是一条
这是一
这是
这
EOF
总结自鸟哥私房菜第四版
【Linux学习简记 】数据流重定向<,<<,>,>>,2>,2>>
原文:https://www.cnblogs.com/hellxz/p/linux-data-stream-forward.html