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系统过程中最常见的用法之一。

  • 相关阅读:
    ios UIWebView截获html并修改便签内容(转载)
    IOS获取系统时间 NSDate
    ios 把毫秒值转换成日期 NSDate
    iOS  如何判断当前网络连接状态  网络是否正常  网络是否可用
    IOS开发 xcode报错之has been modified since the precompiled header was built
    iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结
    iOS 切图使用 分辨率 使用 相关总结
    整合最优雅SSM框架:SpringMVC + Spring + MyBatis 基础
    Java面试之PO,VO,TO,QO,BO
    Notes模板说明
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3454604.html
Copyright © 2011-2022 走看看