zoukankan      html  css  js  c++  java
  • 管道和输入输出

    1、管道

    (1)管道使用“|”作为操作符,这个符号通常位于键盘上的Enter或者退格键BackSpace附近。管道的格式为:

    #command1 | command2 | command3 ...

    系统执行上面的命令时,会先执行命令command1,并通过管道将command1的输出结果交给命令command2处理.然后再将command2的结果传给下一个命令command3,这样一直将结果传递下去,直到最后一个命令.在这个过程中,管道后面的命令总是使用管道前面的命令输出作为命令的输入.

    (2)许多时候需要在某个命令的输出中筛选结果,这是管道最常见的用法之一。例如查看系统中是否已经安装了gcc编译器软件包:

    [root@localhost ~]# rpm -aq | grep gcc
    gcc-c++-4.1.2-14.el5
    libgcc-4.1.2-14.el5
    gcc-4.1.2-14.el5
    gcc-gfortran-4.1.2-14.el5

    上面这条命令中,先使用命令rpm -aq输出系统中已安装的所有软件包,然后利用管道将结果传递给下一条命令grep gcc。后者将从已安装的软件包列表中筛选出名称中含有gcc的行并输出。

    (3)管道的另一个常见的用法是辅助处理命令输出。

    2、命令的输入、输出和错误

    标准输入(默认为键盘):文件描述符为0

    标准输出(默认为显示器):文件描述符为1

    标准错误输出(默认为显示器):文件描述符为2

    3、重定向命令的输入、输出和错误

    (1)输出重定向

    >   :覆盖式写入

    >> :追加式写入

    提示:如果要向系统配置文件(特别是/etc目录中的文件)添加内容,通常应该使用追加的方式,以免损坏系统。

    (2)输入重定向

    <   :大多时候输入重定向使用的是一个文件

    << :这个操作符被形象地称为here document(这儿文档),下面以一个示例进行讲解

    [root@localhost ~]# cat <<END
    > This is the first line.
    > This is the second line.
    > This is the last line.
    > END
    This is the first line.
    This is the second line.
    This is the last line.

    在上面这条命令中,cat命令用于输出文本,<<操作符后面的END指示了结束输入的标记。按Enter键之后用户就可以开始输入文本,直到输入的字符为END时,输入过程才会结束。

    (3)错误重定向

    执行一个命令时可能会有很多输出,由于命令的输出信息和错误信息混合在一起,可能无法看到错误的信息,这时可以将标准错误重定向到文件中,以便于用户查看。例如将错误信息重定向到文件error中:

    [root@localhost ~]# ls
    anaconda-ks.cfg  Desktop  install.log  install.log.syslog
    [root@localhost ~]# rm abcd 2>error
    [root@localhost ~]# ls
    anaconda-ks.cfg  Desktop  error  install.log  install.log.syslog
    [root@localhost ~]# cat error
    rm: cannot lstat `abcd': No such file or directory

    默认情况下,重定向符“<”和“>”表示重定向输入和输出,因此在重定向错误时必须使用“2>”明确表示将标准错误进行重定向。

    技巧:当我们不想看到错误信息时(例如在系统启动脚本中运行某个命令可能会产生错误),可以将错误信息重定向到系统垃圾池/dev/null。

    有时某条命令会产生很多条错误,为了不让后一条错误信息覆盖前面记录的文本,此时应该使用“2>>”将错误追加到文件最后。

    (4)输出和错误同时重定向

    可以使用“2>&1”或者“&>”

    [root@localhost ~]# ping 192.168.1.1 -c3 > /dev/null 2>&1
    
    [root@localhost ~]# ping 192.168.1.1 -c3 &>/dev/null

    技巧:制作系统监控脚本、自动任务脚本时,经常需要将可预见的命令输出和错误重定向到系统垃圾池中。这样做的目的是避免产生的输出、错误干扰用户正在进行的工作。

    也可以同时重定向命令的输入和输出,例如:

    [root@localhost ~]# sed '1,300d' <netstat.txt >netstat_1

    将命令的输出和错误同时重定向是管理和维护Linux系统过程中最常见的用法之一。

  • 相关阅读:
    王妃
    某个奇怪的引理 学习总结
    多项式求ln,求exp,开方,快速幂 学习总结
    第二类斯特林数 学习总结
    cojs QAQ的图论题 题解报告
    cojs QAQ的序列 解题报告
    QAQ OI生涯の最后一个月
    cojs 疯狂的字符串 题解报告
    【51Nod 1238】最小公倍数之和 V3
    【51Nod 1190】最小公倍数之和 V2
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3454604.html
Copyright © 2011-2022 走看看