3.10. ¿ÜºÎ ÇÊÅÍ, ÇÁ·Î±×·¥ ¸í·É¾î

¿©±â¼­´Â ½© ½ºÅ©¸³Æ®¿¡¼­ ¾µ¸¸ÇÑ À¯´Ð½º Ç¥ÁØ ¸í·É¾îµéÀ» º¸¿©µå¸³´Ï´Ù.

ls

ÆÄÀÏ "¸ñ·Ï"¸¦ º¸¿©ÁÖ´Â ±âº» ¸í·É¾î·Î¼­, ³Ê¹« °£´ÜÇÑ ¸í·É¾î¶ó °ú¼ÒÆò°¡µÇ±â ½±Áö¸¸ ½ÇÁ¦´Â ±×·¸Áö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¸é ÇÏÀ§ µð·ºÅ丮±îÁö Ç¥½ÃÇÏ´Â ¿É¼ÇÀÎ -RÀ» ¾²¸é Æ®¸®ÇüÅÂÀÇ µð·ºÅ丮 ±¸Á¶¸¦ º¸¿©ÁÝ´Ï´Ù.

예 3-46. CDR µð½ºÅ©¸¦ ±¸¿ï ¶§ ls·Î ¸ñÂ÷¸¦ ¸¸µé±â

#!/bin/bash

# CDR À» ÀÚµ¿À¸·Î ±¸¿öÁÖ´Â ½ºÅ©¸³Æ®

# Joerg Schilling ÀÇ "cdrecord" ÆÐŰÁö ¾¸
# (http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html)

# ÀÏ¹Ý »ç¿ëÀÚ°¡ ÀÌ ½ºÅ©¸³Æ®¸¦ ½ÇÇà½ÃŲ´Ù¸é cdrecord ¿¡ suid °¡ °É·Á ÀÖ¾î¾ß 
# ÇÕ´Ï´Ù(·çÆ®·Î chmod u+s /usr/bin/cdrecord).

if [ -z $1 ]
then
  IMAGE_DIRECTORY=/opt
# ¸í·É¾î ÁÙ¿¡¼­ ÁöÁ¤ ¾È µÆÀ» °æ¿ìÀÇ ±âº» µð·ºÅ丮
else
    IMAGE_DIRECTORY=$1
fi
    
ls -lRF $IMAGE_DIRECTORY > $IMAGE_DIRECTORY/contents
# "l" ¿É¼ÇÀº "ÀÚ¼¼ÇÑ(long)" ÆÄÀÏ ¸ñ·ÏÀ» º¸¿©ÁÝ´Ï´Ù.
# "R" ¿É¼ÇÀº ÇÏÀ§ µð·ºÅ丮±îÁö º¸¿©ÁÝ´Ï´Ù.
# "F" ¿É¼ÇÀº ÆÄÀÏ Å¸ÀÔÀ» ÁöÁ¤ÇØ ÁÝ´Ï´Ù(µð·ºÅ丮´Â À̸§ ³¡¿¡ / ¸¦ ºÙÀÓ).
echo "¸ñÂ÷¸¦ ¸¸µì´Ï´Ù."

mkisofs -r -o cdimage.iso $IMAGE_DIRECTORY
echo "ISO9660 ÆÄÀÏ ½Ã½ºÅÛ À̹ÌÁö¸¦ ¸¸µì´Ï´Ù(cdimage.iso)."

cdrecord -v -isosize speed=2 dev=0,0 cdimage.iso
# ¿©·¯ºÐÀÇ ¹è¼Ó¿¡ ¸Â°Ô ¼Óµµ¸¦ °íÄ¡¼¼¿ä.
echo "µð½ºÅ©¸¦ ±Á´ÂÁß."
echo "½Ã°£ÀÌ ¿À·¡ °É¸®´Ï±î ±â´Ù¸®½Ã±â ¹Ù¶ø´Ï´Ù."

exit 0
chmod

ÆÄÀÏÀÇ ¼Ó¼ºÀ» º¯°æ(예 3-51 Âü°í).

chmod +x filename
# "filename"À» ¸ðµç »ç¿ëÀÚ°¡ ½ÇÇàÇÒ ¼ö ÀÖ°Ô.

chmod 644 filename
# "filename" ¼ÒÀ¯ÀÚ´Â ÀÐ°í ¾µ¼ö ÀÖ°Ô, ´Ù¸¥ »ç¶÷Àº Àб⸸ ÇϰÔ(8Áø¼ö).

chmod 1777 directory-name
# µð·ºÅ丮 ¾ÈÀÇ ¸ðµç ÆÄÀÏ¿¡ ´ëÇØ ¸ðµç »ç¶÷ÀÌ ÀÐ°í ¾²°í ½ÇÇà ÇÒ ¼ö ÀÖÁö¸¸
# "½ºÆ¼Å° ºñÆ®(sticky bit)"°¡ ¼¼Æ®µÇ¾î ÀÖÀ¸¹Ç·Î 
# µð·ºÅ丮 ¼ÒÀ¯ÀÚ¸¸ ÆÄÀÏÀ» º¯°æÇÒ ¼ö ÀÖÀ½.

umask

ƯÁ¤ »ç¿ëÀÚ¿¡°Ô ±âº» ÆÄÀÏ ¼Ó¼ºÀ» ÁöÁ¤. ƯÁ¤ »ç¿ëÀÚ°¡ ¸¸µé¾î³»´Â ¸ðµç ÆÄÀÏÀº umask°¡ ÁöÁ¤ÇÑ ¼Ó¼ºÀÌ ºÎ¿©µÊ. umask°¡ ÁöÁ¤ÇÑ °ªÀº ÆÄÀÏ ÆÛ¹Ì¼ÇÀÇ ¹Ý´ë·Î Àû¿ëµÇ´Âµ¥ ¿¹¸¦ µé¸é, umask 022´Â »õ ÆÄÀÏ¿¡ 755 ÆÛ¹Ì¼ÇÀ» ÁÝ´Ï´Ù(777 - 022). º¸ÅëÀº ÃʱâÈ­ ½ºÅ©¸³Æ®¿¡¼­ »ç¿ëµË´Ï´Ù.

find

exec COMMAND \;

find°¡ ã¾Æ³½ °¢°¢ÀÇ ÆÄÀÏ¿¡ ´ëÇØ COMMAND ¸¦ ½ÇÇàÇÕ´Ï´Ù. COMMAND´Â \;À¸·Î ³¡³ª¾ß ÇÕ´Ï´Ù(;¸¦ ½á¼­ find·Î ³Ñ¾î°¡´Â ¸í·É¾îµéÀ» ¸í·É¾î ±×´ë·Î ÇØ¼®Çϵµ·Ï À̽ºÄÉÀÌÇÁ ½ÃÄÑ¾ß ÇÕ´Ï´Ù). COMMAND°¡ {} À» Æ÷ÇÔÇϰí ÀÖ´Ù¸é find´Â ¼±ÅÃµÈ ÆÄÀÏÀÇ Àüü °æ·ÎÀ̸§À¸·Î ¹Ù²ã¹ö¸³´Ï´Ù.

예 3-47. ÇöÀç µð·ºÅ丮 ¾ÈÀÇ ÆÄÀÏÁß ÆÄÀÏ À̸§¾È¿¡ ÀϹÝÀûÀÌÁö ¾ÊÀº ¹®ÀÚ³ª °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇϰí ÀÖ´Â ÆÄÀÏÀ» Áö¿ì±â

#!/bin/bash

# ÇöÀç µð·ºÅ丮 ÆÄÀϵéÁß ÆÄÀÏÀ̸§¿¡ Á¤»óÀûÀÌÁö ¾ÊÀº ±ÛÀÚ¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀ» Áö¿ì±â

for filename in *
do
badname=`echo "$filename" | sed -n /[\+\{\;\"\\\=\?~\(\)\<\>\&\*\|\$]/p`
# ÀÌ·± °í¾àÇÑ ±ÛÀÚ¸¦ Æ÷ÇÔÇÑ ÆÄÀϵé:   + { ; " \ = ? ~ ( ) < > & * | $
rm $badname 2>/dev/null
#           ¿¡·¯ ¸Þ¼¼Áö´Â ¹«½ÃÇÕ´Ï´Ù.
done

# ÀÌÁ¦´Â ¸ðµç Á¾·ùÀÇ °ø¹é ¹®ÀÚ¸¦ Æ÷ÇÔÇÑ ÆÄÀÏÀ» ó¸®ÇսôÙ.
find . -name "* *" -exec rm -f {} \;
# 'find'°¡ ãÀº °æ·Î À̸§ÀÌ "{}"·Î ¹Ù²î¾î¼­ µé¾î°©´Ï´Ù.
# '\'´Â ';'°¡ ¸í·É¾î ³¡À» ³ªÅ¸³½´Ù´Â ¿ø·¡ ÀÇ¹Ì·Î ÇØ¼®µÇµµ·Ï ÇØÁÝ´Ï´Ù.

exit 0

ÀÚ¼¼ÇÑ °ÍÀº find ¸Ç ÆäÀÌÁö¸¦ Âü°íÇϼ¼¿ä.

xargs

¸í·É¾î¿¡ ÀÎÀÚ¸¦ ÇÊÅ͸µÇؼ­ ³Ñ°Ü ÁÖ°í ¸í·É¾î ÀÚ½ÅÀ» ÀçÁ¶ÇÕÇØÁÖ´Â ÅøÀÔ´Ï´Ù. ÀÚ½ÅÀÌ ¹Þ¾Æ µéÀÎ µ¥ÀÌŸ¸¦ ÇÊÅÍ¿ëÀ¸·Î Á¶°¢³»¼­ ¸í·É¾î°¡ ó¸®ÇÒ ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. ¿ªµû¿ÈÇ¥ÀÇ ÈǸ¢ÇÑ ´ë¿ëǰÀ̶ó°í »ý°¢Çϼ¼¿ä. ¿ªµû¿ÈÇ¥¸¦ ½á¼­ too many arguments À̶õ ¿¡·¯°¡ ³­´Ù¸é xargs·Î ¹Ù²ã¼­ ¾²¸é ¼º°øÇÒ ¼öµµ ÀÖ½À´Ï´Ù. º¸Åë, xargsÀÇ ÀÔ·ÂÀº Ç¥ÁØ ÀÔ·ÂÀ̳ª ÆÄÀÌÇÁÁö¸¸ ÆÄÀÏÀÇ Ãâ·Â¿¡¼­µµ ÀÐÀ» ¼ö ÀÖ½À´Ï´Ù.

ls | xargs -p -l gzip ´Â ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» Çϳª¾¿ ¹°¾îº¸¸é¼­ gzipÀ¸·Î ¹­½À´Ï´Ù.

Àç¹Õ´Â ¿É¼ÇÁß ÇϳªÀÎ -n XX´Â XX·Î ³Ñ±æ ÀÎÀÚÀÇ ¼ýÀÚ¸¦ Á¦ÇÑÇÕ´Ï´Ù.

ls | xargs -n 8 echo ´Â ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀÏÀ» ÇÑ ÁÙ¿¡ 8°³¾¿ ²÷¾î Ç¥½ÃÇØ ÁÝ´Ï´Ù.

참고: xargsÀÇ ±âº» ¸í·É¾î´Â echoÀÔ´Ï´Ù.

예 3-48. ½Ã½ºÅÛ ·Î±×¸¦ ¸ð´ÏÅÍ Çϱâ À§ÇÑ xargs ·Î±× ÆÄÀÏ

#!/bin/bash

# /var/log/messages ÀÇ ³¡ ºÎºÐ¿¡¼­ ÇöÀç µð·ºÅ丮·Î ·Î±× ÆÄÀÏÀ» ¸¸µé±â

# ÁÖÀÇ: ÀÏ¹Ý »ç¿ëÀÚµµ /var/log/messages ¸¦ ÀÐÀ» ¼ö ÀÖ°Ô ÇÏ·Á¸é 
# 		·çÆ®·Î chmod 755 /var/log/messages ¶ó°í ÇØÁÖ¼¼¿ä.

( date; uname -a ) >>logfile
# ½Ã°£°ú ¸Ó½Å À̸§
echo --------------------------------------------------------------------- >>logfile
tail -5 /var/log/messages | xargs |  fmt -s >>logfile
echo >>logfile
echo >>logfile

exit 0

예 3-49. copydir, xargs·Î ÇöÀç µð·ºÅ丮¸¦ ´Ù¸¥ µð·ºÅ丮·Î º¹»çÇϱâ

#!/bin/bash

# ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏÀ» ¸í·É¾î ÁÙ¿¡¼­ ÁöÁ¤ÇÑ 
# µð·ºÅ丮·Î º¹»çÇϱâ(verbose)

if [ -z $1 ]
# ÀÎÀÚ°¡ ¾øÀ¸¸é Á¾·á
then
  echo "»ç¿ë¹ý: `basename $0` directory-to-copy-to"
  exit 1
fi  

ls . | xargs -i -t cp ./{} $1
# cp * $1 °ú ¿ÏÀüÈ÷ µ¿ÀÏÇÕ´Ï´Ù.

exit 0
eval arg1, arg2, ...

ÀÎÀÚµéÀ» ¸í·É¾î·Î ¹Ù²Ù¾î ÁÝ´Ï´Ù(½ºÅ©¸³Æ®¿¡¼­ Äڵ带 ¸¸µé¾î ³¾ ¶§ À¯¿ëÇÕ´Ï´Ù).

예 3-50. eval È¿°ú º¸¿©ÁÖ±â

#!/bin/bash

y=`eval ls -l`
echo $y

y=`eval df`
echo $y
# ¶óÀÎÇǵå´Â Áö¿öÁý´Ï´Ù.

exit 0

예 3-51. °­Á¦·Î ·Î±× ¾Æ¿ô ½Ã۱â

#!/bin/bash

y=`eval ps ax | sed -n '/ppp/p' | awk '{ print $1 }'`
# 'ppp'ÀÇ ÇÁ·Î¼¼½º ¹øÈ£ ã±â

kill -9 $y
# Á×À̰í


# ÀÌÀü »óŸ¦ º¹±¸ÇÔ...

chmod 666 /dev/ttyS3
# ppp¿¡ SIGKILLÀ» ³¯¸®¸é Á÷·Ä Æ÷Æ®ÀÇ ÆÛ¹Ì¼ÇÀÌ ¹Ù²î±â ¶§¹®¿¡
# ÀÌÀü ÆÛ¹Ì¼ÇÀ¸·Î ´Ù½Ã º¹±¸½ÃÄÑ¾ß µË´Ï´Ù.

rm /var/lock/LCK..ttyS3
# Á÷·Ä Æ÷Æ®ÀÇ Àá±Ý ÆÄÀÏÀ» Áö¿ó´Ï´Ù.

exit 0
expr arg1 operation arg2 ...

´Ù¸ñÀû ¼ö½Ä Æò°¡ ¸í·É¾î: ÁÖ¾îÁø ¿¬»ê¿¡ µû¶ó ÀÚµ¿À¸·Î °è»êÇϰųª Æò°¡ÇÕ´Ï´Ù. ÀÎÀÚ´Â ºóÄ­À¸·Î ºÐ¸®µÇ¾î¾ß ÇÕ´Ï´Ù. °¡´ÉÇÑ ¿¬»êÀ¸·Î´Â ¼ö½Ä, ºñ±³, ¹®ÀÚ¿­, ³í¸®½ÄµîÀÌ ÀÖ½À´Ï´Ù.

expr 3 + 5

8 ¸®ÅÏ

expr 5 % 3

2 ¸®ÅÏ

y=`expr $y + 1`

º¯¼ö¸¦ Áõ°¡. let y=y+1³ª y=$(($y+1)) °ú °°À½.

z=`expr substr $string28 $position $length`

sed³ª Perl°°Àº ¿ÜºÎ ÇÁ·Î±×·¥ÀÌ ¹®ÀÚ¿­ ÆÄ½Ì¿¡ À־ ´õ ¶Ù¾î³ª±â ¶§¹®¿¡ bash ³»ºÎ ¸í·É¾î´Â ¾²Áö ¾Ê´Â°Ô ÁÁ½À´Ï´Ù.

예 3-52. expr ¾²±â

#!/bin/bash

# 'expr'ÀÇ ¸î °¡Áö »ç¿ë¹ý ½Ã¹ü
# +++++++++++++++++++++++++++++++++++++++

echo

# »ê¼ú ¿¬»êÀÚ

echo »ê¼ú ¿¬»êÀÚ
echo
a=`expr 5 + 3`
echo 5 + 3 = $a

a=`expr $a + 1`
echo
echo a + 1 = $a
echo \(º¯¼ö¸¦ Áõ°¡½Ã۱â\)

a=`expr 5 % 3`
# ³ª¸ÓÁö
echo
echo 5 mod 3 = $a

echo
echo

# ³í¸® ¿¬»êÀÚ

echo ³í¸® ¿¬»êÀÚ
echo

a=3
echo a = $a
b=`expr $a \> 10`
echo 'b=`expr $a \> 10`, Áï...'
echo "If a > 10, b = 0 (°ÅÁþ)"
echo b = $b

b=`expr $a \< 10`
echo "If a < 10, b = 1 (Âü)"
echo b = $b


echo
echo

# ºñ±³ ¿¬»êÀÚ

echo ºñ±³ ¿¬»êÀÚ
echo
a=zipper
echo a ´Â $a
if [ `expr $a = snap` ]
# º¯¼ö 'a' ¸¦ °­Á¦·Î ÀçÆò°¡(re-evaluation)
then
   echo "a ´Â zipper °¡ ¾Æ´Ô"
fi   

echo
echo



# ¹®ÀÚ¿­ ¿¬»êÀÚ

echo ¹®ÀÚ¿­ ¿¬»êÀÚ
echo

a=1234zipper43231
echo $a ¸¦ °¡Áö°í Á¶ÀÛÇØ º¸°Ú½À´Ï´Ù.

# index: ¹®ÀÚ¿­ Á¶°¢(substring)ÀÇ À§Ä¡
b=`expr index $a 23`
echo $a ¿¡¼­ 23ÀÌ Ã³À½ ³ª¿À´Â À§Ä¡´Â $b ÀÔ´Ï´Ù.

# substr: ÁÖ¾îÁø ½ÃÀÛ À§Ä¡¿¡¼­ ±æÀ̸¸Å­ÀÇ ¹®ÀÚ¿­ Á¶°¢(substring) Âï±â
b=`expr substr $a 2 6`
echo ½ÃÀÛ À§Ä¡´Â 2ÀÌ°í ±æÀ̰¡ 6ÀÎ $a ÀÇ ¹®ÀÚ¿­ Á¶°¢\(substring\)Àº $b ÀÔ´Ï´Ù.

# length: ¹®ÀÚ¿­ÀÇ ±æÀÌ
b=`expr length $a`
echo $a ÀÇ ±æÀÌ´Â $b ÀÔ´Ï´Ù.

# 'match' ´Â 'grep'°ú ºñ½ÁÇÏ°Ô µ¿ÀÛÇÕ´Ï´Ù.
b=`expr match $a [0-9]*`
echo $a ¿¡¼­ ¾ÕÂÊÀÇ ¼ýÀÚ °¹¼ö´Â $b ÀÔ´Ï´Ù.
b=`expr match $a '\([0-9]*\)'`
echo $a ¿¡¼­ ¾ÕÂÊÀÇ ¼ýÀÚ´Â $b ÀÔ´Ï´Ù.

echo

exit 0

:Àº match ´ë½Å ¾µ ¼ö ÀÖ½À´Ï´Ù. À§ ¿¹Á¦¿¡¼­ b=`expr $a : [0-9]*` ´Â b=`expr match $a [0-9]*` ¿Í Á¤È®ÇÏ°Ô ÀÏÄ¡Çϴ ǥÇöÀÔ´Ï´Ù.

let

letÀº º¯¼ö¿¡ ´ëÇØ »ê¼ú ¿¬»êÀ» ¼öÇàÇÕ´Ï´Ù. ¸¹Àº °æ¿ì¿¡ exprº¸´Ù Á» °¡º­¿î ¿ëµµ·Î ¾²ÀÔ´Ï´Ù.

예 3-53. letÀ¸·Î »ê¼ú ¿¬»ê Çϱâ

#!/bin/bash

echo

let a=11
# 'a=11'¿Í °°½À´Ï´Ù.
let a=a+5
# let "a = a + 5"¿Í °°½À´Ï´Ù.
# (Å« µû¿ÈÇ¥´Â Á» ´õ Àб⠽±°Ô ÇØ ÁÝ´Ï´Ù)
echo "a = $a"
let "a <<= 3"
# let "a = a << 3"¿Í °°½À´Ï´Ù.
echo "3¹ø ¿ÞÂÊ ½¬ÇÁÆ® = $a"

let "a /= 4"
# let "a = a / 4"¿Í °°½À´Ï´Ù.
echo $a
let "a -= 5"
# let "a = a - 5"¿Í °°½À´Ï´Ù.
echo $a
let "a = a * 10"
echo $a
let "a %= 8"
echo $a

exit 0
printf

printf´Â Çü½ÄÈ­ Ãâ·ÂÀ» ÇØÁÖ´Â ¸í·É¾î·Î¼­, echoÀÇ Çâ»óµÈ ¹öÀüÀÔ´Ï´Ù. C ¾ð¾îÀÇ printf ¿¡¼­ ¸î°¡Áö°¡ Á¦ÇѵǾî ÀÖ´Â º¯Á¾ÀÌ¸ç ¹®¹ýµµ ¿ª½Ã ¾à°£ ´Ù¸¨´Ï´Ù.

printf format-string ... parameter ...

Á» ´õ ÀÚ¼¼ÇÑ °ÍÀº printf ¸Ç ÆäÀÌÁö¸¦ º¸¼¼¿ä.

경고

¿À·¡µÈ bash ¹öÀüÀÏ °æ¿ì printf°¡ ¾È µÉ ¼öµµ ÀÖ½À´Ï´Ù.

예 3-54. printf ¿¹Á¦

#!/bin/bash

# printf ½Ã¿¬

PI=3.14159265358979
DecimalConstant=31373
Message1="¾È³çÇϼ¼¿ä,"
Message2="Áö±¸Àο©·¯ºÐ."

echo

printf "Pi¸¦ ¼Ò¼öÁ¡ ÀÌÇÏ 2 ÀÚ¸®¸¸ Ç¥½Ã = %1.2f" $PI
echo
printf "Pi¸¦ ¼Ò¼öÁ¡ ÀÌÇÏ 9 ÀÚ¸®¸¸ Ç¥½Ã = %1.9f" $PI
# ¹Ý¿Ã¸²ÀÌ ¾Ë¸Â°Ô µÈ °Í¿¡ ÁÖÀÇÇϼ¼¿ä.

printf "\n"
# ¶óÀÎ Çǵ带 ÂïÀ½. 'echo'¿Í °°½À´Ï´Ù.

printf "»ó¼ö = \t%d\n" $DecimalConstant
# ÅÇÀÌ µé¾î°¬ÁÒ.(\t)

printf "%s %s \n" $Message1 $Message2

echo

exit 0
at

ÀÛ¾÷ Á¦¾î ¸í·É¾îÀÎ atÀº ƯÁ¤ÇÑ ½Ã°£¿¡ ƯÁ¤ÇÑ ¸í·ÉÀ» ½ÇÇà ½Ãŵ´Ï´Ù. ÀÌ´Â cronÀÇ »ç¿ëÀÚ ¹öÀü ¸í·É¾îÀÔ´Ï´Ù.

at 2pm January 15 ¶ó°í ÇÏ¸é ±× ½Ã°£¿¡ ½ÇÇà½Ãų ¸í·É¾îµéÀ» ¹°¾îº¾´Ï´Ù. ¿©±â¿¡´Â ½© ½ºÅ©¸³Æ®¸¦ ½áµµ µË´Ï´Ù.

-f ¿É¼ÇÀ» ¾²°Å³ª ÀÔ·Â ÀçÁöÇâ(<)À» ½á¼­ ÆÄÀÏ·Î ÀúÀåµÇ¾î ÀÖ´Â ¸í·É¾î¸¦ ÇÑ ¹ø¿¡ ÀνĽÃų ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¶§, ÆÄÀϾȿ¡´Â ½© ½ºÅ©¸³Æ®°¡ À־ µÇÁö¸¸ ´ç¿¬È÷ »ç¿ëÀÚÀÇ ÀÔ·ÂÀÌ ÇÊ¿äÄ¡ ¾Ê¾Æ¾ß ÇÕ´Ï´Ù.

bash$ at 2:30 am Friday < at-jobs.list
job 2 at 2000-10-27 02:30
	      

ps

ÇöÀç ½ÇÇàÁßÀÎ ÀÛ¾÷À» »ç¿ëÀÚ¿Í ÇÁ·Î¼¼½º ID·Î º¸¿©ÁÝ´Ï´Ù. º¸Åë ax ¿É¼ÇÀ» ¾²´Âµ¥ ÆÄÀÌÇÁ·Î grepÀ» °É¾î¼­ ƯÁ¤ÇÑ ÇÁ·Î¼¼½º¸¦ ãÀ» ¼ö ÀÖ½À´Ï´Ù.

ps ax | grep sendmail ÀÇ °á°ú´Â
295 ?        S      0:00 sendmail: accepting connections on port 25

batch

batchµµ at°ú ºñ½ÁÇÑ ÀÛ¾÷ Á¦¾î ¸í·É¾î ÀÌÁö¸¸ ´Ù¸¥ Á¡Àº ½Ã½ºÅÛ ºÎÇϰ¡ 0.8 ÀÌÇÏÀÏ °æ¿ì¿¡¸¸ ¸í·É¾îµéÀ» ½ÇÇàÇÕ´Ï´Ù. ¿ª½Ã -f ¿É¼ÇÀ» ½á¼­ ÆÄÀÏ¿¡¼­ ¸í·É¾îµéÀ» ÀоîµéÀÏ ¼ö ÀÖ½ººó´Ù.

sleep

½©¿¡¼­ wait ·çÇÁ¿Í °°½À´Ï´Ù. ƯÁ¤ÇÑ ÃÊ´ÜÀ§ ½Ã°£µ¿¾È ¾Æ¹«Àϵµ ¾È ÇÏ°í ±â´Ù¸³´Ï´Ù. ŸÀ̹ÖÀ̳ª ¹é±×¶ó¿îµå¿¡¼­ ƯÁ¤ÇÑ »ç°ÇÀÌ ÀϾ±â¸¦ ±â´Ù¸®¸é¼­ ´ë±âÇÑ´ÙµçÁö ÇÒ ¶§ À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.
sleep 3
# 3Ãʰ£ ´ë±â.

dd

¾îµòÁö ¸ð¸£°Ô ºÒ¸íÈ®ÇÏ°í ¾à°£Àº ¾²±â ²¨·ÁÇÏ´Â "µ¥ÀÌŸ º¹»ç±â"(data duplicator) ¸í·É¾îÀÔ´Ï´Ù. º¯È¯°úÁ¤À» °ÅÃÄ ÆÄÀÏ(ȤÀº Ç¥ÁØ ÀÔÃâ·Â)À» º¹»çÇÕ´Ï´Ù. ASCII-EBCDIC°£ º¯È¯, ´ë¼Ò¹®ÀÚ°£ º¯È¯, ÀÔÃâ·Â ¹ÙÀÌÆ® ½ÖÀ» ¹Ù²Ù°Å³ª ÀÔ·ÂÆÄÀÏÀÇ Ã³À½À̳ª ³¡À» °Ç³Ê¶Ù°Å³ª Àß¶ó³»¼­ Ãâ·ÂÆÄÀÏÀ» ¸¸µç´Ùµç°¡ ÇÏ´Â µîÀÇ º¯È¯ÀÌ °¡´ÉÇÕ´Ï´Ù. dd°¡ °®°í ÀÖ´Â °­·ÂÇÑ ±â´ÉÀÇ º¯È¯ ¸ñ·Ï°ú ´Ù¸¥ ¿É¼ÇµéÀ» º¸·Á¸é dd --help¸¦ ÇÏ½Ã¸é µË´Ï´Ù.

dd ¸í·É¾î´Â Ç÷ÎÇÇ °°Àº µð¹ÙÀ̽ºÀÇ raw µ¥ÀÌŸ¿Í µð½ºÅ© À̹ÌÁö¿¡ Á÷Á¢ Á¢±ÙÇÒ ¼ö Àֱ⠶§¹®¿¡ ºÎÆ® Ç÷ÎÇǸ¦ ¸¸µé ¶§ °°Àº °æ¿ì¿¡ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.
dd if=kernel-image of=/dev/fd0H1440
dd´Â Àӽà ½º¿Ò ÆÄÀÏÀ» ÃʱâÈ­ ÇÏ´Â °æ¿ì¿¡ Áß¿äÇÏ°Ô ¾²ÀÔ´Ï´Ù(예 3-96 Âü°í).

sort

ÆÄÀÏÀ» Á¤·ÄÇÒ ¶§ ¾²À̴µ¥ ÁÖ·Î ÆÄÀÌÇÁ¿¡¼­ ÇÊÅͷμ­ ¾²ÀÔ´Ï´Ù. ¿É¼ÇÀº ¸Ç ÆäÀÌÁö¸¦ Âü°íÇϼ¼¿ä.

diff

°£´ÜÇÑ ÆÄÀÏ ºñ±³ À¯Æ¿¸®Æ¼. µÎ ÆÄÀÏÀ» ÁÙ ´ÜÀ§·Î Â÷·Ê´ë·Î ºñ±³ÇÕ´Ï´Ù. ºñ±³ ´Ü¾î »çÀü °°Àº °÷¿¡¼­ À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö Àִµ¥, sort¿Í uniq¸¦ ½á¼­ diff¿¡ ÆÄÀÌÇÁ·Î ³Ñ°ÜÁÖ´Â ½ÄÀÔ´Ï´Ù. diff file-1 file-2 Ãâ·ÂÀº °¢ ÆÄÀÏ¿¡¼­ ¼­·Î ´Ù¸¥ ºÎºÐÀ» ij·µÀ¸·Î º¸¿©ÁÝ´Ï´Ù. diffÀÇ ÀϹÝÀûÀÎ ¿ëµµ´Â patch ¿Í °°ÀÌ ¾²¿©¼­ ´Ù¸¥ ÆÄÀÏÀ» ¸¸µé¾î ³»´Â °ÍÀÔ´Ï´Ù(¾Æ·¡ Âü°í). -e ¿É¼ÇÀº ed³ª ex¿¡ ¸Â´Â Ãâ·Â ÆÄÀÏÀ» ¸¸µé¾î ³À´Ï´Ù.

patch -p1 <patch-file
# 'patch-file'¿¡ ÀÖ´Â º¯°æ»çÇ×À» 'patch-file'¿¡¼­ ³ªÅ¸³»´Â ÆÄÀÏ¿¡ Àû¿ë

cd /usr/src
gzip -cd patchXX.gz | patch -p0
# 'patch'·Î Ä¿³Î ¼Ò½º ¾÷±×·¹À̵å Çϱâ.
# À͸íÀÇ ÀúÀÚ(¾Ë¶õ ÄÛ½º?)°¡ ¾´ ¸®´ª½º Ä¿³Î ¹®¼­ "README"¿¡¼­ ¹ßÃé.

comm

´Ù¸ñÀû ÆÄÀÏ ºñ±³ À¯Æ¿¸®Æ¼. Á¦´ë·Î µÈ °á°ú¸¦ ¾òÀ¸·Á¸é ÆÄÀÏÀÌ Á¤·ÄµÇ¾î ÀÖ¾î¾ß Èü´Ï´Ù.

comm -options first-file second-file

comm file-1 file-2 Ãâ·ÂÀº ¼¼ Ä­À¸·Î ÀÌ·ç¾î Áý´Ï´Ù:

  • ù° Ä­ = file-1¿¡ À¯ÀÏÇÑ ÁÙ

  • µÑ° Ä­ = file-2¿¡ À¯ÀÏÇÑ ÁÙ

  • ¼¼Â° Ä­ = µÎ ÆÄÀÏ ¾çÂÊ¿¡ °øÅëÀ¸·Î ³ªÅ¸³ª´Â ÁÙ

´ÙÀ½ ¿É¼ÇÀº Çϳª ÀÌ»óÀÇ Ãâ·Â Ä­À» Á¦°ÅÇÕ´Ï´Ù.

  • -1 Àº 1¹ø Ä­À» Á¦°Å

  • -2 ´Â 2¹ø Ä­À» Á¦°Å

  • -3 Àº 3¹ø Ä­À» Á¦°Å

  • -12 ´Â 1¹ø°ú 2 ¹ø Ä­À» °°ÀÌ Á¦°Å, µîµî..

uniq

ÀÌ ÇÊÅÍ´Â Á¤·ÄµÈ ÆÄÀÏ¿¡¼­ Áߺ¹µÈ ÁÙÀ» Á¦°ÅÇÕ´Ï´Ù. º¸Åë sort¿Í ÆÄÀÌÇÁ¿¡¼­ °°ÀÌ ¾²ÀÔ´Ï´Ù.
cat list-1 list-2 list-3 | sort | uniq > final.list
# ¸®½ºÆ® ÆÄÀϵéÀ» ºÙÀ̰í Á¤·ÄÇÑ ´ÙÀ½
# Áߺ¹µÈ ÁÙÀ» Á¦°ÅÇÑ ÈÄ °á°ú¸¦ final.list¿¡ ÀúÀå.

expand

ÅÇÀ» ºó Ä­À¸·Î ¸¸µé¾îÁÖ´Â ÇÊÅÍ·Î½á ÆÄÀÌÇÁ¿¡¼­ ÁÖ·Î ¾²ÀÔ´Ï´Ù.

cut

ÆÄÀÏ¿¡¼­ Çʵ带 »Ì¾Æ ³»´Â ¸í·É¾î. awk¿¡¼­ print $N°ú ºñ½ÁÇÏÁö¸¸ ¾à°£ÀÇ Á¦ÇÑ »çÇ×À» °®°í ÀÖ½À´Ï´Ù. awkº¸´Ù´Â ´õ °£´ÜÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù. Ưº°È÷ Áß¿äÇÑ ¿É¼ÇÀ¸·Î´Â -d(±¸ºÐÀÚ)¿Í -f(Çʵå Áö½ÃÀÚ)°¡ ÀÖ½À´Ï´Ù.

¸¶¿îÆ® µÈ ÆÄÀÏ ½Ã½ºÅÛ ¸ñ·ÏÀ» ¾ò±â À§ÇØ cut ¾²±â:
cat /etc/mtab | cut -d ' ' -f1,2

OS¿Í Ä¿³Î ¹öÀüÀ» ¾ò±â À§ÇØ cut ¾²±â:
uname -a | cut -d" " -f1,3,11,12

cut -d ' ' -f2,3 filename Àº awk '{ print $2, $3 }' filename °ú °°Àº °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù.

colrm

Ä­ Á¦°Å ÇÊÅÍ. ÆÄÀÏ¿¡¼­ Ä­(ÇÑ ±ÛÀÚ)À» Áö¿ó´Ï´Ù. Áö¿ï ºÎºÐÀ» ÁöÁ¤ ¾È ÇÏ¸é ¿ø·¡ ÆÄÀÏÀ» ±×´ë·Î Ç¥ÁØ Ãâ·ÂÀ¸·Î µ¹·ÁÁÝ´Ï´Ù. colrm 2 4 <filename Àº filename °¢ ÁÙÀÇ 2¿¡¼­ 4¹øÂ° ±ÛÀÚ¸¦ Áö¿ó´Ï´Ù.

주의

ÆÄÀÏ¿¡ ÅÇÀ̳ª Ãâ·Â ¸øÇÏ´Â ±ÛÀÚ°¡ ÀÖ´Ù¸é ¾î¶² °á°ú°¡ ³ª¿ÃÁö ¾Ë ¼ö ¾ø½À´Ï´Ù.

paste

´Ù¸¥ ÆÄÀÏÀ» ¿©·¯ Ä­À» °¡Áø ÇϳªÀÇ ÆÄÀÏ·Î ¸¸µå´Â ¸í·É¾î. cut¿Í °°ÀÌ ½á¼­ ½Ã½ºÅÛ ·Î±× ÆÄÀÏÀ» ¸¸µå´Âµ¥ À¯¿ëÇÕ´Ï´Ù.

join

pasteº¸´Ù Á» ´õ À¯¿¬ÇÑ ¸í·É¾î¶ó°í º¸¸é µË´Ï´Ù. ´ÜÁö µÎ °³ÀÇ ÆÄÀÏ¿¡¼­¸¸ µ¿ÀÛÇÏÁö¸¸ ¾î¶² Çʵ带 ºÙÀÏ °ÍÀÎÁö, ¾î¶² ¼ø¼­·Î ¹­À» °ÍÀÎÁö¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

cpio

tar/gzip ¶§¹®¿¡ Áö±ÝÀº °ÅÀÇ ¾È ¾²À̴ ƯȭµÈ º¹»ç ¸í·É¾îÁö¸¸ µð·ºÅ丮 Æ®¸®¸¦ ¿Å±â·Á°í ÇÒ ¶§ °°Àº °æ¿ìÀÇ ¾²ÀÓ»õ°¡ ¾ÆÁ÷ ³²¾Æ ÀÖ½À´Ï´Ù.

예 3-55. cpio·Î µð·ºÅ丮 Æ®¸® ¿Å±â±â

#!/bin/bash

# cpio·Î µð·ºÅ丮 Æ®¸®¸¦ º¹»çÇϱâ

if [ $# -ne 2 ]
then
  echo »ç¿ë¹ý: `basename $0` source destination
  exit 1
fi  

source=$1
destination=$2

find "$source" -depth | cpio -admvp "$destination"

exit 0
cd

Ä£¼÷ÇÑ ¸í·É¾îÀÎ cd´Â ¾î¶² ¸í·É¾î°¡ ƯÁ¤ÇÑ µð·ºÅ丮¿¡¼­ ½ÇÇà µÅ¾ß ÇÒ °æ¿ì¿¡ °°ÀÌ ¾²ÀÔ´Ï´Ù.
(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
[¾Õ¿¡¼­ ÀοëÇß´ø ¾Ë¶õ ÄÛ½ºÀÇ ¿¹Á¦]

touch

ÆÄÀÏ¿¡ ´ëÇÑ Á¢±Ù/¼öÁ¤ ½Ã°£À» ÇöÀç ½Ã°¢À̳ª ƯÁ¤ÇÑ ½Ã°¢À¸·Î ¹Ù²ã ÁÖ´Â À¯Æ¿¸®Æ¼Áö¸¸ ÁÖ·Î »õ ÆÄÀÏÀ» ¸¸µé ¶§ ¾¹´Ï´Ù. zzz¶õ ÆÄÀÏÀÌ ¾ø¾ú´Ù°í °¡Á¤Çϰí touch zzz ¶ó°í Çϸé Å©±â°¡ 0ÀÎ zzz ÆÄÀÏÀ» ¸¸µì´Ï´Ù. ÀÌ·± ½ÄÀÇ ½Ã°£ Á¤º¸¸¦ °°´Â ºó ÆÄÀÏÀº ³¯Â¥ Á¤º¸¿ëÀ¸·Î ¾ÆÁÖ ¾µ ¸¸ ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é ¾î¶² ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ º¯°æ ½Ã°£°°Àº °ÍÀ» °è¼Ó °ü¸®ÇÏ·Á°í ÇÒ´Â °æ¿ì°¡ ±×·¸½À´Ï´Ù.

split

ÇÑ ÆÄÀÏÀ» ÀÛÀº Á¶°¢À¸·Î ³ª´²ÁÖ´Â À¯Æ¿¸®Æ¼. Ç÷ÎÇÇ·Î ¹é¾÷À» ÇÏ·Á°í ÇÑ´ÙµçÁö À̸ÞÀÏÀÇ Ã·ºÎ ÆÄÀÏ·Î ¾²·Á°í ÇÑ´ÙµçÁö ¾÷·Îµå¸¦ ÇÏ·Á°í ÇÒ ¶§ ¾²ÀÔ´Ï´Ù.

rm

Çϳª ÀÌ»óÀÇ ÆÄÀÏÀ» Áö¿ó´Ï´Ù. -f ¿É¼ÇÀº Àбâ Àü¿ë ÆÄÀÏÀÌ¶óµµ °­Á¦µµ Áö¿ï¼ö ÀÖ°Ô ÇÕ´Ï´Ù.

주의

Àç±Í ¿É¼ÇÀÎ -rÀ» ¾²¸é µð·ºÅ丮 Æ®¸® Àüü¸¦ Áö¿ó´Ï´Ù.

rmdir

µð·ºÅ丮¸¦ Áö¿ó´Ï´Ù. ÀÌ ¶§ ÇØ´ç µð·ºÅ丮¿¡´Â Á¡ ÆÄÀÏÀ» Æ÷ÇÔÇØ¼­ ¾Æ¹« ÆÄÀϵµ ¾ø¾î¾ß ÀÌ ¸í·É¾î°¡ ¼º°øÇÒ ¼ö ÀÖ½À´Ï´Ù.

ln

ÀÌ¹Ì Á¸ÀçÇÏ´Â ÆÄÀÏ¿¡ ´ëÇÑ ¸µÅ©¸¦ ¸¸µì´Ï´Ù. ½Éº¼¸¯À̳ª ¼ÒÇÁÆ® ¸µÅ© Ç÷¡±×¸¦ ³ªÅ¸³»´Â -s ¿É¼ÇÀ» ¸¹ÀÌ ¾¹´Ï´Ù. ÀÌ´Â ÂüÁ¶µÇ´Â ¿ø·¡ ÆÄÀÏÀÌ Çϳª ÀÌ»óÀÇ À̸§À» °¡Áú ¼ö ÀÖ°Ô ÇØÁÖ°í »óÀ§ °³³äÀÇ ´Ù¸¥ º°ÄªÀ» °®°Ô ÇØ ÁÝ´Ï´Ù.

ln -s oldfile newfile À̶ó°í Çϸé ÀÌ¹Ì Á¸ÀçÇÏ´Â oldfile¿¡ ´ëÇÑ »õ·Î¿î ¸µÅ© ÆÄÀÏÀÎ newfileÀ» ¸¸µé¾î ³À´Ï´Ù.

mkdir

µð·ºÅ丮 ¸¸µé±â. mkdir -p project/programs/December ´Â ÁÖ¾îÁø µð·ºÅ丮¸¦ ¸¸µå´Âµ¥ -p ¿É¼ÇÀÌ ºÙ¾ú±â ¶§¹®¿¡ ¾ø´Â ºÎ¸ð µð·ºÅ丮¸¦ ÀÚµ¿À¸·Î ¸¸µé¾î ÁÝ´Ï´Ù.

cp

ÆÄÀÏ º¹»ç ¸í·É¾î. cp file1 file2 ´Â file1À» file2·Î º¹»çÇÕ´Ï´Ù. ÀÌ ¶§ file2°¡ ÀÌ¹Ì Á¸ÀçÇÑ´Ù¸é µ¤¾î ¾¹´Ï´Ù.

mv

ÆÄÀÏ À̵¿ ¸í·É¾î. cp¿Í rmÀ» °°ÀÌ ¾²´Â °Í°ú ¶È°°½À´Ï´Ù. ¿©·¯°³ÀÇ ÆÄÀÏÀ» µð·ºÅ丮·Î ¿Å±æ ¶§ ¾²À̴µ¥ 예 3-7¿Í 예 A-2¿¡ ¿¹Á¦°¡ ÀÖ½À´Ï´Ù.

rcp

"¿ø°Ý(remote) º¹»ç", ÆÄÀÏÀ» ³×Æ®¿öÅ©¿¡ ¹°¸° ´Ù¸¥ ¸Ó½ÅÀ¸·Î º¹»çÇÔ. rcp¿Í ±× ºñ½ÁÇÑ À¯Æ¿¸®Æ¼µéÀ» ½©¿¡¼­ ¾²´Â °ÍÀº º¸¾È°ú °ü·ÃÀÌ Àֱ⠶§¹®¿¡ º°·Î ÃßõÇÏÁö ¾Ê½À´Ï´Ù. ´ë½Å expect ½ºÅ©¸³Æ®¸¦ ¾²½Ã±â ¹Ù¶ø´Ï´Ù.

yes

yesÀÇ ±âº» µ¿ÀÛÀº y¿Í ¶óÀÎ Çǵ带 Ç¥ÁØ Ãâ·ÂÀ¸·Î °è¼Ó »Ñ¸®´Âµ¥, control-c ·Î ¸ØÃâ ¼ö ÀÖ½À´Ï´Ù. yes ¾î¶² ¹®ÀÚ¿­À̶ó°í ÇÏ¸é ¾î¶² ¹®ÀÚ¿­À» y ´ë½Å °è¼Ó »Ñ¸³´Ï´Ù. ¿Ö ÀÌ·±°Ô ÇÊ¿äÇÒ±î¿ä? ¸í·É¾î ÁÙÀ̳ª ½ºÅ©¸³Æ® »ó¿¡¼­ »ç¿ëÀÚ ÀÔ·ÂÀ» ¿øÇÏ´Â ÇÁ·Î±×·¥¿¡°Ô yesÀÇ Ãâ·ÂÀ» ÀçÁöÇâÀ̳ª ÆÄÀÌÇÁ ½Ãų ¼ö ÀÖ½À´Ï´Ù. »ç½Ç, yes´Â expectÀÇ °£´ÜÇÑ ¹öÀüÀÔ´Ï´Ù.

strings

ÀÌÁø ÆÄÀÏÀ̳ª µ¥ÀÌŸ ÆÄÀÏ ¾È¿¡¼­ Ãâ·Â °¡´ÉÇÑ ¹®ÀÚµéÀ» ã°í ½ÍÀ» ¶§ strings¸¦ ¾²¸é µË´Ï´Ù. ´ë»ó ÆÄÀÏ¿¡¼­ Ãâ·Â °¡´ÉÇÑ ¹®ÀÚµéÀ» ¼ø¼­´ë·Î º¸¿©ÁÝ´Ï´Ù. À̰ÍÀ¸·Î ÄÚ¾î ´ýÇÁ ÆÄÀÏÀ̳ª ¾Ë ¼ö ¾ø´Â ±×·¡ÇÈ ÆÄÀÏÀ» °£´ÜÇÏ°Ô È®ÀÎÇØ º¼ ¼ö ÀÖ½À´Ï´Ù (strings image-file | moreÀÌ JFIF °°Àº ¹®ÀÚ¸¦ º¸¿©ÁØ´Ù¸é ±× ÆÄÀÏÀº jpeg ÆÄÀÏÀ̶ó°í »ý°¢ÇÏ¸é µË´Ï´Ù). ½ºÅ©¸³Æ®¿¡¼­´Â grepÀ̳ª sed·Î stringsÀÇ Ãâ·ÂÀ» ÆÄ½ÌÇØ¼­ ¾µ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

echo

Ç¥Çö½ÄÀ̳ª º¯¼ö($variable)¸¦ Ç¥ÁØ Ãâ·ÂÀ¸·Î Ãâ·ÂÇϱâ.
echo Hello
echo $a

º¸Åë, echo°¡ ´º¶óÀÎ ¹®ÀÚ¸¦ Âï¾îÁÖÁö¸¸ ÇÊ¿ä¾ø´Ù¸é -nÀ¸·Î ¸ø Âï°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.

cat, tac

cat´Â concatenate(¿¬¼ÓÀ¸·Î ÀÕ´Ù) ¿¡¼­ µû¿Â ¸»·Î½á ÆÄÀÏÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î »Ñ·ÁÁÝ´Ï´Ù. ÀçÁöÇâ(>À̳ª >>)°ú °°ÀÌ ¾²¸é ¿©·¯ ÆÄÀÏÀ» ÇÑ ÆÄÀÏ·Î ¸¸µì´Ï´Ù.
cat filename 
cat file.1 file.2 file.3 > file.123
-n ¿É¼ÇÀ» °É¸é ´ë»ó ÆÄÀÏÀÇ ÁÙ ¾Õ¿¡ ÁÙ¹øÈ£¸¦ ³Ö¾î ÁÝ´Ï´Ù.

tac, Àº cat¸¦ °Å²Ù·Î ¾´ °ÍÀε¥, ÆÄÀÏÀÇ ³¡¿¡¼­ºÎÅÍ °Å²Ù·Î º¸¿©ÁÝ´Ï´Ù.

rev

ÆÄÀÏÀÇ °¢ ÁÙÀ» °Å²Ù·Î µÚÁý¾î Ç¥ÁØ Ãâ·ÂÀ¸·Î ³»º¸³À´Ï´Ù. tac°ú ´Ù¸¥ Á¡Àº rev´Â ÁÙÀÇ ¼ø¼­´Â ±×´ë·Î »ì¸®°í °¢ ÁÙÀ» ÁÙ ³¡¿¡¼­ Á٠óÀ½À¸·Î µÚÁý´Â´Ù´Â °ÍÀÔ´Ï´Ù.

bash$ cat file1.txt
This is line 1.
This is line 2.
	      

bash$ tac file1.txt
This is line 2.
This is line 1.
	      

bash$ rev file1.txt
.1 enil si sihT
.2 enil si sihT
	      

head

ÆÄÀÏÀÇ Ã³À½ 10ÁÙÀ» Ç¥ÁØ Ãâ·ÂÀ¸·Î º¸¿©ÁÝ´Ï´Ù.

tail

ÆÄÀÏÀÇ ¸¶Áö¸·À» Ç¥ÁØ Ãâ·ÂÀ¸·Î º¸¿©ÁÝ´Ï´Ù(±âº»Àº 10 ÁÙÀÌÁö¸¸ ¹Ù²Ü ¼ö ÀÖ½À´Ï´Ù). º¸Åë -f ¿É¼ÇÀ» ½á¼­ ½Ã½ºÅÛ ·Î±× ÆÄÀÏ¿¡ °è¼Ó Ãß°¡µÇ´Â »çÇ×À» º¸·Á°í ÇÒ ¶§ ¾²ÀÔ´Ï´Ù.

tailÀÌ ½ÇÁ¦·Î ¾î¶»°Ô ¾²ÀÌ´ÂÁö´Â 예 3-48 °ú 예 3-100 ¸¦ Âü°íÇϼ¼¿ä.

tee

[¼öµµ¾÷°è¿¡¼­ ÀÌ ¾ÆÀ̵ð¾î¸¦ ¾ò¾ú½À´Ï´Ù.]

tee´Â ÀçÁöÇâ ¿¬»êÀÚÀÌÁö¸¸ ¾à°£ ´Ù¸¨´Ï´Ù. ¼öµµ ¹è°ü°øÀÇ tee(TÀÚ ¹è°ü ÆÄÀÌÇÁ)ó·³ ¸í·É¾î Ãâ·ÂÀ̳ª, ÆÄÀÌÇÁ¸¦ °É¾î¼­ ÀÛ¾÷ÁßÀÎ ¸í·É¾îÀÇ Ãâ·ÂÀ» È®Àå ½ÃŰÁö¸¸ °á°ú¿¡´Â ¾Æ¹« ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê½À´Ï´Ù. ÁøÇàÁßÀÎ ÇÁ·Î¼¼½ºÀÇ »óȲÀ» ÆÄÀϵîÀ¸·Î Ãâ·ÂÇÒ ¶§ À¯¿ëÇѵ¥, º¸Åë µð¹ö±ë ¿ëµµ·Î ¾²ÀÔ´Ï´Ù.

                   tee
                 |------> ÆÄÀÏ·Î
                 |
  ===============|===============
  ¸í·É¾î --->----|-¿¬»êÀÚ--->---> ¸í·É¾îÀÇ °á°ú
  ===============================
	      

cat listfile*| sort | tee check.file | uniq > result.file
(check.fileÀº uniq°¡ Áߺ¹µÈ ÁÙÀ» Áö¿ì±â ÀüÀÇ »óÅÂÀÎ listfile*ÀÌ Çϳª·Î ÇÕÃÄÁ®¼­ Á¤·ÄµÈ "listfiles"ÀÔ´Ï´Ù.)

mkfifo

À̸§ÀÌ ¾à°£ ¾Ö¸ÅÇÑ ÀÌ ¸í·É¾î´Â ³×ÀÓµå ÆÄÀÌÇÁ(named pipe)¸¦ ¸¸µé¾î ³À´Ï´Ù. ³×ÀÓµå ÆÄÀÌÇÁ¶õ ÇÁ·Î¼¼½º³¢¸® µ¥ÀÌŸ¸¦ ÁÖ°í ¹ÞÀ» ¼ö ÀÖµµ·Ï ÇÏ´Â Àӽà FIFO(First-In-First-Out) ¹öÆÛ¸¦ °¡¸£Å°´Â ¸»ÀÔ´Ï´Ù. ÀüÇüÀûÀÎ ½Ã³ª¸®¿À´Â ÇÑ ÇÁ·Î¼¼½º°¡ FIFO¿¡ µ¥ÀÌŸ¸¦ ¾²°í ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ±× µ¥ÀÌŸ¸¦ ÀÐ¾î °¡´Â °ÍÀÔ´Ï´Ù. 예 A-7 ¸¦ Âü°íÇϼ¼¿ä.

sed, awk

ÅØ½ºÆ® ÆÄÀÏÀ̳ª ¸í·É¾îÀÇ Ãâ·ÂÀ» ÆÄ½ÌÇϴµ¥ ƯÈ÷ ¾Ë¸ÂÀº ½ºÅ©¸³Æ® ¾ð¾îÀÔ´Ï´Ù. Ȧ·Î ¾²ÀÏ ¼öµµ ÀÖ°í ÆÄÀÌÇÁ³ª ½© ½ºÅ©¸³Æ®¿¡¼­ ¾²ÀÏ ¼öµµ ÀÖ½À´Ï´Ù.

sed

ex ¸í·É¾îµéÀ» ¹èÄ¡ ¸ðµå¿¡¼­ ¾µ ¼ö ÀÖ°Ô ÇØÁÖ´Â ºñ´ëÈ­½Ä "½ºÆ®¸² ¿¡µðÅÍ"ÀÔ´Ï´Ù. ½© ½ºÅ©¸³Æ®¿¡¼­ ¾ÆÁÖ ÀÚÁÖ ¾²ÀÔ´Ï´Ù(2.2절¸¦ º¸¼¼¿ä).

awk

ÇÁ·Î±×·¥ °¡´ÉÇÑ ÆÄÀÏ ºÐ¼®¹× Çü½ÄÈ­ ¸í·É¾î·Î½á, ±¸Á¶È­µÈ ÅØ½ºÆ® ÆÄÀÏ¿¡ ÀÖ´Â Çʵ峪 Ä÷³À» »Ì¾Æ³»°í Á¶ÀÛÇϴµ¥ ¾ÆÁÖ Àû´çÇϸç, ¹®¹ýÀº C¿Í ºñ½ÁÇÕ´Ï´Ù. 예 2-5 ¸¦ º¸½Ã¸é ½© ½ºÅ©¸³Æ®¿¡¼­ awk°¡ ¾î¶»°Ô ¾²ÀÌ´ÂÁö ¾Ë ¼ö ÀÖ½À´Ï´Ù.

groff, gs, TeX

ÃâÆÇ¿ë ¿ø°í³ª Çü½ÄÈ­µÈ ºñµð¿À µð½ºÇ÷¹ÀÌ¿ë ÅØ½ºÆ® ¸¶Å©¾÷ ¾ð¾î(Text markup language)µéÀÔ´Ï´Ù.

¸Ç ÆäÀÌÁö°¡ groffÀ» ¾¹´Ï´Ù(예 A-1 Âü°í). °í½ºÆ®½ºÅ©¸³Æ®(Ghostscript, gs)´Â Æ÷½ºÆ®½ºÆ®¸³Æ®(Postscript)ÀÇ GPL ¹öÀüÀÔ´Ï´Ù. TeX´Â Donald KnuthÀÇ Á¤±³ÇÑ Á¶ÆÇ ½Ã½ºÅÛÀÔ´Ï´Ù. Á¾Á¾, ÀÌ ¸¶Å©¾÷ ¾ð¾îµé¿¡ ³Ñ±æ ÀÎÀÚ³ª ¿É¼ÇµéÀ» ½© ½ºÅ©¸³Æ®¿¡¼­ 󸮸¦ Çϵµ·Ï ÇØ ÆíÇÏ°Ô ¾¹´Ï´Ù.

sum, cksum, md5sum

üũ½æÀ» ¸¸µé¾î³»´Â À¯Æ¿¸®Æ¼µéÀÔ´Ï´Ù. üũ½æÀ̶õ ÆÄÀÏ ÀÚüÀÇ ¹«°á¼ºÀ» È®ÀÎÇϱâ À§ÇØ ÆÄÀÏÀÇ ³»¿ëÀ¸·ÎºÎÅÍ ¼öÇÐÀûÀ¸·Î °è»êµÈ ¼ýÀÚ¸¦ ³ªÅ¸³À´Ï´Ù. Áß¿äÇÑ ½Ã½ºÅÛ ÆÄÀÏÀÌ ¹Ù²î¾ú°Å³ª ±úÁ³´ÂÁöµîÀÇ È®ÀÎ ¿©ºÎ °°Àº º¸¾È ¸ñÀûÀ¸·Î üũ½æÀ» Âü°íÇÒ ¼ö ÀÖ½À´Ï´Ù.

wc

wc ´Â ÆÄÀÏÀ̳ª I/O ½ºÆ®¸²¿¡ ³ªÅ¸³ª´Â "´Ü¾î °¹¼ö"(word count)¸¦ ¾Ë·ÁÁÝ´Ï´Ù.
$ wc /usr/doc/sed-3.02/README

[20 lines  127 words  838 characters]

wc -w ´Â ´Ü¾î °¹¼ö¸¸ ³ªÅ¸³À´Ï´Ù.

wc -l Àº ÁÙ ¼ö¸¸ ³ªÅ¸³À´Ï´Ù.

wc -c ´Â ±ÛÀÚ¼ö¸¸ ³ªÅ¸³À´Ï´Ù.

wc -L Àº °¡Àå ±ä ÁÙÀÇ ±æÀ̸¸ ³ªÅ¸³À´Ï´Ù.

ÇöÀç µð·ºÅ丮¿¡ .txt ÆÄÀÏÀÌ ¸î °³ ÀÖ´ÂÁö ¾Ë¾Æ³»´Â ¿¹Á¦ÀÔ´Ï´Ù:
$ ls *.txt | wc -l

tr

¹®ÀÚ º¯È¯ ÇÊÅÍ.

경고

ÀοëºÎÈ£³ª ²©¼è¸¦ ÀûÀýÇÏ°Ô ½á Áà¾ß µË´Ï´Ù.

tr "A-Z" "*" <filename filename¼ÓÀÇ ¸ðµç ´ë¹®ÀÚ¸¦ º°Ç¥·Î ¹Ù²Ù¾î Ç¥ÁØ Ãâ·ÂÀ¸·Î ³»º¸³À´Ï´Ù.

tr -d [0-9] <filename ´Â filename ¿¡ µé¾îÀÖ´Â ¸ðµç ¼ýÀÚ¸¦ Áö¿ö¹ö¸³´Ï´Ù.

예 3-56. toupper: ÆÄÀÏ ³»¿ëÀ» ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²Þ.

#!/bin/bash

# ÆÄÀÏ ³»¿ëÀ» ¸ðµÎ ´ë¹®ÀÚ·Î ¹Ù²Þ

if [ -z $1 ]
# ¸í·É¾î ÁÙ ÀÎÀÚ°¡ ÀÖ´ÂÁö È®ÀÎÇϴ ǥÁØ È®ÀÎ ÀÛ¾÷
then
  echo "»ç¿ë¹ý: `basename $0` filename"
  exit 1
fi  

tr [a-z] [A-Z] <$1

exit 0

예 3-57. lowercase: ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏ À̸§À» ¼Ò¹®ÀÚ·Î ¹Ù²Þ.

#! /bin/bash
#
# ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏ À̸§À» ´Ù ¼Ò¹®ÀÚ·Î ¹Ù²Þ
#
# ¿ø·¡ john duboisÀÇ ½ºÅ©¸³Æ®¸¦ Chet Ramey°¡ bash¿ëÀ¸·Î ¼öÁ¤ÇÑ °Í¿¡¼­ 
# ¿µ°¨À» ¾ò¾î ÀÌ HOWTOÀÇ ÀúÀÚÀÎ Mendel Cooper°¡ »ó´çÈ÷ °£´ÜÇÏ°Ô ¼öÁ¤ÇßÀ½.


for filename in *  # ÇöÀç µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀÏ
do
   fname=`basename $filename`
   n=`echo $fname | tr A-Z a-z`  # À̸§À» ¼Ò¹®ÀÚ·Î ¹Ù²Ù°í
   if [ $fname != $n ]  # ¿ø·¡ ¼Ò¹®ÀÚ°¡ ¾Æ´Ñ ÆÄÀϸ¸ ¼Ò¹®ÀÚ·Î ¹Ù²Þ
   then
     mv $fname $n
   fi  
done   

exit 0
fold

ÀÔ·Â ÁÙµéÀ» ÁÖ¾îÁø ³ÐÀÌ·Î Àß¶óÁÖ´Â ÇÊÅÍ.

fmt

°£´ÜÇÑ ÆÄÀÏ Çü½ÄÈ­ ¸í·É¾î·Î½á ÆÄÀÌÇÁ Áß°£¿¡ ÇÊÅÍ·Î ¾²¿© ±ä ÁÙÀ» ´ÙÀ½ Ä­À¸·Î ³Ñ±â±â(wrap)À§ÇØ »ç¿ëµË´Ï´Ù.

column

Ä÷³ Çü½ÄÈ­ ¸í·É¾î. ¸ñ·Ï ÇüÅÂÀÇ ÅØ½ºÆ® °á°ú¹°ÀÇ Àû´çÇÑ °÷¿¡ ÅÇÀ» ³Ö¾î¼­ "±ú²ýÇÑ Ãâ·Â"À» ¾ò°Ô ÇØ ÁÖ´Â ÇÊÅÍÀÔ´Ï´Ù.

예 3-58. columnÀ» ½á¼­ µð·ºÅ丮 ¸ñ·ÏÀ» Çü½ÄÈ­ÇØ¼­ º¸¿©ÁÖ±â

#!/bin/bash
# "column" ¸Ç ÆäÀÌÁö¿¡ ÀÖ´Â ¿¹Á¦¸¦ ¾à°£ ¼öÁ¤Çß½À´Ï´Ù.


(printf "PERMISSIONS LINKS OWNER GROUP SIZE MONTH DAY HH:MM PROG-NAME\n" \
; ls -l | sed 1d) | column -t

# "sed 1d"´Â "total        N" À̶ó°í ³ª¿À´Â ù ¹øÂ° ÁÙÀ» Áö¿öÁÝ´Ï´Ù.
# ¿©±â¼­, "N" Àº "ls -l"À̶ó°í ÇßÀ» ¶§ÀÇ Àüü ÆÄÀÏ ¼ö¸¦ ³ªÅ¸³À´Ï´Ù.

# "column"ÀÇ -t ¿É¼ÇÀº Ç¥ ÇüÅ·Π¿¹»Ú°Ô Âï±â(pretty-print)ÀÔ´Ï´Ù.

exit 0
nl

ÁÙ ¹øÈ£ ¸Å±â±â ÇÊÅÍ. ln filenameÀ̶ó°í Çϸé filenameÀ» ºó Ä­À» Á¦¿ÜÇÑ °¢ ÁÙ¿¡ ¿¬¼ÓÀûÀÎ ¹øÈ£¸¦ ºÙ¿©¼­ Ç¥ÁØ Ãâ·ÂÀ¸·Î º¸¿©ÁÝ´Ï´Ù. filenameÀ» ¾È ÀûÀ¸¸é Ç¥ÁØ ÀԷ¿¡ ´ëÇØ¼­ µ¿ÀÛÇÕ´Ï´Ù.

예 3-59. nl: ÀÚ±â Àڽſ¡°Ô ¹øÈ£¸¦ ºÙÀÌ´Â ½ºÅ©¸³Æ®.

#!/bin/bash

# ÀÌ ½ºÅ©¸³Æ® ÆÄÀÏ¿¡ ÁÙ¹øÈ£¸¦ ºÙ¿©¼­ Ç¥ÁØÃâ·ÂÀ¸·Î µÎ ¹ø Ãâ·ÂÇØ ÁÝ´Ï´Ù.

# 'nl' Àº ºó ÁÙÀ» ¼¼Áö ¾Ê±â ¶§¹®¿¡ Áö±Ý ÀÌ ÁÙÀ» 3¹øÂ° ÁÙ·Î º¾´Ï´Ù.
# 'cat -n' Àº À­ ÁÙÀ» 5¹øÂ° ÁÙ·Î º¾´Ï´Ù.

nl `basename $0`

echo; echo  # ÀÚ, ÀÌÁ¦ 'cat -n'À¸·Î ÇØº¸ÁÒ.

cat -n `basename $0`
# ´Ù¸¥Á¡Àº 'cat -n'Àº ºó ÁÙ¿¡µµ ¼ýÀÚ¸¦ ºÙÀδٴ °ÍÀÔ´Ï´Ù.

exit 0
pr

Ãâ·Â Çü½ÄÈ­ ÇÊÅÍ. ÆÄÀÏÀ̳ª Ç¥ÁØ Ãâ·ÂÀ» ÇÁ¸°ÅÍ·Î Ãâ·ÂÇϱ⿡ ¾Ë¸ÂÀº ÇüÅ·ΠÆäÀÌÁö¸¦ ¸Å°Ü ÁÝ´Ï´Ù. Ưº°È÷ À¯¿ëÇÑ ¿É¼ÇÀ¸·Î´Â -d°¡ Àִµ¥ ÇÑ ÁÙ ¸¶´Ù °­Á¦·Î ºó Ä­À» ³Ö¾îÁÝ´Ï´Ù.

예 3-60. Çü½ÄÈ­µÈ ÆÄÀÏ ¸ñ·Ï.

#!/bin/bash

# ÆÄÀÏ ¸ñ·ÏÀ» ±¸ÇÑ ´ÙÀ½¿¡...

b=`ls /usr/local/bin`

# ...40 Ä­ ³ÐÀÌ·Î.
echo $b | fmt -w 40

# ÀÌ·¸°Ôµµ ÇÒ ¼ö ÀÖÀ» °Ì´Ï´Ù.
# echo $b | fold - -s -w 40
 
exit 0
lp

lp¿Í lpr´Â ÆÄÀÏÀ» ÇÁ¸°Æ® Å¥·Î º¸³»¼­ ÇÁ¸°ÅÍ·Î Ãâ·ÂÇϱâ À§ÇØ ¾²ÀÌ´Â ¸í·É¾îÀÔ´Ï´Ù. [1] ÀÌ ¸í·É¾îµéÀÇ À̸§Àº ¿¾³¯ ¶óÀÎ ÇÁ¸°Å͸¦ ¾²´ø ½ÃÀý¿¡¼­ À¯·¡ µÆ½À´Ï´Ù.

bash$ cat file1.txt | lp

Çü½ÄÈ­µÈ Ãâ·ÂÀ» ¾ò±â À§ÇØ pr¿¡¼­ lp·Î ÆÄÀÌÇÁ¸¦ ½á¼­ ÀÚÁÖ ¾²ÀÔ´Ï´Ù.

bash$ pr -options file1.txt | lp

groff³ª °í½ºÆ®½ºÅ©¸³Æ®°°Àº Çü½ÄÈ­ ÆÐŰÁöµéÀº ÀڽŵéÀÇ Ãâ·ÂÀ» lp·Î Á÷Á¢ Àü´ÞÇØ¼­ ¾²À̱⵵ ÇÕ´Ï´Ù.

bash$ groff -Tascii file.tr | lp

bash$ gs -options | lp file.ps

°ü·ÃµÈ ¸í·É¾î·Î´Â ÇÁ¸°Æ® Å¥¸¦ º¸±â À§ÇÑ lpq³ª ÇÁ¸°Æ® Å¥¿¡¼­ ƯÁ¤ ÀÛ¾÷À» Áö¿ì±â À§ÇÑ lprm°¡ ÀÖ½À´Ï´Ù.

date

°£´ÜÇÏ°Ô date¶ó°í¸¸ Ä¡¸é ÇöÀç ³¯Â¥¿Í ½Ã°£À» º¸¿©ÁÝ´Ï´Ù. ÀÌ ¸í·É¾î¿¡¼­ ÁøÂ¥ Àç¹Õ´Â ºÎºÐÀº Ãâ·Â ÇüÅÂ¿Í ÆÄ½Ì ¿É¼ÇÀÔ´Ï´Ù.

예 3-61. date ¾²±â

#!/bin/bash

# 'date' ¸í·É¾î ¾²±â

# Æ÷¸ÅÆÃÀ» ÇÏ·Á¸é ¾Õ¿¡ '+'¸¦ ºÙ¿©Áà¾ß ÇÕ´Ï´Ù.

echo "¿ÃÇØ°¡ ½ÃÀÛÇÑ µÚ·Î Áö±Ý±îÁö ³¯ ¼ö´Â `date +%j`ÀÔ´Ï´Ù."
# %j ´Â ³âÁß ¸î ° ³¯Àΰ¡¸¦ ¾Ë·ÁÁÝ´Ï´Ù.


echo "01/01/1970 ÀÌÈÄ·Î Áö³­ ÃÊ´Â `date +%s`ÀÔ´Ï´Ù."
# %s ´Â "UNIX ¿¡Æø(epoch)"ÀÌ ½ÃÀÛÇÑ µÚ·Î ¸î Ãʰ¡ Áö³µ´ÂÁö¸¦ ¾Ë·ÁÁÝ´Ï´Ù¸¸,
# ÀÌ°É µµ´ëü ¾îµð´Ù ½á ¸ÔÁÒ?

prefix=temp
suffix=`eval date +%s`
filename=$prefix.$suffix
echo $filename
# "À¯ÀÏÇÑ" Àӽà ÆÄÀÏ À̸§À¸·Î $$¸¦ ¾²´Â °Í º¸´Ù ´õ ÈǸ¢ÇÕ´Ï´Ù.

# ´õ ¸¹Àº Æ÷¸Ë ¿É¼ÇÀ» º¸·Á¸é 'date' ¸Ç ÆäÀÌÁö¸¦ Àо¼¼¿ä.

exit 0
time

¸í·É¾îÀÇ ½ÇÇà¿¡ ´ëÇÑ ¾ÆÁÖ ÀÚ¼¼ÇÑ ½Ã°£ °ü·Ã Åë°èµéÀ» º¸¿©ÁÝ´Ï´Ù.

time ls -l / ´Â ÀÌ·± °ÍµéÀ» º¸¿©ÁÝ´Ï´Ù:
0.00user 0.01system 0:00.05elapsed 16%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (149major+27minor)pagefaults 0swaps

¹Ù·Î Àü ¼½¼Ç¿¡¼­ ¼Ò°³ÇØ µå·È´ø ¾ÆÁÖ °£´ÜÇÑ ¸í·É¾îÀÎ timesµµ °°ÀÌ º¸¼¼¿ä.

grep

Á¤±Ô Ç¥Çö½ÄÀ» ¾²´Â ´Ù¸ñÀû ÆÄÀÏ °Ë»ö µµ±¸. ¿ø·¡ ¿¹ÀüÀÇ ¶óÀÎ ¿¡µðÅÍÀÎ edÀÇ ¸í·É¾î/ÇÊÅÍ¿´´ø g/re/p ¿¡¼­ µû¿Â °ÍÀ¸·Î °¢°¢Àº global - reqular expression - print ¶õ ¶æÀÔ´Ï´Ù.

grep pattern [file...]

file¿¡¼­ patternÀÌ ÀÖ´ÂÁö ã½À´Ï´Ù.

ls -l | grep '.txt'´Â ls -l *.txt¿Í °°Àº °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù.

-i ¿É¼ÇÀº ´ë¼Ò¹®ÀÚ ±¸ºÐ ¾øÀÌ Ã£µµ·Ï ÇØÁÝ´Ï´Ù.

예 3-100 Àº grepÀ¸·Î ½Ã½ºÅÛ ·Î±× ÆÄÀÏ¿¡¼­ ƯÁ¤ Ű¿öµå¸¦ ã´Â ¿¹Á¦¸¦ º¸¿©ÁÝ´Ï´Ù.

예 3-62. ½ºÅ©¸³Æ®¿¡¼­ "grep"À» ¿¡¹Ä·¹À̼ÇÇϱâ

#!/bin/bash

# 'grep'À» ¾ÆÁÖ Á¶ÀâÇÏ°Ô ´Ù½Ã ±¸Çö

if [ -z $1 ]  # ÀÎÀÚ¸¦ È®ÀÎ
then
  echo "»ç¿ë¹ý: `basename $0` pattern"
  exit 1
fi  

echo

for file in *     # $PWDÀÇ ¸ðµç ÆÄÀϵéÀ»...
do
  output=$(sed -n /"$1"/p $file)  # ¸í·É¾î ¹Ù²Ù±â.

  if [ ! -z "$output" ]  # $file º¯¼ö¸¦ Àοë(quote) ¾È ÇÏ¸é ¿©·¯ÁÙÂ¥¸® Ãâ·Â¿¡¼­´Â ¿¡·¯°¡ ³ª¿É´Ï´Ù.
  then
    echo -n "$file: "
    echo $output
  fi

  echo
done  

echo

exit 0

# µ¶ÀÚ¸¦ À§ÇÑ ¿¬½À¹®Á¦:
# -------------------
# 1) ÁÖ¾îÁø ÆÄÀÏÁß ÀÏÄ¡ÇÏ´Â °ÍÀÌ Çϳª ÀÌ»óÀ̶ó¸é Ãâ·Â¿¡ ´º¶óÀÎÀ» Ãß°¡ÇØ º¸¼¼¿ä.
# 2) ¿©·¯ Ư¡µéÀ» Ãß°¡ÇØ º¸¼¼¿ä.

참고: egrepÀº grep -E¶û °°½À´Ï´Ù. Á» ´õ À¯¿¬ÇÑ °Ë»ö ´É·ÂÀ» °®´Â È®Àå Á¤±Ô Ç¥Çö½ÄÀ» Áö¿øÇÕ´Ï´Ù.

참고: fgrepÀº grep -F¿Í °°½À´Ï´Ù. ¹®ÀÚ ±×´ë·ÎÀÇ °Ë»ö(Á¤±Ô Ç¥Çö½Ä ¾È ¾¸)¸¸ Çϱ⠶§¹®¿¡, ¼Óµµ°¡ ¾à°£ ºü¸¨´Ï´Ù.

참고: ¾ÐÃàµÇ¾î ÀÖ´Â ÆÄÀÏ¿¡¼­ °Ë»öÀ» ÇÏ·Á¸é zgrep¸¦ ¾²¼¼¿ä. ¾ÐÃà ¾È µÇ¾î ÀÖ´Â ÆÄÀÏ¿¡¼­µµ µ¿ÀÛÇÏÁö¸¸ ±×³É grepº¸´Ù´Â ¾à°£ ´À¸³´Ï´Ù. ¾ÐÃà ÆÄÀϰú ºñ¾ÐÃà ÆÄÀÏÀÌ ¼¯¿© ÀÖÀ» ¶§ »ç¿ëÇÏ¸é ¾ÆÁÖ Æí¸®ÇÕ´Ï´Ù.

look

lookÀº grep°ú ºñ½ÁÇÏ°Ô µ¿ÀÛÇÏÁö¸¸ Á¤·ÄµÈ ´Ü¾î ¸ñ·ÏÀÎ "»çÀü"¿¡ µé¾îÀÖ´Â ´Ü¾î¸¸À» ã½À´Ï´Ù. Ưº°È÷ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é /usr/dict/words¿¡ ÀÖ´Â ´Ü¾î¸¸À» ã´Âµ¥ ´Ù¸¥ »çÀüÀ» ÁöÁ¤Çؼ­ ãÀ» ¼öµµ ÀÖ½À´Ï´Ù.

예 3-63. ¸ñ·Ï¿¡ ÀÖ´Â ´Ü¾îµéÀÇ À¯È¿¼º È®ÀÎÇϱâ

#!/bin/bash
# lookup:
# µ¥ÀÌŸ ÆÄÀÏ¿¡ µé¾î ÀÖ´Â °¢ ³¹¸»µéÀ» »çÀü¿¡¼­ ã¾Æ º¾´Ï´Ù.

file=words.data  # È®ÀÎÇØ º¼ ³¹¸»µéÀÌ µé¾î ÀÖ´Â µ¥ÀÌŸ ÆÄÀÏ

echo

while [ "$word" != end ]  # µ¥ÀÌŸ ÆÄÀÏÀÇ ¸¶Áö¸· ³¹¸»
do
  read word   # while ¹® ¸¶Áö¸·¿¡ ÀçÁöÇâÀ» °É¾î¼­ µ¥ÀÌŸ ÆÄÀÏ¿¡¼­ Àеµ·Ï ÇÔ
  look $word > /dev/null  # »çÀü ÆÄÀÏÀÇ Á٠ǥ½Ã ¾È Çϱâ
  lookup=$?   # 'look'ÀÇ Á¾·á°ª

  if [ "$lookup" -eq 0 ]
  then
    echo "\"$word\" ´Â À¯È¿ÇÕ´Ï´Ù."
  else
    echo "\"$word\" ´Â À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù."
  fi  

done <$file  # Ç¥ÁØÀÔ·ÂÀ» $file ·Î ÀçÁöÇâ Çϱ⠶§¹®¿¡ $file ¿¡¼­ ÀоîµéÀÓ

echo

exit 0
which

which <¸í·É¾î> ¶ó°í ÇÏ¸é ¸í·É¾îÀÇ Àüü °æ·Î¸íÀ» ¾Ë·ÁÁÝ´Ï´Ù. ½Ã½ºÅÛ¿¡ ƯÁ¤ ¸í·É¾î³ª À¯Æ¿¸®Æ¼°¡ ¼³Ä¡µÇ¾î ÀÖ´ÂÁö ¾Ë¾Æ ³»·Á°í ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù.

$bash which pgp
/usr/bin/pgp

script

ÄܼÖÀ̳ª ¿¢½ºÅÒÀÇ ¸í·É¾î ÁÙ¿¡¼­ »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ¸ðµç ۸¦ ÆÄÀÏ¿¡ ÀúÀåÇÕ´Ï´Ù. Áï, ¼¼¼Ç¿¡ ´ëÇÑ ±â·ÏÀ» ¸¸µé¾î ÁÝ´Ï´Ù.

tar

À¯´Ð½ºÀÇ ±âº» ¾ÆÄ«À̺ê(archive) À¯Æ¿¸®Æ¼. tar¶õ À̸§Àº ¿ø·¡ Tape ARchivingÀ̶õ ÇÁ·Î±×·¥¿¡¼­ ¿Ô´Âµ¥, ÀÌ ÇÁ·Î±×·¥Àº Å×ÀÔ µå¶óÀ̺êºÎÅÍ ÀϹÝÀûÀÎ º¸Åë ÆÄÀÏ, ½ÉÁö¾î´Â Ç¥ÁØ Ãâ·Â±îÁö Æ÷ÇÔÇÏ´Â ¸ðµç Á¾·ùÀÇ µð¹ÙÀ̽º¿¡ ´ëÇØ¼­ ¸ðµç Á¾·ùÀÇ ¾ÆÄ«À̺긦 ´Ù·ê ¼ö ÀÖµµ·Ï ¸¸µé¾îÁ³½À´Ï´Ù. GNU tar ´Â ¿À·¡ÀüºÎÅÍ gzipÀ» ´Ù·ê ¼ö ÀÖµµ·Ï ÆÐÄ¡µÇ¾î ÀÖ¾ú´Âµ¥, ´ÙÀ½°ú °°Àº ¸í·É¾î´Â ÇÏÀ§ µð·ºÅ丮¸¦ Æ÷ÇÔÇÑ ¸ðµç ÆÄÀÏÀ» ¹­¾î¼­ ¾ÐÃàÇ϶ó´Â ¶æÀÔ´Ï´Ù("µµÆ® ÆÄÀÏÀº Á¦¿ÜµË´Ï´Ù."). tar czvf archive-name.tar.gz *

gzip

Ç¥ÁØ GNU/UNIX ¾ÐÃà À¯Æ¿¸®Æ¼·Î½á ¼º´ÉÀÌ ¶³¾îÁö°í ƯÇã¿¡ °É·Á ÀÖ´Â compress¸¦ ´ë½ÅÇÕ´Ï´Ù. ¾ÐÃà Ç®±â ¸í·É¾î´Â gunzip·Î, gzip -d¿Í °°½À´Ï´Ù.

ÇÊÅÍ ÇÁ·Î±×·¥ÀÎ zcat´Â gzipÀ¸·Î ¹­ÀÎ ÆÄÀÏÀÇ ¾ÐÃàÀ» Ç®¾î Ç¥ÁØ Ãâ·ÂÀ¸·Î ³»º¸³»±â ¶§¹®¿¡ ÆÄÀÌÇÁÀÇ ÀÔ·ÂÀ̳ª ÀçÁöÇâ¿¡¼­ ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù. Áï, ¾ÐÃà ÆÄÀÏ¿¡ ´ëÇØ µ¿ÀÛÇÏ´Â cat¶ó°í º¸¸é µË´Ï´Ù(compress °¡ ¹­¾î ³õÀº ÆÄÀϵµ Æ÷ÇÔÇÕ´Ï´Ù). 예 3-14¸¦ Âü°íÇϼ¼¿ä.

bzip2

´Ù¸¥ ¾ÐÃà À¯Æ¿¸®Æ¼·Î º¸Åë Å©±â°¡ Å« ÆÄÀÏ¿¡ ´ëÇØ¼­ gzipº¸´Ù ¼º´ÉÀÌ ´õ ÁÁ½À´Ï´Ù. bzip2¿¡ ´ëÇÑ ¾ÐÃà Ç®±â ¸í·É¾î´Â bunzip2ÀÔ´Ï´Ù.

sq

¶Ç ´Ù¸¥ ¾ÐÃà À¯Æ¿¸®Æ¼·Î½á ¿ÀÁ÷ Á¤·ÄµÈ ¾Æ½ºÅ° ´Ü¾î ¸®½ºÆ®¿¡ ´ëÇØ¼­¸¸ µ¿ÀÛÇÏ´Â ÇÊÅÍÀÔ´Ï´Ù. »ç¿ë¹ýÀº º¸Åë ÇÊÅ͸¦ ¾²µíÀÌ ¾²¸é µË´Ï´Ù. sq < input-file > output-file. ÀÌ À¯Æ¿¸®Æ¼´Â ¼Óµµ´Â ºü¸£Áö¸¸ gzip¸¸Å­ È¿À²ÀûÀÌÁö´Â ¾Ê½À´Ï´Ù. ÇØ´çÇÏ´Â ¾ÐÃà Ç®±â ÇÊÅÍ´Â unsqÀÌ°í »ç¿ë¹ýÀº sq¿Í °°½À´Ï´Ù.

참고: sqÀÇ Ãâ·ÂÀ» gzip¿¡ ÆÄÀÌÇÁ·Î °É¾î¼­ ´õ ¾ÐÃà½Ãų¼öµµ ÀÖ½À´Ï´Ù.

shar

½© ¾ÆÄ«À̺ê(shell archiving) À¯Æ¿¸®Æ¼. ½© ¾ÆÄ«À̺ê´Â ½ÇÁ¦·Î´Â #!/bin/sh Çì´õ¿Í, ¾ÆÄ«À̺긦 Ç®±â À§ÇÑ ¸í·É¾îµéÀ» °®°í ÀÖ´Â ½© ½ºÅ©¸³Æ®·Î½á ¾ÐÃàµÇÁö ¾ÊÀº ¿©·¯ ÆÄÀϵéÀ» Âß ºÙ¿©¼­ ¸¸µé¾îÁø ÆÄÀÏÀÔ´Ï´Ù. Shar ¾ÆÄ«À̺ê´Â ¾ÆÁ÷µµ ÀÎÅÍ³Ý ´º½º ±×·ì¿¡¼­ º¼ ¼ö Àִµ¥ ´Ù¸¥ ÂÊ¿¡¼­´Â tar/gzip¶§¹®¿¡ °ÅÀÇ ¾È ¾¹´Ï´Ù. unshar ¸í·É¾î°¡ shar ¾ÆÄ«À̺긦 Ç®¾î ÁÝ´Ï´Ù.

file

ÆÄÀÏ Á¾·ù¸¦ ±¸ºÐÁö¾îÁÖ´Â À¯Æ¿¸®Æ¼. file file-nameÀ̶ó°í Ä¡¸é ascii text³ª data°°Àº file-nameÀÇ Á¾·ù¸¦ ¾Ë·ÁÁÝ´Ï´Ù. ÆÄÀÏ Á¾·ùÀÇ ´ëÇÑ Á¤º¸´Â Linux/UNIX ¹èÆ÷ÆÇ¿¡ µû¶ó /usr/share/magicÀ̳ª /etc/magic, /usr/lib/magicµî¿¡¼­ ¸ÅÁ÷ ³Ñ¹ö¸¦ Âü°íÇÕ´Ï´Ù.

예 3-64. C ÇÁ·Î±×·¥ ÆÄÀÏ¿¡¼­ ÁÖ¼®À» Á¦°ÅÇϱâ

#!/bin/bash

# C ¼Ò½º¿¡¼­ ÁÖ¼®(/* ÁÖ¼® */)À» Á¦°ÅÇØ ÁÝ´Ï´Ù.

NOARGS=1
WRONG_FILE_TYPE=2

if [ $# = 0 ]
then
  echo "»ç¿ë¹ý: `basename $0` C-program-file" >&2 # Ç¥ÁØ¿¡·¯·Î ¿¡·¯ ¸Þ¼¼Áö º¸³»±â
  exit $NOARGS
fi  

# ÆÄÀÏ Å¸ÀÔÀ» È®ÀÎ
type=`eval file $1 | awk '{ print $2, $3, $4, $5 }'`
# "file $1" ´Â ÆÄÀÏ Å¸ÀÔÀ» ¿¡ÄÚÇØÁÖ°í...
# awk °¡ ù ¹øÂ° Çʵå(ÆÄÀÏ À̸§)¸¦ Àß¶ó³»°í...
# ±× °á°ú°¡ "type" º¯¼ö°ªÀÌ µË´Ï´Ù.
correct_type="ASCII C program text"

if [ "$type" != "$correct_type" ]
then
  echo
  echo "ÀÌ ½ºÅ©¸³Æ®´Â ¿ÀÁ÷ C ¼Ò½º ÆÄÀÏ¿¡ ´ëÇØ¼­¸¸ µ¿ÀÛÇÕ´Ï´Ù."
  echo
  exit $WRONG_FILE_TYPE
fi  


# ¾à°£Àº ½Åºñ·Î¿ö º¸ÀÌ´Â sed ½ºÅ©¸³Æ®:
#--------
sed '
/^\/\*/d
/.*\/\*/d
' $1
#--------
# sed ¿¡ ´ëÇØ¼­ ¸î ½Ã°£¸¸ ÅõÀÚ¸¦ Çϸé ÀÌÇØÇϱ⠽±½À´Ï´Ù.


# ÁÖ¼®ÀÌ ÄÚµå¿Í °°Àº ÁÙ¿¡ ÀÖ´Â °æ¿ì¸¦ ó¸®Çϱâ À§Çؼ­´Â Ãß°¡ÀûÀÎ
# sed ½ºÅ©¸³Æ®°¡ ÇÊ¿äÇÕ´Ï´Ù.
# ¾à°£Àº ¾î·Á¿ï ¼öµµ ÀÖÁö¸¸ µ¶ÀÚµéÀ» À§ÇØ ¿¬½À¹®Á¦·Î ³²°Ü ³õ½À´Ï´Ù.

exit 0
uuencode

¹ÙÀ̳ʸ® ÆÄÀÏÀ» ¾Æ½ºÅ° ¹®ÀÚ·Î ÀÎÄÚµåÇØ¼­ À̸ÞÀÏ·Î º¸³»°Å³ª ´º½º ±×·ì¿¡ Æ÷½ºÆÃÇÒ ¼ö ÀÖµµ·Ï ÇØ ÁÝ´Ï´Ù.

uudecode

uuencode µÈ ÆÄÀÏÀ» ´Ù½Ã ¿ø·¡ ¹ÙÀ̳ʸ® ÆÄÀÏ·Î µðÄÚµå ÇØÁÝ´Ï´Ù.

예 3-65. ÀÎÄÚµåµÈ ÆÄÀÏÀ» µðÄÚµåÇϱâ

#!/bin/bash

lines=35
# Çì´õ¿Í Å×ÀÏ¿ëÀ¸·Î ¿©À¯ÀÖ°Ô 35ÁÙÀ» Àâ½À´Ï´Ù.

for File in *
# ÇöÀç ÀÛ¾÷ µð·ºÅ丮¿¡ ÀÖ´Â ¸ðµç ÆÄÀÏÀ» È®ÀÎ...
do
  search1=`head -$lines $File | grep begin | wc -w`
  search2=`tail -$lines $File | grep end | wc -w`
  # uuencode µÈ ÆÄÀÏÀº ¾Õ ºÎºÐ¿¡ "begin"À̶õ ³¹¸»ÀÌ µé¾î ÀÖ°í, ³¡ ºÎºÐ¿¡ "end"¶õ ³¹¸»ÀÌ µé¾î ÀÖ½À´Ï´Ù.
  if [ $search1 -gt 0 ]
  then
    if [ $search2 -gt 0 ]
    then
      echo "uudecode Áß - $File -"
      uudecode $File
    fi  
  fi
done  

exit 0
more, less

ÅØ½ºÆ® ÆÄÀÏÀ̳ª ÅØ½ºÆ® ½ºÆ®¸²À» Ç¥ÁØ Ãâ·ÂÀ¸·Î ÇÑ ¹ø¿¡ ÇÑ Âʾ¿ Ç¥½ÃÇØ ÁÝ´Ï´Ù.

jot, seq

ÀÌ À¯Æ¿¸®Æ¼µéÀº ÁÖ¾îÁø °£°ÝÀ¸·Î Á¤¼ö°ªÀ» ¼ø¼­´ë·Î ¸¸µé¾î ³À´Ï´Ù. for ¹®¿¡¼­ ¾ÆÁÖ À¯¿ëÇÏ°Ô ¾²ÀÏ ¼ö ÀÖ½À´Ï´Ù.

예 3-66. seq·Î ·çÇÁ¿¡ ÀÎÀÚ¸¦ ¸¸µé¾î ³Ö±â

#!/bin/bash

for a in `seq 80`
# for a in 1 2 3 4 5 ... 80  °ú ¶È°°½À´Ï´Ù(ŸÀÌÇÎÀ» ¸¹ÀÌ ¾È Ãĵµ µË´Ï´Ù!).
# ½Ã½ºÅÛ¿¡ 'jot'°¡ ÀÖ´Ù¸é ´ë½Å ¾µ ¼öµµ ÀÖ½À´Ï´Ù.
do
  echo -n "$a "
done

echo

exit 0
clear

clear´Â ÄܼÖÀÇ ÅØ½ºÆ® È­¸éÀ̳ª ¿¢½ºÅÒÀ» ±ú²ýÀÌ Áö¿ì´Â ¸í·É¾îÀÔ´Ï´Ù. ¸í·É¾î ÁÙ ÇÁ·ÒÇÁÆ®¿Í Ä¿¼­´Â È­¸é Á¦ÀÏ À§ÀÇ ¿ÞÂÊ¿¡ ³ªÅ¸³¯ °ÍÀÔ´Ï´Ù. ±×³É ¸í·É¾î ÁÙ¿¡¼­ ÀÌ ¸í·É¾î¸¦ ½ÇÇàÇÒ ¼öµµ ÀÖ°í ½ºÅ©¸³Æ® ¾È¿¡¼­ ½ÇÇà ½Ãų ¼öµµ ÀÖ½À´Ï´Ù. 예 3-36À» Âü°íÇϼ¼¿ä.

pathchk

ÆÄÀÏ À̸§ÀÌ ¿Ã¹Ù¸¥Áö ¾Æ´ÑÁö¸¦ È®ÀÎÇØ ÁÝ´Ï´Ù. ÆÄÀÏ À̸§ÀÌ ÃÖ´ë Çã¿ë °¡´É ±æÀÌ(255 ±ÛÀÚ)¸¦ ³Ñ´Â´Ù°Å³ª ÁÖ¾îÁø °æ·Î¿¡¼­ Çϳª ÀÌ»óÀÇ µð·ºÅ丮¸¦ ãÀ» ¼ö ¾ø´Ù°Å³ª ÇÒ °æ¿ì¿¡ ¿¡·¯ ¸Þ¼¼Áö¸¦ ¹ß»ý½Ãŵ´Ï´Ù. ºÒÇàÇϰԵµ pathchk´Â ¾Ë¾Æ º¼ ¼ö ÀÖ´Â ¿¡·¯ Äڵ带 ¸®ÅϽÃŰÁö ¾Ê±â ¶§¹®¿¡ ½ºÅ©¸³Æ® »ó¿¡¼­´Â ÀüÇô ¾µ¸ð°¡ ¾ø½À´Ï´Ù.

주석

[1]

ÇÁ¸°Æ® Å¥¶õ ÇÁ¸°Æ®¸¦ À§ÇØ ¼ø¼­´ë·Î ´ë±âÇϰí ÀÖ´Â ÀÛ¾÷ ±×·ìÀ» ¸»ÇÕ´Ï´Ù.