29Àå. Á¦·Î¿Í ³Î(Of Zeros and Nulls)

/dev/zero ¿Í /dev/null

/dev/nullÀÇ ¾²ÀÓ»õ

/dev/nullÀ» "ºí·¢È¦"À̶ó°í »ó»óÇØ º¸¼¼¿ä. ÀÌ ÆÄÀÏÀº °ÅÀÇ Àбâ Àü¿ë ÆÄÀÏÀ̳ª ¸¶Âù°¡Áý´Ï´Ù. ÀÌ ÆÄÀÏ¿¡ ¾²´Â ¸ðµç°ÍÀº ¿µ¿øÈ÷ »ç¶óÁ® ¹ö¸±°Ì´Ï´Ù. ÀÌ ÆÄÀÏ¿¡¼­ ¹«¾ð°¡¸¦ ÀÐÀ¸·Á°í Çϰųª ¾î¶² °á°ú¸¦ ¹Ù¶ó´Â °ÍÀº ¹«ÀǹÌÇÑ ÀÏÀÔ´Ï´Ù. ±×·³¿¡µµ ºÒ±¸ÇÏ°í, /dev/nullÀº ¸í·É¾î ÁÙÀ̳ª ½ºÅ©¸³Æ®¿¡¼­ ¾ÆÁÖ À¯¿ëÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù.

Ç¥ÁØÃâ·ÂÀ̳ª Ç¥ÁØ¿¡·¯ ¸·±â(¿¹ 30-1¿¡¼­ Àοë):
rm $badname 2>/dev/null
#           ¿¡·¯ ¸Þ¼¼Áö[stderr]´Â ¿ÏÀüÈ÷ »ç¶óÁ® ¹ö¸³´Ï´Ù.

ÆÄÀÏ ÀÚü¿Í ¸ðµç Æ۹̼ÇÀº ±×´ë·Î °¡Áö¸é¼­ ³»¿ë¸¸ Áö¿ì±â(¿¹ 2-1 ¿Í ¿¹ 2-2¿¡¼­ Àοë):
cat /dev/null > /var/log/messages
#  : > /var/log/messages   ¶ó°í Çصµ °°Áö¸¸, ÀÌ·¸°Ô ÇÏ¸é »õ ÇÁ·Î¼¼½º¸¦ ¶ç¿ìÁö ¾Ê½À´Ï´Ù.

cat /dev/null > /var/log/wtmp

·Î±× ÆÄÀÏÀÇ ³»¿ëÀ» ÀÚµ¿À¸·Î ºñ¿ì±â(»ó¿ë À¥ »çÀÌÆ®¿¡¼­ º¸³»´Â ±ÍÂúÀº "ÄíÅ°"¸¦ ó¸®ÇÒ ¶§ Ưº°È÷ ÁÁ½À´Ï´Ù):

¿¹ 29-1. ÄíÅ° Ç׾Ƹ®¸¦ ¼û±â±â

if [ -f ~/.netscape/cookies ]  # ÀÖ´Ù¸é Áö¿ì°í,
then
  rm -f ~/.netscape/cookies
fi

ln -s /dev/null ~/.netscape/cookies
# ÀÌÁ¦ ¸ðµç ÄíÅ°´Â µð½ºÅ©¿¡ ÀúÀåµÇÁö ¾Ê°í ºí·¢È¦·Î º¸³»Áý´Ï´Ù.
/dev/zeroÀÇ ¾²ÀÓ»õ

/dev/zeroµµ /dev/nulló·³ °¡»ó ÆÄÀÏ(pseudo file)ÀÌÁö¸¸, ½ÇÁ¦·Î ³Î °ªÀ» °®°í ÀÖ½À´Ï´Ù(¾Æ½ºÅ° ¹®ÀÚ 0ÀÌ ¾Æ´Ñ ¼ýÀÚ 0). ÀÌ ÆÄÀÏ¿¡ ¹«¾ð°¡¸¦ ¾²¸é ±× Ãâ·ÂÀº »ç¶óÁý´Ï´Ù. ÀÌ ÆÄÀÏ¿¡¼­ ³Î °ªÀ» ÀÐ¾î ³»´Â °ÍÀº ¾ÆÁÖ ¾î·Æ½À´Ï´Ù¸¸ od ¸í·É¾î³ª Çí»ç ¿¡µðÅÍ·Î ÇÒ ¼ö´Â ÀÖ½À´Ï´Ù. /dev/zero´Â ƯÁ¤ÇÑ ±æÀÌÀÇ ÃʱâÈ­µÈ ´õ¹Ì ÆÄÀÏÀ» Àӽà ½º¿Ò ÆÄÀÏ·Î ¸¸µå´Âµ¥ ÁÖ·Î ¾²ÀÔ´Ï´Ù.

¿¹ 29-2. /dev/zero·Î ½º¿Ò ÆÄÀÏ ¼¼ÆÃÇϱâ

#!/bin/bash

# ½º¿Ò ÆÄÀÏ ¸¸µé±â.
# ·çÆ®·Î ½ÇÇà½ÃÅ°¼¼¿ä.

ROOT_UID=0         # ·çÆ® $UID ´Â 0.
E_WRONG_USER=65    # ·çÆ®°¡ ¾Æ´Ô.

FILE=/swap
BLOCKSIZE=1024
MINBLOCKS=40
SUCCESS=0

if [ "$UID" -ne "$ROOT_UID" ]
then
  echo; echo "ÀÌ ½ºÅ©¸³Æ®´Â ·çÆ®¸¸ ½ÇÇà½Ãų ¼ö ÀÖ½À´Ï´Ù."; echo
  exit $E_WRONG_USER
fi  
  

if [ -n "$1" ]
then
  blocks=$1
else
  blocks=$MINBLOCKS              # ¸í·É¾îÁÙ¿¡¼­ ÁöÁ¤ÇØ ÁÖÁö ¾ÊÀ¸¸é 
fi                               # 40 ºí·°À» ±âº»°ªÀ¸·Î ¼¼Æ®.

if [ "$blocks" -lt $MINBLOCKS ]
then
  blocks=$MINBLOCKS              # ÃÖ¼Ò 40 ºí·°À̾î¾ß µË´Ï´Ù.
fi  


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

mkswap $FILE $blocks             # Designate it a swap file.
swapon $FILE                     # Activate swap file.

echo "Swap file created and activated."

exit $SUCCESS

/dev/zeroÀÇ ´Ù¸¥ ÀÀ¿ëÀ¸·Î´Â, ÆÄÀÏÀÌ 0À¸·Î¸¸ ÀÌ·ç¾îÁø ÁöÁ¤µÈ Å©±â¸¦ °®°Ô ÇÏ´Â °ÍÀε¥, ·çÇÁ¹é µð¹ÙÀ̽º¸¦ ¸¶¿îÆ® ÇÏ´Â µîÀÇ Æ¯º°ÇÑ ¸ñÀûÀ» À§ÇØ ¾²ÀÔ´Ï´Ù. ¿¹ 13-6¿Í ¿¹ 12-33¸¦ Âü°íÇϼ¼¿ä.

¿¹ 29-3. ·¥µð½ºÅ© ¸¸µé±â

#!/bin/bash
# ramdisk.sh

#  "ramdisk" ¶õ ½Ã½ºÅÛÀÇ RAM ÀÇ ÀÏÁ¤ ºÎºÐ(segment)À» 
#+ ÆÄÀϽýºÅÛó·³ ¾²´Â °ÍÀ» ¸»ÇÕ´Ï´Ù.
#  ·¥µð½ºÅ©ÀÇ ÀåÁ¡Àº Àаí/¾²±â°¡ ¾ÆÁÖ ºü¸£´Ù´Âµ¥ ÀÖ½À´Ï´Ù.
#  ´ÜÁ¡: Èֹ߼ºÀÌ Àֱ⠶§¹®¿¡ ½Ã½ºÅÛÀÌ ¸®ºÎÆ®µÇ°Å³ª ²¨Áö¸é ±× ³»¿ëÀ» ÀÒ¾î¹ö¸³´Ï´Ù.
#        ·¥µð½ºÅ©·Î ÇÒ´çÇÑ ¸¸Å­ÀÇ ¸Þ¸ð¸®¸¦ ¸ø ¾²°Ô µË´Ï´Ù.
#
#  ·¥µð½ºÅ©°¡ ¹¹°¡ ÁÁÀ»±î¿ä?
#  Å×À̺íÀ̳ª »çÀüó·³ ¾ÆÁÖ Å« µ¥ÀÌŸ¸¦ ·¥µð½ºÅ©¿¡ ¿Ã·Á ³õÀ¸¸é
#+ µð½ºÅ© Á¢±Ù ¼Óµµº¸´Ù ¸Þ¸ð¸® Á¢±Ù ¼Óµµ°¡ ÈξÀ ºü¸£±â ¶§¹®¿¡ µ¥ÀÌŸ Ž»ö ¼Óµµ°¡ »¡¶óÁý´Ï´Ù.


E_NON_ROOT_USER=70             # ·çÆ®·Î ½ÇÇà.
ROOTUSER_NAME=root

MOUNTPT=/mnt/ramdisk
SIZE=2000                      # 2K ºí·°(ÇÊ¿ä¿¡ µû¶ó ¼öÁ¤)
BLOCKSIZE=1024                 # 1K (1024 byte) ºí·° Å©±â
DEVICE=/dev/ram0               # ù¹ø° ·¥ µð¹ÙÀ̽º

username=`id -nu`
if [ "$username" != "$ROOTUSER_NAME" ]
then
  echo "\"`basename $0`\" ´Â ·çÆ®·Î ½ÇÇà½ÃÄÑ¾ß µË´Ï´Ù."
  exit $E_NON_ROOT_USER
fi

if [ ! -d "$MOUNTPT" ]         #  ¸¶¿îÆ® Æ÷ÀÎÆ®°¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇؼ­
then                           #+ ÀÌ ½ºÅ©¸³Æ®¸¦ ¿©·¯¹ø ½ÇÇà½ÃÄѵµ ¿¡·¯°¡ ³ªÁö ¾Êµµ·Ï ÇÔ.
  mkdir $MOUNTPT              
fi

dd if=/dev/zero of=$DEVICE count=$SIZE bs=$BLOCKSIZE  # ·¥ µð¹ÙÀ̽º ÃʱâÈ­(zero out).
mke2fs $DEVICE                 # ·¥ µð½ºÅ©¿¡ ext2 ÆÄÀϽýºÅÛÀ» ¸¸µé°í,
mount $DEVICE $MOUNTPT         # ¸¶¿îÆ®.
chmod 777 $MOUNTPT             # ÀÏ¹Ý »ç¿ëÀÚµµ Á¢±Ù °¡´ÉÇÏ°Ô.
                               # ÇÏÁö¸¸ ¾ð¸¶¿îÆ®´Â ·çÆ®¸¸.

echo "ÀÌÁ¦ \"$MOUNTPT\" ¸¦ ¾µ ¼ö ÀÖ½À´Ï´Ù."
# ÀÌÁ¦ºÎÅÍ´Â ÀϹݻç¿ëÀÚ±îÁöµµ ·¥µð½ºÅ©¿¡ ÆÄÀÏÀ» ÀúÀåÇÒ ¼ö ÀÖ½À´Ï´Ù.

#  ÁÖÀÇÇÒ Á¡Àº ·¥µð½ºÅ©°¡ Èֹ߼ºÀ» °®±â ¶§¹®¿¡ ¸®ºÎÆ®³ª Àü¿øÀÌ ²¨Áú ¶§¿¡´Â
#+ ±× ³»¿ëÀÌ ¾ø¾îÁý´Ï´Ù. 
#  ÀúÀåÇÏ°í ½ÍÀº °ÍÀÌ ÀÖ´Ù¸é ·¥µð½ºÅ©°¡ ¾Æ´Ñ ÀÏ¹Ý µð·ºÅ丮·Î º¹»çÇؼ­ ¾²¸é µË´Ï´Ù.

# ¸®ºÎÆ®ÈÄ¿¡ ·¥µð½ºÅ©¸¦ ´Ù½Ã ¼Â¾÷ÇÏ°í ½Í´Ù¸é ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃÅ°¸é µË´Ï´Ù.
#  /mnt/ramdisk ¸¦ ÀÌ ½ºÅ©¸³Æ®¸¦ ÅëÇÏÁö ¾Ê°í 
#+ ´Ù¸¥ ¹æ¹ýÀ¸·Î ´Ù½Ã ¸¶¿îÆ®ÇÏ·Á°í ÇÑ´Ù¸é Á¦´ë·Î µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.

exit 0