• 【Linux】数据流重导向(后篇)


      1)/dev/null 垃圾桶黑洞装置与特殊写法

      想象一下,如果我知道错误信息会发生,所以要将错误信息忽略掉而不显示或储存呢? 这个时候黑洞装置 /dev/null 就很重要了!这个 /dev/null 可以吃掉任何导向这个装置的信息喔!将上述的范例修订一下:

    范例四:承范例三,将错误的数据丢弃,屏幕上显示正确的数据
    [dmtsai@www ~]$ find /home -name .bashrc 2> /dev/null
    /home/dmtsai/.bashrc  <==只有 stdout 会显示到屏幕上, stderr 被丢弃了

      再想象一下,如果我要将正确与错误数据通通写入同一个文件去呢?这个时候就得要使用特殊的写法了! 我们同样用底下的案例来说明:

    范例五:将命令的数据全部写入名为 list 的文件中
    [dmtsai@www ~]$ find /home -name .bashrc > list 2> list  <==错误
    [dmtsai@www ~]$ find /home -name .bashrc > list 2>&1     <==正确
    [dmtsai@www ~]$ find /home -name .bashrc &> list         <==正确

      上述表格第一行错误的原因是,由于两股数据同时写入一个文件,又没有使用特殊的语法, 此时两股数据可能会交叉写入该文件内,造成次序的错乱。所以虽然最终 list 文件还是会产生,但是里面的数据排列就会怪怪的,而不是原本屏幕上的输出排序。 至于写入同一个文件的特殊语法如上表所示,你可以使用 2>&1 也可以使用 &> ! 

      2)standard input : < 与 <<

      了解了 stderr 与 stdout 后,那么那个 < 又是什么呀?呵呵!以最简单的说法来说, 那就是『将原本需要由键盘输入的数据,改由文件内容来取代』的意思。 我们先由底下的 cat 命令操作来了解一下什么叫做『键盘输入』吧!

    范例六:利用 cat 命令来创建一个文件的简单流程
    [root@www ~]# cat > catfile
    testing
    cat file test
    <==这里按下 [ctrl]+d 来离开
    
    [root@www ~]# cat catfile
    testing
    cat file test

      由于加入 > 在 cat 后,所以那个 catfile 会被主动的创建,而内容就是刚刚键盘上面输入的那两行数据了。 唔!那我能不能用纯文本文件取代键盘的输入,也就是说,用某个文件的内容来取代键盘的敲击呢? 可以的!如下所示:

    范例七:用 stdin 取代键盘的输入以创建新文件的简单流程
    [root@www ~]# cat > catfile < ~/.bashrc
    [root@www ~]# ll catfile ~/.bashrc
    -rw-r--r-- 1 root root 194 Sep 26 13:36 /root/.bashrc
    -rw-r--r-- 1 root root 194 Feb  6 18:29 catfile
    # 注意看,这两个文件的大小会一模一样!几乎像是使用 cp 来复制一般!

      这东西非常的有帮助!尤其是用在类似 mail 这种命令的使用上。 理解 < 之后,再来则是怪可怕一把的 << 这个连续两个小于的符号了。 他代表的是『结束的输入字符』的意思!举例来讲:『我要用 cat 直接将输入的信息输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束』,那我可以这样做:

    [root@www ~]# cat > catfile << "eof"
    > This is a test.
    > OK now stop
    > eof  <==输入这关键词,立刻就结束而不需要输入 [ctrl]+d
    
    [root@www ~]# cat catfile
    This is a test.
    OK now stop     <==只有这两行,不会存在关键词那一行!

      看到了吗?利用 << 右侧的控制字符,我们可以终止一次输入, 而不必输入 [crtl]+d 来结束哩!这对程序写作很有帮助喔!好了,那么为何要使用命令输出重导向呢?我们来说一说吧!

    • 屏幕输出的信息很重要,而且我们需要将他存下来的时候;
    • 背景运行中的程序,不希望他干扰屏幕正常的输出结果时;
    • 一些系统的例行命令 (例如写在 /etc/crontab 中的文件) 的运行结果,希望他可以存下来时;
    • 一些运行命令的可能已知错误信息时,想以『 2> /dev/null 』将他丢掉时;
    • 错误信息与正确信息需要分别输出时。

      当然还有很多的功能的,最简单的就是常常问到的:『为何我的 root 都会收到系统 crontab 寄来的错误信息呢』这个咚咚是常见的错误, 而如果我们已经知道这个错误信息是可以忽略的时候,嗯!『 2> errorfile 』这个功能就很重要了吧! 了解了吗?

      参考资料:http://vbird.dic.ksu.edu.tw/linux_basic/0320bash.php#redirect

  • 相关阅读:
    面试题3
    面试题2
    (原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻
    (原)python爬虫入门(1)---爬取辽宁科技大学相关新闻
    Classic Abstract Data Types--C
    面试题1
    (原)----2叉查找树 in C
    《 Trees and Graphs》----CCI_Q4.6
    EasyUI 弹出window子页面,选中某条数据回调给父页面并关闭子页面
    跨域问题解决
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3726421.html
Copyright © 2020-2023  润新知