关于 /dev/null 与 /dev/zero
- 使用/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相关推荐
- Shell中的/dev/null 21 与 21 /dev/null 与/dev/null 的区别
转自:http://blog.csdn.net/reyleon/article/details/11595985 默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入).标准输出(输出到屏幕). ...
- linux dd devzero,makefile中ifeq与ifneq dev/null和dev/zero简介 dd命令
ifeq语法是ifeq ";" ";" ,功能是比较参数"arg1"和"arg2"的值是否相同,相同时为1 ifneq ...
- Linux命令--- /dev/null和/dev/tty
特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty.其中/dev/null将会丢掉所有写入它的数 据,换 ...
- 关于/dev/null 和 /dev/zero文件详解以及误删/dev/null和/dev/zero的解决方法和利用/dev/zero进行磁盘IO测试方法
1.概论 -- 来自维基的解释 /dev/null : 在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一 ...
- linux mmap /dev/zero,/dev/null 和 /dev/zero误删除重建方法
一台服务器同事反馈/dev/null使用不正常,登陆发现,其由一个块设备文件变成了一个普通方件,看这个情况应该是被删除后,重新直接touch了一个文件掩盖.重建/dev/null和/dev/zero的 ...
- /dev/null 、/dev/zero、/dev/random、/dev/urandom
Linux中的虚拟设备/dev/null./dev/zero./dev/random和/dev/urandom /dev/null 利用/dev/null来清除不必要的输出 把/dev/null看作& ...
- linux /dev/null 21,/dev/null 21 21 与 的意思
在linux中,0,1,2,/dev/null,>,>>的意思: 标准输入stdin的文件描述符为0 标准输出stdout的文件描述符为1 标准错误stderr的文件描述符为2 /d ...
- linux /dev/null,Shell中 /dev/null和 /dev/null 21
先用简单的语言回答题主的问题: shell程序中 2> /dev/null 代表什么意思? 答:"2> /dev/null" 代表忽略掉错误提示信息. 如题 2> ...
- 2.5.5.2 特殊文件:/dev/null 与 /dev/tty
UNIX 系统提供了两个对Shell编程特别有用的特殊文件. 第一个文件 /dev/null ,就是大家所熟知的位桶(bit bucket).传送到此文件的数据都会被丢掉.换句话说,当程序将数据写入到 ...
最新文章
- 高职信息安全比赛攻防思路_30.LNGZ2020-30:2020年辽宁省职业院校技能大赛(高职组)“信息安全管理与评估”赛项规程...
- 动态多尺度图表达3D人体骨架运动,实现精准预测效果超SOTA
- oracle11g注册在哪里,oracle 如何新建账号密码在suse11,oracle11g和tomcat开机自启动...
- 学习记录:CONCAT()
- IDEA、 JetBrains、webstorm、 pycharm 破解教程
- 充电桩系统php源码,源码 充电桩程序设计 - 下载 - 搜珍网
- pandas分析各国家交易情况
- MyBatis-Plus_入门试炼03
- Docker容器中的Linux机器快速设置国内源
- android手机 不显示本地视频,各位大神们 android怎么获取手机本地视频啊?
- object-C控制语句
- DFS(深度优先遍历)走迷宫算法
- Win10窗口拖动时自动最大化的问题,屏幕显示绿框,中间显示1
- java 1.6 32位_JDK1.6 32位官方下载
- 【机器视觉锁付整体解决方案】视觉纠偏和找孔示教操作
- 创新5.1 7.1声卡安装调试教程
- 分门别类刷leetcode——二叉树和图(C++实现)
- unity|火焰和烟效果(粒子系统)
- 写给四十岁女人的箴言,写给四十岁男人的忠告
- 可以测试成果的背单词软件,实测背单词最好的软件排名,选了4款最管用的单词软件送给你!...