zoukankan      html  css  js  c++  java
  • 《Ubuntu — /dev/null和/dev/zero的作用以及区别》

      在类Unix操作系统中,设备节点并不一定要对应物理设备。没有这种对应关系的设备被称之为伪设备。操作系统运用了它们实现多种多样的功能,/dev/null和/dev/zero就是这样的设备,类似的还有/dev/urandom、/dev/tty等。

      先检查下/dev/null和/dev/zero两个文件的属性:

      

       可以看出这两个文件是字符设备文件。

    1. /dev/null

      在类Unix系统中,/dev/null(空设备文件或黑洞文件)是一个特殊的设备文件,所有写入其中的数据,都会被丢弃的无影无踪,/dev/null通常被用于丢弃不需要的数据输出,或作为用于输入流的空文件。这些操作通常由重定向完成。

    清空文件:

    cat /dev/null>/etc/hosts     将从/dev/null读取到的数据写入到/etc/hosts,表示清空hosts文件。
    cat/etc/hosts                就没有数据了

    将无用的输出流写入到/dev/null丢弃:

    [root@oldboy ~]# curl -Iwww.oldboyedu.com|head -1
    % Total % Received % Xferd AverageSpeed Time Time Time Current
    Dload Upload Total Spent Left Speed
    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
    HTTP/1.1 200 OK

      执行上述命令时,会凭空多出来的几行无用信息,此时就可以使用将错误信息定向到/dev/null的方式丢弃无用信息。

    [root@oldboy ~]# curl -Iwww.oldboyedu.com 2>/dev/null|head -1
    HTTP/1.1 200 OK

    2./dev/zero

      和/dev/null类似,/dev/zero也是一个特殊的字符设备文件,当我们使用或读取它的时候,它会提供无限连续不断的空的数据流(特殊的数据格式流)。

    /dev/zero文件的常见应用场景有二:

      a./dev/zero文件覆盖其他文件信息。
      b.产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。

    产生指定大小的空文件:

    root@oldboy ~]# dd if=/dev/zero of=test.data bs=1M count=2 #<==生成块大小1M,含有2个块的文件。
    2+0 records in
    2+0 records out
    2097152 bytes (2.1 MB) copied,0.00279345 s, 751 MB/s

    [root@oldboy ~]# ls -lh test.data
    -rw-r--r--. 1 root root 2.0MJul 15 20:20 test.data #<==一共2M大小。

    [root@oldboy ~]# file test.data
    test.data: data #<==特殊的数据文件格式。

      提示:在使用dd命令产生空文件时常用/dev/zero作为字符流的源。

    利用/dev/zero文件覆盖其他文件信息:

    [root@oldboy ~]# echo oldboy > new.txt     #<==生成一个新文件写入oldboy字符串。
    [root@oldboy ~]# ddif=/dev/zero of=new.txt bs=1M count=10    #<==用空的字符流覆盖存在的new.txt文件。
    10+0 records in
    10+0 records out
    10485760 bytes (10 MB) copied,0.0475368 s, 221 MB/s

    [root@oldboy ~]# cat new.txt #<==数据丢失了。

    3./dev/null和/dev/zero的区别

      /dev/null  : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。
      在程序员行话,尤其是Unix行话中,/dev/null 被称为位桶(bit bucket)或者黑洞(black hole)。空设备通常被用于丢弃不需要的输出流,或作为用于输入流的空文件。当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。

      /dev/zero也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。写入它的输出会丢失不见,/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,像临时交换文件。

  • 相关阅读:
    javac不是内部或外部命令在win10上的解决方案
    HDU 6191 Query on A Tree(字典树+离线)
    hihoCoder #1558 : H国的身份证号码I
    HDU 6154 CaoHaha's staff(2017中国大学生程序设计竞赛
    湖南省第十二届省赛:Parenthesis
    POJ 3260 The Fewest Coins(完全背包+多重背包=混合背包)
    HDU 2923 Relocation(状压dp+01背包)
    HDU 2546 饭卡(01背包)
    HDU 1247 Hat’s Words(字典树)
    HDU 1711 Number Sequence(KMP)附带KMP的详解
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/12534594.html
Copyright © 2011-2022 走看看