使用/dev/null

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

禁止标准输出 .

   1 cat $filename >/dev/null2 # 文件内容丢失,而不会输出到标准输出.

禁止标准错误 (来自例 子 12-3 ).

   1 rm $badname 2>/dev/null2 #           这样错误信息[标准错误]就被丢到太平洋去了.

禁止标准输出和标准错误的输出.

   1 cat $filename 2>/dev/null >/dev/null2 # 如果"$filename"不存在,将不会有任何错误信息提示.3 # 如果"$filename"存在, 文件的内容不会打印到标准输出.4 # 因此Therefore, 上面的代码根本不会输出任何信息.5 #6 #  当只想测试命令的退出码而不想有任何输出时非常有用。7 #8 #9 # cat $filename &>/dev/null10 #     也可以, 由 Baris Cicek 指出.

Deleting contents of a file, but preserving the file itself, with all attendant permissions (from Example 2-1 and Example 2-3 ):

   1 cat /dev/null > /var/log/messages2 #  : > /var/log/messages   有同样的效果, 但不会产生新的进程.(因为:是内建的)3 4 cat /dev/null > /var/log/wtmp

自动清空日志文件的内容 (特别适合处理这些由商业Web站点发送的讨厌的"cookies" ):


例子 28-1. 隐藏cookie而不再使用

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

使用/dev/zero

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


例子 28-2. 用/dev/zero创建一个交换临时文件

   1 #!/bin/bash2 # 创建一个交换文件.3 4 ROOT_UID=0         # Root 用户的 $UID 是 0.5 E_WRONG_USER=65    # 不是 root?6 7 FILE=/swap8 BLOCKSIZE=10249 MINBLOCKS=4010 SUCCESS=011 12 13 # 这个脚本必须用root来运行.14 if [ "$UID" -ne "$ROOT_UID" ]15 then16   echo; echo "You must be root to run this script."; echo17   exit $E_WRONG_USER18 fi  19   20 21 blocks=${1:-$MINBLOCKS}          #  如果命令行没有指定,22                                  #+ 则设置为默认的40块.23 # 上面这句等同如:24 # --------------------------------------------------25 # if [ -n "$1" ]26 # then27 #   blocks=$128 # else29 #   blocks=$MINBLOCKS30 # fi31 # --------------------------------------------------32 33 34 if [ "$blocks" -lt $MINBLOCKS ]35 then36   blocks=$MINBLOCKS              # 最少要有 40 个块长.37 fi  38 39 40 echo "Creating swap file of size $blocks blocks (KB)."41 dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks  # 把零写入文件.42 43 mkswap $FILE $blocks             # 将此文件建为交换文件(或称交换分区).44 swapon $FILE                     # 激活交换文件.45 46 echo "Swap file created and activated."47 48 exit $SUCCESS

关于 /dev/zero 的另一个应用是为特定的目的而用零去填充一个指定大小的文件, 如挂载一个文件系统到环 回设备 (loopback device) (参考例 子 13-8 ) 或"安全地" 删除一个文件(参考例 子 12-55 ).


例子 28-3. 创建ramdisk

   1 #!/bin/bash2 # ramdisk.sh3 4 #  "ramdisk"是系统RAM内存的一段,5 #+ 它可以被当成是一个文件系统来操作.6 #  它的优点是存取速度非常快 (包括读和写).7 #  缺点: 易失性, 当计算机重启或关机时会丢失数据.8 #+       会减少系统可用的RAM.9 #10 #  那么ramdisk有什么作用呢?11 #  保存一个较大的数据集在ramdisk, 比如一张表或字典,12 #+ 这样可以加速数据查询, 因为在内存里查找比在磁盘里查找快得多.13 14 15 E_NON_ROOT_USER=70             # 必须用root来运行.16 ROOTUSER_NAME=root17 18 MOUNTPT=/mnt/ramdisk19 SIZE=2000                      # 2K 个块 (可以合适的做修改)20 BLOCKSIZE=1024                 # 每块有1K (1024 byte) 的大小21 DEVICE=/dev/ram0               # 第一个 ram 设备22 23 username=`id -nu`24 if [ "$username" != "$ROOTUSER_NAME" ]25 then26   echo "Must be root to run /"`basename $0`/"."27   exit $E_NON_ROOT_USER28 fi29 30 if [ ! -d "$MOUNTPT" ]         #  测试挂载点是否已经存在了,31 then                           #+ 如果这个脚本已经运行了好几次了就不会再建这个目录了32   mkdir $MOUNTPT               #+ 因为前面已经建立了.33 fi34 35 dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE  # 把RAM设备的内容用零填充.36                                                       # 为何需要这么做?37 mke2fs $DEVICE                 # 在RAM设备上创建一个ext2文件系统.38 mount $DEVICE $MOUNTPT         # 挂载设备.39 chmod 777 $MOUNTPT             # 使普通用户也可以存取这个ramdisk.40                                # 但是, 只能由root来缷载它.41 42 echo "/"$MOUNTPT/" now available for use."43 # 现在 ramdisk 即使普通用户也可以用来存取文件了.44 45 #  注意, ramdisk是易失的, 所以当计算机系统重启或关机时ramdisk里的内容会消失.46 #47 #  拷贝所有你想保存文件到一个常规的磁盘目录下.48 49 # 重启之后, 运行这个脚本再次建立起一个 ramdisk.50 # 仅重新加载 /mnt/ramdisk 而没有其他的步骤将不会正确工作.51 52 #  如果加以改进, 这个脚本可以放在 /etc/rc.d/rc.local,53 #+ 以使系统启动时能自动设立一个ramdisk.54 #  这样很合适速度要求高的数据库服务器.55 56 exit 0

最后值得一提的是, ELF二进制文件利用了/dev/zero .

转自:http://www.linuxsir.org/main/doc/abs/abs3.7cnhtm/zeros.html

转载于:https://www.cnblogs.com/lanzhi/archive/2010/07/06/6468822.html

关于 /dev/null 与 /dev/zero相关推荐

  1. Shell中的/dev/null 21 与 21 /dev/null 与/dev/null 的区别

    转自:http://blog.csdn.net/reyleon/article/details/11595985 默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入).标准输出(输出到屏幕). ...

  2. linux dd devzero,makefile中ifeq与ifneq dev/null和dev/zero简介 dd命令

    ifeq语法是ifeq ";" ";"  ,功能是比较参数"arg1"和"arg2"的值是否相同,相同时为1 ifneq ...

  3. Linux命令--- /dev/null和/dev/tty

    特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty.其中/dev/null将会丢掉所有写入它的数 据,换 ...

  4. 关于/dev/null 和 /dev/zero文件详解以及误删/dev/null和/dev/zero的解决方法和利用/dev/zero进行磁盘IO测试方法

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

  5. linux mmap /dev/zero,/dev/null 和 /dev/zero误删除重建方法

    一台服务器同事反馈/dev/null使用不正常,登陆发现,其由一个块设备文件变成了一个普通方件,看这个情况应该是被删除后,重新直接touch了一个文件掩盖.重建/dev/null和/dev/zero的 ...

  6. /dev/null 、/dev/zero、/dev/random、/dev/urandom

    Linux中的虚拟设备/dev/null./dev/zero./dev/random和/dev/urandom /dev/null 利用/dev/null来清除不必要的输出 把/dev/null看作& ...

  7. linux /dev/null 21,/dev/null 21 21 与 的意思

    在linux中,0,1,2,/dev/null,>,>>的意思: 标准输入stdin的文件描述符为0 标准输出stdout的文件描述符为1 标准错误stderr的文件描述符为2 /d ...

  8. linux /dev/null,Shell中 /dev/null和 /dev/null 21

    先用简单的语言回答题主的问题: shell程序中 2> /dev/null 代表什么意思? 答:"2> /dev/null" 代表忽略掉错误提示信息. 如题 2> ...

  9. 2.5.5.2 特殊文件:/dev/null 与 /dev/tty

    UNIX 系统提供了两个对Shell编程特别有用的特殊文件. 第一个文件 /dev/null ,就是大家所熟知的位桶(bit bucket).传送到此文件的数据都会被丢掉.换句话说,当程序将数据写入到 ...

最新文章

  1. 高职信息安全比赛攻防思路_30.LNGZ2020-30:2020年辽宁省职业院校技能大赛(高职组)“信息安全管理与评估”赛项规程...
  2. 动态多尺度图表达3D人体骨架运动,实现精准预测效果超SOTA
  3. oracle11g注册在哪里,oracle 如何新建账号密码在suse11,oracle11g和tomcat开机自启动...
  4. 学习记录:CONCAT()
  5. IDEA、 JetBrains、webstorm、 pycharm 破解教程
  6. 充电桩系统php源码,源码 充电桩程序设计 - 下载 - 搜珍网
  7. pandas分析各国家交易情况
  8. MyBatis-Plus_入门试炼03
  9. Docker容器中的Linux机器快速设置国内源
  10. android手机 不显示本地视频,各位大神们 android怎么获取手机本地视频啊?
  11. object-C控制语句
  12. DFS(深度优先遍历)走迷宫算法
  13. Win10窗口拖动时自动最大化的问题,屏幕显示绿框,中间显示1
  14. java 1.6 32位_JDK1.6 32位官方下载
  15. 【机器视觉锁付整体解决方案】视觉纠偏和找孔示教操作
  16. 创新5.1 7.1声卡安装调试教程
  17. 分门别类刷leetcode——二叉树和图(C++实现)
  18. unity|火焰和烟效果(粒子系统)
  19. 写给四十岁女人的箴言,写给四十岁男人的忠告
  20. 可以测试成果的背单词软件,实测背单词最好的软件排名,选了4款最管用的单词软件送给你!...

热门文章

  1. PPT 下载 | 神策数据孙文亮:客户全生命周期管理从方法到实践全解析
  2. 看我如何跨虚拟机实现Row Hammer攻击和权限提升
  3. Ubuntu常用APT命令参数
  4. 要活多久才能赚回你交的养老金
  5. 48幅非常搞笑的平面广告作品欣赏(上篇)
  6. 『mcse 2008基础架构』Chapter 01 IP协议及配置方法 第1课网络连接及配置方法
  7. c#快捷键(成为高手必备)
  8. easy and hard things
  9. 哥伦比亚大学计算机工程面试题
  10. C#多维数组与嵌套数组