linux入门之数据流重定向

作者: 和奇谷朴 | 来源:发表于2016-07-19 15:19 被阅读333次

    基本概念

    什么是数据流?

    • 定义:以规定顺序被读取一次的数据序列。最初在1998年由Henzinger在文献87中提出这个概念。
    • 类别分为三种:标准输入(stdin),标准输出(stdout)和标准错误输出(stderr)。
    • 标准输出: 指的是命令执行所回传的正确信息。
    • 标准错误输出:指的是命令执行失败后,所回传的错误信息。
    • 默认都是将信息打印在屏幕上的。

    如下表所示:

    文件描述符 设备文件 说明
    0 /dev/stdin 标准输入
    1 /dev/stdout 标准输出
    2 /dev/stderr 标准错误

    什么是重定向?什么是重定向描述符?

    • 重定向:重新定个方向转到正确位置。在之前linux入门系列文章中已经多次出现过>或>>操作了,并知道他们分别是将标准输出导向一个文件或追加到一个文件中。这其实就是重定向。
    • 重定向描述符: & 是一个描述符,若1或2前不加&,会被当成一个普通文件。
    • 常用的方法详见下表:
    表达式 含义
    1>&2 把标准输出重定向到标准错误
    2>&1 把标准错误输出重定向到标准输出
    &>filename 把标准输出和标准错误输出都重定向到文件filename 中

    什么是数据流重定向?

    改变数据流的标准流向,使之流向指定的文件或设备。


    本文重点

    介绍如何在Linux中利用shell把执行命令所回传的正确信息(标准输出信息)流向一个文件,而将所回传的错误信息(标准错误输出)流向别一个文件,并把这两个文件的信息保存下来,而在屏幕上不出现任何该命令执行所回传的信息。

    实例操作

    "实践出真知",还是让我们一起通过如下几个实验来深入理解上面的概念吧。

    1) 标准输出重定向

    重定向标准输出到文件,这是一个很实用的操作。详见如下实例:

    $ echo 'hello shiyanlou' > test.txt
    $ echo 'www.shiyanlou.com' >> test.txt
    $ cat  test.txt
    

    其中 ,“>”和“>>”分别是将标准输出导向一个文件或追加到一个文件中。
    “>” :相当于清空源文件内容,重新写入新的内容。
    “>>” :相当于保留源文件内容,在最后一行追加内容。
    如果源文件不存在,两者都会新建源文件。

    2)Cat输出重定向

    利用cat的连续输出(heredoc方式)重定向标准输出到一个文件

    $ cat 
    (按Ctrl+C退出)
    

    cat重定向到test.c文档,在heredoc里输入内容,然后使用end结束输入。其中“<< end ”指的是结束输入内容。

    操作实现如下:


    cat重定向cat重定向

    3)标准错误重定向

    将标准错误重定向同样是一个很实用的操作。可以将标准输出和标准错误分别重定向不同的两个文件,亦可以重定向到同一个文件。根据实际项目的需要,可自行判断。此处仅给出相关实例,供大家参考使用。

    • 重定向到两个文件
    $ pwd
    /home/shiyanlou/
    $ cd mybin
    $ back.sh   1>>/home/shiyanlou/Code/back.log 2>>/home/shiyanlou/Code/error.log
    

    将正常日志输出到back.log ;将错误日志输出到error.log。

    • 重定向到一个文件
    $ pwd
    /home/shiyanlou/
    $ cd mybin
    $ back.sh >>/home/shiyanlou/back.log  2>>&1 
    

    将正常日志和错误日志都输出到back.log 。

    4)巧用 /dev/null

    • /dev/null 或称空设备,是一个特殊的设备文件,它通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成。读取它则会立即得到一个EOF。
    # 清空一个日志文件 back.log
    $  cat /dev/null  > back.log  
    

    5)标准输入重定向

    • 这里用wall来广播一下之前编辑的autorun.log文件,
    # wall 0<  autorun.log
    

    意思就是将autorun.log中的文件内容广播出去,如下图广播效果。


    wall输入重定向wall输入重定向

    作业

    给大家来一个彩色的火焰,祝愿大家红红火火!


    红红火火红红火火

    友情提示

    我正在实验楼撸代码,你也快来!800+编程实战教程,无需搭环境,直接练习!用我的链接注册,你我都能获得3个实验豆!http://www.shiyanlou.com/register?inviter=NTY0MzE5MTkxNzAx


    感谢您花费时间阅读这篇文章!!通过上述讲解是不是让您对linux的数据流重定向的情况有了进一步的了解了呢?是的话请给个赞吧!

    相关文章

      网友评论

      本文标题:linux入门之数据流重定向

      本文链接:https://www.haomeiwen.com/subject/bdypjttx.html