高级shell编程笔记(第二十八章 关于zeros和nulls)

第二十八章 关于zeros和nulls

/dev/zero 和 /dev/null

使用/dev/null

把/dev/null 看作"黑洞"。它非常等价于一个只写文件。所有写入它的内容都会永远丢失。 /dev/null 对命令行和脚本都非常的有用。

禁止标准输出

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

禁止标准错误

rm $badname 2>/dev/null
#这样错误信息[标准错误]就被丢到黑洞了.

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

cat $filename 2>/dev/null >/dev/null
#如果"$filename"不存在,将不会有任何错误信息提示.
#如果"$filename"存在, 文件的内容不会打印到标准输出.


#当只想测试命令的退出码而不想有任何输出时非常有用.
cat $filename &>/dev/null

删除一个文件的内容,但是保留文件本身和所有的文件权限

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

Example 28-1 隐藏cookie而不再使用

#!/bin/bash
#
if [ -f ~/.netscape/cookies ];then
  rm -f ~/.netscape/cookies
fi

ln -s /dev/null ~/.netscape/cookies
#现在所有的 cookies 都会丢入黑洞而不会保存在磁盘上了.

使用/dev/zero

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

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

#!/bin/bash
#
ROOT_UID=0
E_WRONG_USER=65

FILE=/swap
BLOCKSIZE=1024
MINBLOCKS=40

if [ "$UID" -ne "$ROOT_UID" ];then
  echo; echo "You must be root to run this script."; echo
  exit $E_WRONG_USER
fi

block=${1:-$MINBLOCKS}

if [ "$block" -lt "$MINBLOCKS" ];then
  block=$MINBLOCKS
fi

echo "Creating swap file of size $blocks blocks (KB)."
dd if=/dev/zero of=$FILE bs=$BLOCKSIZE count=$blocks

mkswap $FILE $blocks
swapon $FILE
echo "Swap file created and activated."
exit 0

Example 28-3 创建ramdisk

#!/bin/bash
#
#"ramdisk"是系统RAM内存的一段,它可以被当成是一个文件系统来操作。
#它的优点是存取速度非常快,缺点是易失性,当计算机重启或关机时会丢失数据

E_NON_ROOT_USER=70
ROOTUSER_NAME=root
MOUNTPT=/mnt/ramdisk
SIZE=2000
BLOCKSIZE=1024
DEVICE=/dev/ram0

username=`id -nu`
if [ "$username" != "$ROOTUSER_NAME" ];then
  echo "Must be root to run \"`basename $0`\"."
  exit $E_NON_ROOT_USER
fi

if [ ! -d "$MPUNTPT" ];then
  mkdir $MOUNTPT
fi

dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE

mke2fs $DEVICE
mount $DEVICE $MOUNTPT
chmod 777 $MOUNTPT

echo "\"$MOUNTPT\" now available for use"

exit 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值