Skip to content

Latest commit

 

History

History
131 lines (78 loc) · 3.59 KB

管道和重定向.md

File metadata and controls

131 lines (78 loc) · 3.59 KB

多命令协作:管道(pipeline)和重定向(redirect)

开源文化的核心理念就是不要重复发明轮子,很多开源软件都是现有软件、代码和功能的重新集合,就像通过零件组装机器一样,源代码的开放和共享让这成为可能,同时也大大提高了效率和生产力。

​ 在linux系统中,大多数命令都很简单,很少出现复杂功能的命令,每个命令往往只实现一个或几个简单的功能,我们可以通过将不同功能的命令组合在一起使用,以达到某个复杂功能的目地。linux中几乎所有命令的返回数据都是纯文本的(由于命令运行在CLI下),而纯文本形式的数据又是绝大部分命令的输入格式,这让多命令协作成为可能。

​ linux的命令行为为我们提供了管道和重定向机制,多命令协作就是通过管道和重定向完成的。

命令行中shell数据流

名称 说明 编号 默认
stdin 标准输入 0 键盘
stdout 标准输出 1 终端
stderr 标准错误 2 终端
  • 通过stdin接收参数或数据,
  • 通过stdout输出结果
  • 通过stderr输出错误

重定向(redirect)

重定向通常是用来保存某命令的输出信息或错误信息,可以用来记录执行结果或保存错误信息到一个制定文件。

image-20200621164915501

  • >

    将重定向到文件(rewrite)

    echo "alexchungio.com" > urlfile

    image-20200621171755087

    两次操作以后,文件的内容相同,只保留了最新一次操作的结果。

  • >>

    将stdout重定向到文件(append)

    echo "alexchungio.com" >> urlfile

    image-20200621172055185

    第二次使用追加操作,保留了两次操作的结果。

  • <

    重定向到STDIN

    grep .com < urlfile

    image-20200621172710077

  • 1>

    stdout重定向输出,等价于>

    sudo find / -group ssh 2> sshout

    image-20200621173904317

  • 2>

    stderr重定向到输出

    sudo find / -group ssh 2> ssherr

    image-20200621174036833

  • 2>&1

    重定向stderr到stdout,将错误日志添加到输出日志文件中

    sudo find / -group ssh >sshout 2>&1

    image-20200621175026734

  • 不显示错误信息

    sudo find / -group ssh
    sudo find / -group ssh 2>/dev/null

    image-20200621175642656

    通过将错误信息重定向到**/dev/null**目录实现,所有重定向到/dev/null目录的信息都会自动丢失掉

管道(pipeline)

管道通常用来组合不同的命令,以实现一个复杂的功能。

  • |

    将一个命令的stdout作为另一个命令的stdin

    sudo find / -user alex | grep ResNet101
    

    image-20200621180755247

    或者丢弃错误信息

    sudo find / -user alex 2> /dev/null | grep ResNet101
    

    image-20200621180923343

参考资料

参考资料一

参考资料二

参考资料三