• Linux IO重定向及管道


    一,标准输入输出:

        程序 : 指令+数据 

        程序 :IO

    可用于输入的设备:文件,键盘设备,文件系统上的常规文件,网卡等;

    可用于输出的设备:文件,显示器,文件系统上的常规文件,网卡等,

     

     

    程序的数据流有三种:

        输入的数据流:<--  标准输入(stdin),键盘

        输出的数据流: -->标准输出(stdout),显示器

        错误输出流:  -->错误输出(stderr), 显示器

    fd:file descriptor 文件描述符

    Linux 给程序提供三种I/O设备:

        标准输入(STDIN):0 默认接受来自键盘的输入 

        标准输出(STDOUT):1 默认输出到终端窗口 

        错误输出(STDERR):2 默认输出到终端窗口 


    IO重定向:改变默认位置

    STDOUT和STDERR 可以被重定向到文件,支持的操作符号包括:

        >   把STDOUT重定向到文件

        2>  把STDERR重定向到文件

        &>  把所有输出重定向到文件

     

    输出重定向:>

    特性:覆盖输出!(很危险)

    特殊设备: /dev/null    ##任何数据放到里面都会丢弃

    # set  -C (仅对当前shell有效)

       禁止覆盖输出已存在的对象

    ls /etc  > /tmp/out.txt    #强制覆盖输出 >|

     

    # set  +C

        关闭上述特性

     

    ls /etc  > /tmp/out.txt

    ls /etc  > /dev/sda           //可能会干掉你的硬盘数据


    输出重定向:>>

    特性:追加输出!

    错误输出流  

         2>   : 覆盖重定向错误输出数据流

         2>>  : 追加重定向错误输出数据流

    标准输出和错误输出各自重定向至不同位置

    COMMAND > /PATH/TO/FILE.OUT 2> /PATH/TO/ERRORFILE.OUT

    合并正常和错误输出流

        &> 覆盖重定向

        &>> 追加重定向 

    1. COMMAND > /path/to/file.out 2> &1 (顺序很重要) 
    2. COMMAND >> /path/to/file.out 2>> &1

     

       find /etc -name passwd 2> /dev/null

     

        ():合并多个程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt

         ls /etc  >> /tmp/out.txt  2>&1


    输入重定向  < :

       使用<来重定向标准输入

       某些命令能够接受从文件中导入的STDIN:

    tr 'a-z' 'A-Z' < /etc/issue     //该命令将issue文件中的小写字母全部转换为大写

     tr –d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符 

     

    文档终止词 <<

    使用 << 命令从键盘把多行重导向给STDIN,直到 终止词 位置的所有文本都发给STDIN


    tr命令:

    tr[OPTION]... SET1 [SET2]:把输入的数据当成字符,把set1的字符对位转换set2的字符

    tr  [a-z]  [A-Z] < /etc/issue       把/etc/issue中的所有字符转化为大写并输出到屏幕上

     

    1. tr  -d '[A-Z]' < /etc/issue   把/etc/issue 中的大写字母移除
    2. Here Document:  <<
    3. cat << EOF
    4. cat > /tmp/out.txt <<EOF

    命令参数

    • -c或——complerment:取字符集的补集 

    • -d或——delete:删除所有属于第一字符集的字符 

    • -s或—squeeze-repeats:把连续重复的字符以单独一个字符 表示 

    • -t或--truncate-set1:将第一个字符集对应字符转化为第二 字符集对应的字符

     


     

    管道:|   

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

        STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现 

     

        

             


    tee命令:

    命令1 | tee 文件名 | 命令2 

     把命令1的STDOUT保存在文件名中,然后管道输入给命令2 

     

    使用: 

        保存不同阶段的输出 

        复杂管道的故障排除 

        同时查看和记录输出

     

    因此可以定向到多个目标,比如要在屏幕显示,又要保存到磁盘,那么

    [root@localhost etc]# ls /etc/ | tee /tmp/out.txt | tr 'a-z' 'A-Z'

     

    将command结果输出到屏幕上,又保存了一份在磁盘上,由于tr名字在最后执行,因此结果如下

     

     


    实战训练

    1、将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中 

    cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out

     

    2、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中 

    who | tr 'a-z' 'A-Z' > /tmp/who.out

     

    3、一个linux用户给root发邮件,要求邮件标题为”help”,邮件正文如下: Hello, I am 用户名,the system version is here,please help me to  check it ,thanks! 操作系统版本信息 

    1. mail -s "help" root <<eof
    2. > Hello, I am $USER ,the system version is `cat /etc/centos-release`,please help me to  check it ,thanks!
    3. > eof

    4、将/root/下文件列表,显示成一行,并文件名之间用空格隔开

     ls /root/ | tr '\n' ' '

     

    5、file1文件的内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和 

    cat file1 | tr ' ' '+' | bc

     

    6、删除Windows文本文件中的'^M'字符 

    tr -d '\r' < 1.txt | tee 2.txt

        

    7、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格 

    echo $"xt.,l 1 jr#-limn2 c*/fe3 uz4" |  tr -d [:alpha:],[:punct:]

     

    8、将PATH变量每个目录显示在独立的一行 

    echo $PATH | tr ':' '\n

     

    9、删除指定文件的空行 

    cat lss | tr -s '\n'

     

    10、将文件中每个单词(字母)显示在独立的一行,并无空行

    cat lss |tr ' ' '\n'| tr -s '\n'

     

  • 相关阅读:
    JAVA经典面试题附答案(持续更新版)
    java集成WebSocket
    【vue设计与实现】组件的实现原理 5 - 插槽的工作原理与实现 & 注册生命周期
    20240603每日通信--------springboot使用netty-socketio集成即时通信WebSocket
    Java之多线程综合练习小题一
    【SQL Server】数据库开发指南(六)索引和视图的使用技巧、方法与综合应用
    对象创建的流程分析
    什么是零代码?零代码与低代码有什么联系与区别?
    ECE368 Programming Assignment 3
    Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第7章 Vue.js高级进阶 7.6 Vue计算属性
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126246861