zoukankan      html  css  js  c++  java
  • 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

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


     

  • 相关阅读:
    Redis面试总结
    文件上传文件的权限lnmp 环境配置,尤其整个项目复制过来
    linux cat /etc/passwd 说明
    php上传文件与图片到七牛的实例详解
    一起谈.NET技术,参数编码 完全解决方案 狼人:
    一起谈.NET技术,在.NET中使用域对象持续模式 狼人:
    一起谈.NET技术,从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势 狼人:
    一起谈.NET技术,从扩展方法到流畅的程序体验(一) 狼人:
    一起谈.NET技术,构建高性能ASP.NET站点之一 剖析页面的处理过程(前端) 狼人:
    一起谈.NET技术,ASP.NET MVC 2 验证消息本地化策略扩展 狼人:
  • 原文地址:https://www.cnblogs.com/lnlin/p/6958761.html
Copyright © 2011-2022 走看看