½©Àº Ç×»ó ±âº»ÀûÀ¸·Î Ç¥ÁØÀÔ·Â(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À» Âü°íÇϼ¼¿ä). ÀÌ Æ¯º°ÇÑ ÆÄÀÏ µð½ºÅ©¸³ÅÍ´Â °Çµå¸®Áö ¾Ê´Â°Ô ÁÁ½À´Ï´Ù. |