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

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

[root@localhost ~]# ll /dev/null /dev/zero
crw-rw-rw- 1 root root 1, 3 Nov 10 05:39 /dev/null
crw-rw-rw- 1 root root 1, 5 Nov 10 05:39 /dev/zero

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

1. /dev/null

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

清空文件:

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

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

[root@localhost ~]# curl www.baidu.com -I | head -1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 277 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
HTTP/1.1 200 OK
执行上述命令时,会凭空多出来几行无用信息,此时就可以将错误信息定向到/dev/null,以此来丢弃无用信息。
[root@localhost ~]# curl www.baidu.com -I 2> /dev/null | head -1
HTTP/1.1 200 OK

2./dev/zero

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

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

a./dev/zero文件覆盖其他文件信息。

b.产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。

产生指定大小的空文件:

[root@localhost ~]# 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.0902584 s, 23.2 MB/s
[root@localhost ~]# ll -h /test.data
-rw-r--r-- 1 root root 2.0M Nov 11 14:34 /test.data #<==一共2M大小。
[root@localhost ~]# file /test.data
/test.data: data #<==特殊的数据文件格式。

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

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

[root@localhost ~]# echo abcde > test.txt  #<==生成一个新文件写入abcde字符串。
[root@localhost ~]# dd if=/dev/zero of=test.txt bs=1M count=10 #<==用空的字符流覆盖存在的test.txt文件。
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.056705 s, 185 MB/s
[root@localhost ~]# cat test.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主要的用处是用来创建一个指定长度用于初始化的空文件,像临时交换文件。

linux 中 /dev/null和/dev/zero的作用以及区别的更多相关文章

  1. linux中Shell标准输出错误 >/dev/null 2>&1 分析【转】

    Shell中可能经常能看到:>/dev/null  2>&1 eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print ...

  2. Linux基础教程之/dev/null和/dev/zero的区别及其用法

    在Linux操作系统中/dev/null和/dev/zero是两个相似却又很特殊的文件,特别是在shell脚本开发和系统运维过程中会经常用这两个文件,因此作为Linux系统工程师,必须了解这两个文件的 ...

  3. Linux 下的两个特殊的文件 -- /dev/null 和 /dev/zero 简介及对比

    1.概论 -- 来自维基的解释 /dev/null  : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一 ...

  4. Shell中的>/dev/null 2>&1 与 2>&1 >/dev/null 与&>/dev/null 的区别

    默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入).标准输出(输出到屏幕).标准错误(也是输出到屏幕),它们分别对应的文件描述符是0,1,2 .那么我们来看看下面的几种重定向方法的区别: & ...

  5. 【linux】/dev/null与/dev/zero详解【转】

    转自:http://www.cnblogs.com/xianghang123/archive/2012/03/23/2413381.html 使用/dev/null 把/dev/null 看作&quo ...

  6. 特殊文件: /dev/null和/dev/tty

    转自:http://www.cnblogs.com/stephen-liu74/archive/2011/11/10/2240461.html Linux系统提供了两个对Shell编程非常有用的特殊文 ...

  7. dev/null和dev/zero区别 以及换回设备(loopback device)

    转自:http://blog.chinaunix.net/uid-20729677-id-765105.html dev/zero,是一个输入设备,你可你用它来初始化文件. /dev/zero---- ...

  8. centos 阶段复习 2015-4-6 dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史 /dev/zero 零发生器 /dev/null 黑洞 /dev/random 生成随机数 第十一节课

    centos 阶段复习 2015-4-6  dd命令 hosts.allow和hosts.deny 啊铭的myssh脚本 清空history命令历史  /dev/zero 零发生器  /dev/nul ...

  9. /dev/null和/dev/zero的作用

    经常会看到dd命令用到/dev/zero文件,这里总结一下/dev/null和/dev/zero的作用和使用实例. 在类Unix系统(包括Linux)中,/dev/null 它是空设备,也称为位桶(b ...

随机推荐

  1. 实际工程中加快 Java 代码编写的小提示

    这里我简单谈谈 Java 语法在编程效率方面的弱势,以及如何补救. 一.集合的快速创建 C# 是少数拥有集合字面值(又叫初始化表达式)的静态语言之一. var list = new List<i ...

  2. JAVA中获取不同系统的换行符和获取系统路径路径分割符

    简介 JAVA具有多平台特征,一次开发,多平台运行,主要依据JVM,但是不同的操作系统中换行符和分割符不同,故需要根据不同的操作系统去获取不同的符号. JAVA代码 @Test public void ...

  3. docker的使用 (2)

    使用Docker 想要玩转Docker,最简单的办法就是马上用Docker创建一些自己学习和工作中需要用到的容器,下面我们带着大家一起来创建这些容器. 运行Nginx Nginx是高性能的Web服务器 ...

  4. 简单实现UITableView索引功能(中英文首字母索引) (二) By HL

    简单实现UITableView索引功能(中英文首字母索引)(一) ByH罗 相关类: NSString+PinYing(获取中英文首字母)   参考上面链接 #import "ViewCon ...

  5. 有序取出Map集合的元素

    最近写到一个程序,返回了map,但是经过查阅资料,map是没有顺序的,各种查阅资料无果,最后自己写了这个方法.. 1,通过map集合的keySet()方法,获取到一个包含map所有key的Set集合 ...

  6. 适用于小白:VSCode搭建Vue项目,最详细的搭建步骤哦

    在vscode上搭建一个vue项目---初学总结. 1.假设Vscode.nodejs等已经安装好了. 2.全局安装vue-cli,vue-cli可以帮助我们快速构建Vue项目. 安装命令: npm ...

  7. Solution -「ZJOI 2013」「洛谷 P3337」防守战线

    \(\mathcal{Description}\)   Link.   有 \(n\) 个位置,从左至右编号 \(1\sim n\).在第 \(i\) 个位置放一座塔的代价为 \(c_i\),一个位置 ...

  8. Solution -「洛谷 P5827」边双连通图计数

    \(\mathcal{Description}\)   link.   求包含 \(n\) 个点的边双连通图的个数.   \(n\le10^5\). \(\mathcal{Solution}\)    ...

  9. Solution -「JOISC 2019」「LOJ #3036」指定城市

    \(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个结点的树,双向边权不相同.\(q\) 次询问,每次询问在树上标记 \(e\) 个点,标记的价值为所有趋 ...

  10. python 2048游戏控制器

    2048游戏控制器 1 evaluate 要用程序来处理就得对现实的问题进行量化,用数字来表示.在2048游戏中,我们的输入是一个棋局,让我们输出一个移动方向,这样我们需要对棋局进行量化,即我们要评估 ...