码迷,mamicode.com
首页 > 其他好文 > 详细

重定向和管道

时间:2016-08-01 23:05:15      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:重定向   管道   

  1. 重定向:

    标准输入和输出

        程序=指令+数据

        输出数据:Output

        打开的文件都有一个fd:file descriptor(文件描述符)

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

            标准输入(STDIN-0 默认接收来自键盘的输入

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

            标准错误(STDERR-2 默认输出到终端窗口

                 I/O重定向:改变默认位置

 

        把输出和错误重定向到文件

                 STDOUTSTDERR可以重定向到文件:

        支持的操作符号包括:

                          > STDOUT重定向到文件

                          2> STDERR重定向到文件

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

                  > 文件内容会被覆盖

                          #set  -C :禁止将内容覆盖已有文件,但可以追加

                                   强制覆盖:>|

                          #set +C:允许覆盖

                  >> 原有内容基础上,追加新的内容

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

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

                  标准输出和错误输出各自定向到不同位置:

                          COMMAND > /path/to/file.out 2> /path/to/error.out

 

                  合并标准输出和错误输出为同一个数据流进行重定向

                          &>:覆盖重定向

                          &>:追加重定向

                          COMMAND > /path/to/file.out 2>&1

                          COMMAND > /path/to/file.out 2>>&1

                                   find /etc –name passwd 2>/dev/null(结果直接丢给黑洞)

                          ():合并多个程序的STDOUT

                                   (cal 2007cal2008) > all.txt

                 

从文件中导入STDIN

         使用<来重定向标准输入

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

                  $ tr ‘a-z’ ‘A-Z’ < /etc/issue

                  这个命令会把/etc/issue中的小写字符都转换为大写字符

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

         #cat > filea <fileb 使用文件代替键盘的输入

 

2.管道:

管道(使用符号“|”表示)用来连接命令

命令1|命令2|命令3|…

         将命令1STDOUT发送给命令2STDIN,命令2STDOUT发送给命令3

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

         最后一个命令会在当前shell进程的子shell中执行输出

         组合多种工具的功能

                  ls | tr ‘a-z’ ‘A-Z’

less:一页一页地查看输入:

         $ ls –l |/etc/less

Mail: 通过电子邮件发送输入:

         $ echo “test mail” | mail –s “test” user@example.com

Lpr:把输入发送给打印机:

         $ echo “test print ” | lpr –P print_name

 

3.重定向到多个目标(tee

    a)       $命令1|tee 文件名 |命令2

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

    c)        使用

        i.            保存不同阶段的删除

        ii.            复杂管道的故障排除

        iii.            同时查看和记录输出

 

本文出自 “11880696” 博客,谢绝转载!

重定向和管道

标签:重定向   管道   

原文地址:http://11890696.blog.51cto.com/11880696/1833202

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!