注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

Linux系统中几种常用设备的介绍(/dev/null、/dev/zero、/dev/random以及/dev/urandom)  

来自李雪峰   2014-03-24 10:34:45|  分类: Linux相关 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
       在日常的后台测试中,经常会在一些诸如dd等操作中用到一些系统的设备类型,如/dev/zero、/dev/null等,接下来我们就将对这些设备类型的具体含义以及其适用场景进行一个简单的介绍,以便于大家在今后的测试工作中可以更好的对其进行了解和使用。

1、/dev/null(可以理解为系统的垃圾桶)

把 /dev/null 看作"黑洞", 它非常等价于一个只写文件, 所有写入它的内容都会永远丢失。而尝试从它那儿读取内容则什么也读不到。然而, /dev/null 对命令行和脚本都非常的有用。

用法1:禁止标准输出

cat $filename > /dev/null

解析:文件内容丢失,而不会输出到标准输出。


用法2:禁止标准错误   

rm $badname 2> /dev/null
解析:这样错误信息 [标准错误] 就被直接丢进垃圾桶了。


用法3:禁止标准输出和标准错误的输出   

cat $filename 2> /dev/null > /dev/null
解析: 如果"$filename"不存在,将不会有任何错误信息提示;
            如果"$filename"存在,文件的内容不会打印到标准输出;
因此Therefore, 上面的代码根本不会输出任何信息,当只想测试命令的退出码而不想有任何输出时非常有用。


用法4:自动清空某些文件内容

cat /dev/null > /var/log/wtmp
解析:自动清空日志文件的内容 (特别适合处理这些由商业Web站点发送的讨厌的"cookies")


--------------------------------------------------------------------------------

例:隐藏cookie而不再使用

if [ -f ~/.netscape/cookies ]  # 如果存在则删除.
then
    rm -f ~/.netscape/cookies
fi
ln -s /dev/null  ~/.netscape/cookies # 现在所有的cookies都会丢入黑洞而不会保存在磁盘上了。

备注:

/dev/null ------它是空设备,也称为位桶(bit bucket)。任何写入它的输出都会被抛弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。


2、/dev/zero(空文件)

      像 /dev/null 一样,/dev/zero也是一个伪文件,但它实际上产生连续不断的null的流(二进制的零流,而不是ASCII型的)。写入它的输出会丢失不见,而从/dev/zero读出一连串的null 也比较困难,虽然这也能通过od或一个十六进制编辑器来做到。/dev/zero主要的用处是用来创建一个指定长度用于初始化的空文件,就像临时交换文件。

例:dd一个20G大小的空间,不写入任何内容。

dd if=/dev/zero of=test.img bs=1G count=20

备注:

/dev/zero------该设备无穷尽地提供0,可以使用任何你需要的数目——设备提供的要多的多。他可以用于向设备或文件写入字符串0。


3、/dev/random以及/dev/urandom(linux系统中的随机数生成设备)


Linux中的随机数可以从两个特殊的文件中产生,一个是/dev/urandom.另外一个是/dev/random。

他们产生随机数的原理是利用 当前系统的熵池来计算出固定一定数量的随机比特,然后将这些比特作为字节流返回。熵池就是当前系统的环境噪音,熵指的是一个系统的混乱程度,系统噪音可以 通过很多参数来评估,如内存的使用,文件的使用量,不同类型的进程数量等等。如果当前环境噪音变化的不是很剧烈或者当前环境噪音很小,比如刚开机的时候, 而当前需要大量的随机比特,这时产生的随机数的随机效果就不是很好了。

这就是为什么会有/dev/urandom和/dev/random这两种不同的文件,后者在不能产生新的随机数时会阻塞程序,而前者不会 (ublock),当然产生的随机数效果就不太好了,这对加密解密这样的应用来说就不是一种很好的选择。/dev/random会阻塞当前的程序,直到根 据熵池产生新的随机字节之后才返回,所以使用/dev/random比使用/dev/urandom产生大量随机数的速度要慢。

举例:

[lxf@sg01 dd]$ dd if=/dev/random of=random.dat bs=1024b count=1

       0+1 records in 

       0+1 records out 

      128 bytes (128 B) copied, 0.000169 seconds, 757 kB/s

[lxf@sg01 dd]$ dd if=/dev/urandom of=random.dat bs=1024b count=1 

      1+0 records in 

      1+0 records out 

      524288 bytes (524 kB) copied, 0.091297 seconds, 5.7 MB/s

解析:

从上面的测试中,可以看到使用/dev/random产生随机数的速度很慢,而且产生的量很有限,当然,/dev/urandom的随机效果则好很多。

  评论这张
 
阅读(1319)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016