Linux 重定向与管道

Linux —— 重定向与管道

系统的输入输出包括:
默认输入设备:标准输入,STDIN,描述符为0
默认输出设备:标准输出,STDOUT,描述符为1
              标准错误输出,STDERR,描述符为2
             
标准输入,标准输出,标准错误输出是三个不同的数据流
             
系统默认标准输入是从键盘读取,标准输出和标准错误输出是输出到显示器

Linux中I/O重定向:
    输出重定向,
    >:覆盖输出,作为输出目标的文件原有内容会被覆盖
    示例:
    root@ubuntu:/home/linlin/linlin/test# echo 'The dog is so cute'
  The dog is so cute
  root@ubuntu:/home/linlin/linlin/test# echo 'The dog is so cute' > file
  root@ubuntu:/home/linlin/linlin/test# cat file
  The dog is so cute
  覆盖
  root@ubuntu:/home/linlin/linlin/test# echo 'The cat is so smart' > file
  root@ubuntu:/home/linlin/linlin/test# cat file
  The cat is so smart

    >>:追加输出,保留作为输出目标的原有文件
    示例:
    root@ubuntu:/home/linlin/linlin/test# echo 'The dog is so cute' >> file
  root@ubuntu:/home/linlin/linlin/test# cat file
  The cat is so smart
  The dog is so cute
   
    在使用输出重定向时,可能由于某个输出目标文件内容很重要,这时就需要使用追加
    输出,但在实际使用过程中,很容易错把>当做>>使用,为了防止这个错误,我们可以
    使用set命令
    set:shell内置功能开关
    set -C:禁止对已存在文件使用覆盖重定向
    强制覆盖输出使用 >|
    set +C:允许对已存在内容重定向
    root@ubuntu:/home/linlin/linlin/test# set -C
  root@ubuntu:/home/linlin/linlin/test# echo 'The cat is so smart' > file
  bash: file: cannot overwrite existing file
  
  tee:从标准输入读取数据,输出到标准输出,并保存至文件
  
  2>:标准错误输出重定向
  2>>:标准错误追加重定向

    &>:重定向标准输出和标准错误输出到同一个文件
    注意 &>> 不支持
   
    <:输入重定向
    <<结束符:表示在此处生成文档,当输入为结束符时表示输入结束
    here document具体解释https://linux.die.net/abs-guide/here-docs.html
   
   
管道:把一个命令的输出作为另一个命令的输入
体现了Linux的基本思想之一:组合小命令完成复杂任务
使用格式:
    命令1 | 命令2 | ......
    例如,取出某文件的倒数第3行
    root@ubuntu:/home/linlin/linlin/test# cat file
  10086
  213
  3134
  21343452
  2341
  root@ubuntu:/home/linlin/linlin/test# tail -3 file | head -1
  3134

构造管道时,应该试着让每个阶段的数据量变得更少,换句话说,如果你有两个要完成的步骤与先后次序无关,你可以
把让数据变少的那一个步骤放在管道的前面,这么做可以提高脚本的整体性能,应为此时系统只需要在两个程序中移动
少的数据量,每个程序要做的是也比较少。


 

原文地址:https://www.cnblogs.com/lnlin/p/6958761.html