Linux中/dev/null和/dev/zero两个文件的做用和区别

咱们在rhce课程中,多处遇到/dev/null,/dev/zero, 好比mysql

find / -name passwd 2>/dev/nulllinux

sha1sum /dev/zero &sql

,那么,这二者究竟是什么意思呢?windows

我引用了网上的资料,或许对你们有用.dom

 

 

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

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

[root@dbserver ~]# ls -l/dev/null /dev/zero操作系统

crw-rw-rw-. 1 root root 1, 3Jul 15 00:11 /dev/nullunix

crw-rw-rw-. 1 root root 1, 5Jul 15 00:11 /dev/zeroserver

提示:从文件属性能够看出这两个文件都是字符设备文件。

一、/dev/null

1)/dev/null介绍

你们都知道宇宙中“太阳黑洞”吧,全部的天体(含地球)一旦进入了太阳黑洞都会消失的无影无踪。这里的/dev/null就是Linux系统中的"黑洞"。

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

2)/dev/null实践

范例1-1:清空文件。

[root@dbserver ~]# cp/etc/hosts{,.ori} #<==备份。

[root@dbserver ~]# cat /dev/null>/etc/hosts #<==将读取黑洞设备写入到/etc/hosts,表示清空hosts文件。

[root@dbserver ~]# cat/etc/hosts #<==果真没了。使用上述备份恢复回来。

范例1-2:将无用的输出流写入到黑洞丢弃。

当取一个地址响应头的第一行时,加上管道就会出现下面的特殊结果:

[root@dbserver ~]# curl -Iwww.cqsztech.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

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

[root@dbserver ~]# curl -Iwww.cqsztech.com 2>/dev/null|head -1 #<==将错误信息定向到黑洞。

HTTP/1.1 200 OK

固然了curl命令也提供了实现参数,这里暂且很少表。

[root@dbserver ~]# curl -I -s www.cqsztech.com|head-1

HTTP/1.1 200 OK

范例1-3:将定时任务脚本结尾加上>/dev/null 2>&1

在书写定时任务总,规范的写法就是将全部定时任务脚本结尾加上>/dev/null 2>&1,让全部的输出流(包括错误的和正确的)都定向到空设备丢弃。

[root@dbserver ~]# crontab -l

#time sync by sztech at2010-2-1

*/5 * * * * /usr/sbin/ntpdatetime.windows.com >/dev/null 2>&1

#bak all db

00 01 * * * /bin/sh/server/scripts/mysqlbak.sh >/dev/null 2>&1

二、/dev/zero

1) /dev/zero介绍

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

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

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

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

2)/dev/zero实践

范例1-5:产生指定大小的空文件。

[root@dbserver ~]# dd if=/dev/zeroof=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@dbserver ~]# ls -lhtest.data

-rw-r--r--. 1 root root 2.0MJul 15 20:20 test.data #<==一共2M大小。

[root@dbserver ~]# filetest.data

test.data: data #<==特殊的数据文件格式。

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

范例1-4:利用/dev/zero文件覆盖其余文件信息

[root@dbserver ~]# echo sztech>new.txt #<==生成一个新文件写入sztech字符串。

[root@dbserver ~]# dd if=/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@dbserver ~]# cat new.txt #<==数据丢失了。

相关文章
相关标签/搜索