zoukankan      html  css  js  c++  java
  • 重定向和管道

    重定向和管道

    目录

    1.标准输入输出
    2.重定向
    3.管道
    4.重定向到多个目标

    这里先说下与重定向和管道密切相关的一个内容,那就是标准输入输出。

    1.标准输入和输出

    linux中给出了三种有关设备:

    标准输入:stdin ,由0表示,默认接受来自键盘的输入
    标准输出:stdout,由1表示,默认输出到终端窗口
    标准错误:stderr,由2表示,默认输出到终端窗口

    stdout就是输出正确的信息,stderr就是输出的错误提示信息。
    重定向和管道就是为了重定向这些输入和输出的。

    2.重定向

    重定向有多种形式,可以重定向输出到文件,可以重定向输出到下个命令,可以重定向输入到命令来被使用。

    1)重定输出向到文件

    >:把stdout重定向到文件,文件内容会被覆盖
    >>:把stdout重定向到文件,文件内容不会被覆盖,而是在原有基础上追加内容
    2>:把stderr重定向到文件,进行覆盖。
    2>>:把stderr重定向到文件,进行追加。
    &>or >& or 2>&1:把stdout和stderr作为同一个数据流重定向到文件
    &>>:把stdout和stderr就是进行重定向追加了
    (程序命令;程序命令;...):配合上述格式,可以合并多个程序命令的stdout和stderr来覆盖或追加

    为了防止误操作来把文件给覆盖掉,造成数据丢失,可以通过set 命令来禁止和允许>的覆盖操作:

    set -C:禁止将内容覆盖
    set +C:允许覆盖

    注意:stdout和stderr分开输出到不同文件时,必须是stdout在前,stderr在后,也就是2>2>>2>&1都需要在正确输出的后面。
    具体的写法如下:

    command > /path/to/file.out 2> /path/to/error.out
    command >> /path/to/file.all.out 2>>/path/to/error.out
    command > /path/to/file.all.out 2>&1 == command &> /path/to/file.all.out == command >& /path/to/file.all.out

    2)重定向输入到命令

    使用 <来重定向文件导向给stdin。
    某些命令能够接收从文件中导入的stdin
    例如:

    使用<<终止词来重定向从键盘上输入的多行内容导向给stdin。
    直到终止词位置的所有文件都发送给stdin。

    3.管道

    管道符号“|”用来连接命令:

    command 1 | command 2 | command 3 | ...
    上述是将command 1的stdout 发送给command 2的stdin,command 2 的stdout 发送给command 3的stdin,最后command 3的会在当前shell进程的子shell进程中执行出来。
    系统默认不支持stderr进行管道转发,但可以利用2>&1|& 来实现。
    例如:

    管道中的-符号的用法:
    tar -cvf - /home |tar -xvf -
    这条命令是将/home里的文件打包,但打包的数据没有记录到某个文件,而是直接传送到stdout,经过管道后,将打包的数据送给tar -xvf 来执行,后面的这个-就是取的前面的stdout,这样就不需要使用临时的文件了。

    4.重定向到多个目标:tee

    tee命令可以用到管道中,来保存管道不同阶段的输出,可以用于复杂管道的故障排除,同时查看和记录阶段输出。

    tee - read from standard input and write to standard output and files
    tee [OPTION]... [FILE]...
    -a, --append:追加数据到文件
    -i, --ignore-interrupts : 忽略中断符号

    例如:
    command 1 | tee -a file | command 2
    把command 1的stdout保存到file中,并且再作为command 2的stdin

  • 相关阅读:
    去哪儿爬虫加数据分析可视化
    go语言使用xpath
    python操作redis命令
    quart-process_bar
    刷交通的沃尔玛卡了,准备去刷1000元,10万积分姿势
    安卓手机安装虚拟定位的方法Xposed安装器+模拟位置(Xposed模块)
    OSPF里几个特殊区域(stub、Totally stubby、NSSA、Totally NSSA)总结
    OSPF两种组播地址的区别和联系
    ros建立ospf邻居的条件
    我国法定报告的传染病分为几类?包括哪些传染病?
  • 原文地址:https://www.cnblogs.com/shenxm/p/7616198.html
Copyright © 2011-2022 走看看