当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 请解释Linux中/dev/null和/dev/zero两个文件的作用和区别。
帖子发表于 : 2017-11-02 18:14 

注册: 2017-11-02 18:09
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
在类Unix操作系统中,设备节点并不一定要对应物理设备。没有这种对应关系的设备被称之为伪设备。操作系统运用了它们实现多种多样的功能,/dev/null和/dev/zero就是这样的设备,类似的还有/dev/urandom、/dev/tty等。

先检查下/dev/null和/dev/zero两个文件的属性:
[root@oldboy ~]# ls -l/dev/null /dev/zero
crw-rw-rw-. 1 root root 1, 3Jul 15 00:11 /dev/null
crw-rw-rw-. 1 root root 1, 5Jul 15 00:11 /dev/zero
提示:从文件属性可以看出这两个文件都是字符设备文件。
/dev/null
/dev/null介绍
大家都知道宇宙中“太阳黑洞”吧,所有的天体(含地球)一旦进入了太阳黑洞都会消失的无影无踪。这里的/dev/null就是Linux系统中的"黑洞"。

在类Unix系统中,/dev/null(空设备文件或黑洞文件)是一个特殊的设备文件,所有写入其中的数据,都会被丢弃的无影无踪,/dev/null通常被用于丢弃不需要的数据输出,或作为用于输入流的空文件。这些操作通常由重定向完成。
/dev/null实践
范例1-1:清空文件
[root@oldboy ~]# cp/etc/hosts{,.ori}#<==备份。
[root@oldboy ~]# cat /dev/null>/etc/hosts#<==将读取黑洞设备写入到/etc/hosts,表示清空hosts文件。
[root@oldboy ~]# cat/etc/hosts#<==果然没了。使用上述备份恢复回来。
范例1-2:将无用的输出流写入到黑洞丢弃。
当取一个地址响应头的第一行时,加上管道就会出现下面的特殊结果:
[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
执行上述命令时,会凭空多出来的几行无用信息,此时就可以使用将错误信息定向到黑洞(2>/dev/null)的方式丢弃无用信息。
[root@oldboy ~]# curl -Iwww.oldboyedu.com 2>/dev/null|head -1 #<==将错误信息定向到黑洞。
HTTP/1.1 200 OK
当然了curl命令也提供了实现参数,这里暂且不多表。
[root@oldboy ~]# curl -I -s www.oldboyedu.com|head-1
HTTP/1.1 200 OK
范例1-3:将定时任务脚本结尾加上>/dev/null 2>&1
在书写定时任务总,规范的写法就是将所有定时任务脚本结尾加上>/dev/null 2>&1,让所有的输出流(包括错误的和正确的)都定向到空设备丢弃。
[root@oldboy ~]# crontab -l
#time sync by oldboy 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
和/dev/null类似,/dev/zero也是一个特殊的字符设备文件,当我们使用或读取它的时候,它会提供无限连续不断的空的数据流(特殊的数据格式流)。
/dev/zero文件的常见应用场景有二:
a./dev/zero文件覆盖其他文件信息。
b.产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。
/dev/zero实践
范例1-5:产生指定大小的空文件。
[root@oldboy ~]# 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@oldboy ~]# ls -lhtest.data
-rw-r--r--. 1 root root 2.0MJul 15 20:20 test.data #<==一共2M大小。
[root@oldboy ~]# filetest.data
test.data: data #<==特殊的数据文件格式。
提示:在使用dd命令产生空文件时常用/dev/zero作为字符流的源。
范例1-4:利用/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


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 请解释Linux中/dev/null和/dev/zero两个文件的作用和区别。
帖子发表于 : 2017-11-08 13:29 
头像

注册: 2007-07-14 20:45
帖子: 1066
送出感谢: 56
接收感谢: 25
这个文章好,只是需要将标题的请解释三字删掉


_________________
开源、共享、自由

微信号:xfiles_sky

irc:chat.freenode.net/+6697
/join #ubuntu.com.cn


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译