½©Àº Ç×»ó ±âº»ÀûÀ¸·Î Ç¥ÁØÀÔ·Â(stdin, Űº¸µå), Ç¥ÁØÃâ·Â(stdout, ½ºÅ©¸°), Ç¥ÁØ¿¡·¯(stderr, ½ºÅ©¸°¿¡ »Ñ·ÁÁú ¿¡·¯ ¸Þ¼¼Áö) "ÆÄÀϵé"À» ¿¾î ³õ½À´Ï´Ù. ÀÌ ÆÄÀϵéÀ» Æ÷ÇÔÇØ¼ ¿·Á ÀÖ´Â ¾î¶² ÆÄÀÏÀÌ¶óµµ ÀçÁöÇâ µÉ ¼ö ÀÖ½À´Ï´Ù. ÀçÁöÇâÀ̶õ °£´ÜÈ÷ ¸»Çؼ ÆÄÀÏ, ¸í·É¾î, ÇÁ·Î±×·¥, ½ºÅ©¸³Æ®, ½ÉÁö¾î´Â ½ºÅ©¸³Æ® ¼ÓÀÇ ÄÚµå ºí·°(¿¹ 4-1, ¿¹ 4-2 Âü°í)ÀÇ Ãâ·ÂÀ» ³¬¾Æ ä¼ ´Ù¸¥ ÆÄÀÏ, ¸í·É¾î, ÇÁ·Î±×·¥, ½ºÅ©¸³Æ®ÀÇ ÀÔ·ÂÀ¸·Î º¸³»´Â °ÍÀÔ´Ï´Ù.
¿·Á ÀÖ´Â ÆÄÀÏ °¢°¢Àº ÆÄÀÏ µð½ºÅ©¸³ÅÍ(file descriptor)¸¦ ÇÒ´ç ¹Þ½À´Ï´Ù. [1] Ç¥ÁØÀÔ·Â, Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯¿¡ ÇØ´çÇÏ´Â ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â °¢°¢ 0, 1, 2 ÀÔ´Ï´Ù. Ãß°¡ÀûÀ¸·Î ¿¸®´Â ÆÄÀÏÀ» À§Çؼ 3ºÎÅÍ 9±îÁöÀÇ ÆÄÀÏ µð½ºÅ©¸³ÅͰ¡ ³²°ÜÁ® ÀÖ½À´Ï´Ù. Á¾Á¾, ÀÌ Ãß°¡ÀûÀÎ ÆÄÀÏ µð½ºÅ©¸³Å͵éÁßÀÇ Çϳª¸¦ Ç¥ÁØÀÔ·Â, Ç¥ÁØÃâ·Â, Ç¥ÁØ¿¡·¯·Î ÇÒ´çÇØ¼ ÀÓ½ÃÀûÀÎ Áߺ¹µÈ ¸µÅ©·Î ¾²´Â °ÍÀÌ À¯¿ëÇÒ ¶§°¡ ÀÖ½À´Ï´Ù. [2] ÀÌ·± ¹æ¹ýÀ» ¾²¸é ¾ÆÁÖ º¹ÀâÇÑ ÀçÁöÇâÀ̳ª ÆÄÀÏ µð½ºÅ©¸³Å͸¦ µÚÁ× ¹ÚÁ× »ç¿ëÇßÀ» ¶§, ¾ÆÁÖ °£´ÜÇÏ°Ô ¿ø·¡´ë·Î º¹±¸½ÃÄÑ ÁÝ´Ï´Ù(¿¹ 16-1 Âü°í).
>
# Ç¥ÁØÃâ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ.
# ÆÄÀÏÀÌ ¾øÀ¸¸é »õ·Î ¸¸µé°í, ÀÖ´Ù¸é µ¤¾î ¾¹´Ï´Ù.
ls -lR > dir-tree.list
# µð·ºÅ丮 Æ®¸® ¸ñ·ÏÀ» ÆÄÀÏ·Î ÀúÀåÇØ ÁÝ´Ï´Ù.
: > filename
# > ´Â "filename"ÀÇ ±æÀ̰¡ 0 ÀÌ µÇµµ·Ï Àß¶óÁÝ´Ï´Ù.
# : ´Â ¾Æ¹« Ãâ·Âµµ ¾È ÇÏ´Â ´õ¹Ì Ç÷¹À̽ºÈ¦´õ(placeholder)·Î µ¿ÀÛÇÕ´Ï´Ù.
>>
# Ç¥ÁØÃâ·ÂÀ» ÆÄÀÏ·Î ÀçÁöÇâ.
# ÆÄÀÏÀÌ ¾øÀ¸¸é »õ·Î ¸¸µé°í, ÀÖÀ¸¸é ÆÄÀÏ ³¡¿¡ µ¡ºÙÀÔ´Ï´Ù.
2>&1
# Ç¥ÁØ¿¡·¯¸¦ Ç¥ÁØÃâ·ÂÀ¸·Î ÀçÁöÇâ.
# ¿¡·¯ ¸Þ¼¼Áö´Â Ç¥ÁØ Ãâ·ÂÀÇ ÀÚ°ÝÀ¸·Î ½ºÅ©¸°¿¡ º¸³»Áý´Ï´Ù.
i>&j
# i¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ j¹ø ÆÄÀϵð½ºÅ©¸³ÅÍ·Î ÀçÁöÇâ.
# i°¡ °¡¸£Å°´Â ÆÄÀÏÀÇ ¸ðµç Ãâ·ÂÀº j°¡ °¡¸£Å°´Â ÆÄÀÏ·Î º¸³»Áý´Ï´Ù.
>&j
# ±âº»ÀûÀ¸·Î 1¹ø ÆÄÀÏ µð½ºÅ©¸³ÅÍ(Ç¥ÁØÃâ·Â)¸¦ j¹ø ÆÄÀÏ µð½ºÅ©¸³ÅÍ·Î ÀçÁöÇâ.
# ¸ðµç Ç¥ÁØÃâ·ÂÀº j°¡ °¡¸£Å°´Â ÆÄÀÏ·Î º¸³»Áý´Ï´Ù.
0<
<
# ÆÄÀÏ¿¡¼ ÀÔ·ÂÀ» ¹Þµµ·Ï ÇØÁÝ´Ï´Ù.
# ">"¿Í ¦À» ÀÌ·ç´Â ¸í·É¾î·Î, Á¾Á¾ °°ÀÌ ¾²ÀÔ´Ï´Ù.
#
# grep search-word <filename
[j]<>filename
# "filename"À» ÀÐ°í ¾²±â¿ëÀ¸·Î ¿°í "j"¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÇÒ´çÇÕ´Ï´Ù.
# "filename"ÀÌ ¾ø´Ù¸é »õ·Î ¸¸µì´Ï´Ù.
# "filename"ÀÌ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é ±âº»ÀûÀ¸·Î Ç¥ÁØÀÔ·ÂÀÎ 0¹øÀÌ ÇÒ´çµË´Ï´Ù.
#
# À̸¦ ÀÀ¿ëÇÏ¸é ÆÄÀÏÀÇ Æ¯Á¤ÇÑ À§Ä¡¿¡ ¾²±â¸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
echo 1234567890 > File # "File"¿¡ ¹®ÀÚ¿À» ¾¹´Ï´Ù.
exec 3<> File # "File"À» ¿°í 3¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ÇÒ´çÇÕ´Ï´Ù.
read -n 4 <&3 # ¹®ÀÚ 4°³¸¸ ÀÐÀº ´ÙÀ½,
echo -n . >&3 # ¼Ò¼öÁ¡À» ¾²°í,
exec 3>&- # 3¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ý½À´Ï´Ù.
cat File # ==> 1234.67890
# ¾î¶ó, ·£´ý ¾ï¼¼½º³×.
|
# ÆÄÀÌÇÁ.
# ÇÁ·Î¼¼½º¿Í ¸í·É¾î¸¦ ¿«¾î ÁÖ´Â ÀϹÝÀûÀÎ ¸ñÀûÀÇ Åø.
# ">"¿Í ºñ½ÁÇÏÁö¸¸, ½ÇÁ¦·Î´Â Á» ´õ ÀϹÝÀûÀ¸·Î ¾²ÀÔ´Ï´Ù.
# ¸í·É¾î, ½ºÅ©¸³Æ®, ÆÄÀÏ, ÇÁ·Î±×·¥µéÀ» ÇÔ²² ¹´Âµ¥ À¯¿ëÇÏ°Ô ¾²ÀÔ´Ï´Ù.
cat *.txt | sort | uniq > result-file
# ¸ðµç *.txt ÆÄÀÏÀÇ Ãâ·ÂÀ» Á¤·ÄÇÑ ´ÙÀ½, Áߺ¹µÇ´Â ÁÙÀ» Á¦°ÅÇϰí
# ¸¶Áö¸·À¸·Î ±× °á°ú¸¦ "result-file"¿¡ ÀúÀå. |
¿©·¯°³ÀÇ ÀÔÃâ·Â ÀçÁöÇâ°ú ÆÄÀÌÇÁ¸¦ ÇϳªÀÇ ¸í·É¾î ÁÙ¿¡¼ °°ÀÌ ¾µ ¼ö ÀÖ½À´Ï´Ù.
command < input-file > output-file command1 | command2 | command3 > output-file |
¿©·¯°³ÀÇ Ãâ·Â ½ºÆ®¸²ÀÌ ÇÑ ÆÄÀÏ·Î ÀçÁöÇâ µÉ ¼öµµ ÀÖ½À´Ï´Ù.
ls -yz >> command.log 2>&1 # "ls"ÀÇ À߸øµÈ ¿É¼ÇÀÎ "yz"ÀÇ °á°ú¸¦ "command.log"·Î ÀúÀåÇÕ´Ï´Ù. # Ç¥ÁØ¿¡·¯°¡ ÆÄÀÏ·Î ÀçÁöÇ⠵Ʊ⠶§¹®¿¡ ¾î¶² ¿¡·¯ ¸Þ¼¼Áö¶óµµ ±× ÆÄÀÏ¿¡ ÀúÀåµË´Ï´Ù. |
n¹ø ÀÔ·Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ý¾Æ ÁÝ´Ï´Ù.
Ç¥ÁØÀÔ·ÂÀ» ´Ý¾Æ ÁÝ´Ï´Ù.
n¹ø Ãâ·Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ý¾Æ ÁÝ´Ï´Ù.
Ç¥ÁØÃâ·ÂÀ» ´Ý¾Æ ÁÝ´Ï´Ù.
ÀÚ½Ä ÇÁ·Î¼¼½º´Â ¿·Á ÀÖ´Â ÆÄÀÏ µð½ºÅ©¸³Å͸¦ »ó¼Ó ¹Þ´Âµ¥ ÀÌ°Í ¶§¹®¿¡ ÆÄÀÌÇÁ°¡ µ¿ÀÛÇÕ´Ï´Ù. ÆÄÀÏ µð½ºÅ©¸³ÅͰ¡ »ó¼ÓµÇ±æ ¹Ù¶óÁö ¾Ê´Â´Ù¸é ±× ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´ÝÀ¸¸é µË´Ï´Ù.
# ÆÄÀÌÇÁ·Î Ç¥ÁØ¿¡·¯¸¸ ÀçÁöÇâ Çϱâ. exec 3>&1 # Ç¥ÁØÃâ·ÂÀÇ ÇöÀç "°ª"À» ÀúÀå. ls -l 2>&1 >&3 3>&- | grep bad 3>&- # 'ls'¿Í 'grep'À» À§ÇØ 3¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ´Ý°í, exec 3>&- # ÀÌÁ¦, ½ºÅ©¸³Æ® ³ª¸ÓÁö ºÎºÐÀ» À§ÇØ ´Ý½À´Ï´Ù. # Thanks, S.C. |
I/O ÀçÁöÇâ¿¡ ´ëÇÑ ´õ ÀÚ¼¼ÇÑ ¼Ò°³´Â ºÎ·Ï D¸¦ Âü°íÇϼ¼¿ä.
| [1] | ÆÄÀÏ µð½ºÅ©¸³ÅͶõ ¿î¿µÃ¼Á¦°¡ °è¼Ó ÃßÀûÇÒ ¼ö ÀÖµµ·Ï ¿·Á ÀÖ´Â ÆÄÀÏ¿¡ ÇÒ´çÇØ ÁÖ´Â °£´ÜÇÑ ¼ýÀÚÀÔ´Ï´Ù. ÆÄÀÏ Æ÷ÀÎÅÍÀÇ °£´ÜÇÑ ¹öÀüÀ̶ó°í »ý°¢ÇÏ¸é µË´Ï´Ù. C ÀÇ ÆÄÀÏ ÇÚµé(file handle)°ú À¯»çÇÑ °³³äÀÔ´Ï´Ù. |
| [2] | 5¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ ¾²¸é ¹®Á¦°¡ »ý±æ ¼ö ÀÖ½À´Ï´Ù. Bash°¡ execÀ¸·Î ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé ¶§, ±× ÀÚ½ÄÀº 5¹ø ÆÄÀÏ µð½ºÅ©¸³Å͸¦ »ó¼Ó¹Þ½À´Ï´Ù(Chet RameyÀÇ À̸ÞÀÏ ¾ÆÄ«À̺ê, SUBJECT: RE: File descriptor 5 is held openÀ» Âü°íÇϼ¼¿ä). ÀÌ Æ¯º°ÇÑ ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â °Çµå¸®Áö ¾Ê´Â°Ô ÁÁ½À´Ï´Ù. |