#004 - 01 I/O重定向及管道

程序:指令 + 数据

  • 可用于输入的设备:文件
    • 键盘设备、文件系统上的常规文件、网卡等
  • 可用于输出的设备:文件
    • 显示器、文件系统上的常规文件、网卡等
  • 程序的数据流有三种:
    • 输入的数据流: <— 标准输入(stdin):默认键盘
    • 输出的数据流:—> 标准输出(stdout):默认显示器
    • 错误输出流:—> 错误输出(stderr):默认显示器
  • fd:file descriptor,文件描述符
    • 标准输入:0
    • 标准输出:1
    • 错误输出:2

I/O重定向:改变默认的标准输入-键盘,默认的标准输出-显示器

  • 输出重定向:> / >>
    • 特性:覆盖输出 / 追加输出,只能输出正确输出流(意味着错误的输出流会输出到标准输出 - 默认显示器)
  • help set :
      • C :禁止通过输出重定向( > )覆盖原有文件内容 - If set, disallow existing regular files to be overwritten by redirection of output.
      • 在启用 - C 特性的时候,需要强制覆盖输出,使用 “ >| “
      • C :关闭上述特性
    • 仅在当前shell生效
  • 错误输出流重定向:2> / 2>>
    • 特性:覆盖输出 / 追加输出,只能输出错误输出流(意味着正确的输出流会输出到标准输出 - 默认显示器)
  • 合并正常输出流和错误输出流:
    • &> / &>> :
      • 特性:无论是正确还是错误,都能把输出流重定向到文件中,(意味着不会将任何输出流输出到标准输出 - 默认显示器)
    • cat a.txt >> b.txt 2>&1:” 2>&1 “不能用>>,中间也没有空格符号
      • 标准输出已经重定向到b.txt这个文件,标准输出就是b.txt文件
      • &1意味着前面的标准输出,也就是b.txt这个文件
      • 这句话意思就是:将a.txt的正确输出重定向追加到b.txt,将错误输出重定向也追加到b.txt
    • 总结:重定向标准输出后,标准输出就是重定向的对象
  • 输入重定向:没有追加一说
    • < :改变标准输入
      • tr:转换
        • tr SET1 SET2 < /PATH/FROM/SOMEFILE
    • <<:here document - 此处创建文档
      • 格式:cat > /PATH/TO/SOMEFILE << EOF STRING EOF
      • 解释:将EOF中的内容 - STRING - 创建为SOMEFILE文件e

管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流

  • COMMAND1 | COMMAND2 | COMMAND3 …..
  • linux重要哲学思想之一:组合小程序,完成复杂任务
  • 一旦管道建立,前一个命令的输出就看不见了,能不能把前一份命令的输出先保存?
    • tee - read from standard input and write to standard output and files
      • 可以同时完成两个操作,从标准输入读入,写入标准输出和文件。经常跟管道使用。
      • cat /etc/issue | tee /tmp/issue.tee | tr ‘a-z’ ‘A-Z’
      • tee命令不仅将/etc/issue输出到了标准输出,还将其保存到了/tmp/issue.tee

猜你喜欢

转载自blog.csdn.net/Aarron_DL/article/details/80211187
004