【Linux学习简记 】数据流重定向<,<<,>,>>,2>,2>>

什么是数据流?

数据流分三种,标准输入流(stdin)、标准输出流(stdout)、标准错误输出流(stderr)

标准输入流默认由键盘输入产生,标准输出流是执行命令时的输出日志,这些日志包含正常的日志输出与命令扫行失败的错误输出,即标准输出流与标准错误输出流

什么是数据流重定向?

将本应由键盘输入或输出到屏幕上的数据流重定向到文件或设备上(保存到文件或设备中),称之为数据流重定向

数据流重定向的作用(应用场景)

  • 屏幕输出信息需要保存
  • 后台执行程序,不想将日志打在桌面上
  • 区分输出标准输出与标准错误输出处理时
  • 丢弃已知错误信息,2> /dev/null

数据流的代号与表现方式

  • 标准输入(stdin):代码 0,使用 <<< 表示
  • 标准输出(stdout):代码 1,使用 >>> 表示
  • 标准错误输出(stderr):代码 2,使用 2>2>> 表示

>、>>、2>、2>> 区别

  • > :以【覆盖】的方式,将【正确的数据】输出到文件或设备上
  • >>:以【追加】的方式,将【正确的数据】输出到文件或设备上
  • 2>:以【覆盖】的方式,将【错误的数据】输出到文件或设备上
  • 2>>:以【追加】的方式,将【错误的数据】输出到文件或设备上

黑洞 /dev/null

当需要将某些日志不重要的数据流重定向走,但又不想保存文件占用空间时,重定向数据流 /dev/null 设备上,相当于将数据丢入黑洞

示例:

将标准输出丢入黑洞

$ cat /etc/profile > /dev/null

将标准错误输出丢入黑洞

$ find / -name .bashrc 2> /dev/null

将stdout与stderr输出到同一文件或设备

非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

总结自鸟哥私房菜第四版

posted @ 2020-06-02 15:01  东北小狐狸  阅读(826)  评论(0编辑  收藏  举报