»ç¿ëÇÏ´Â ¼¹ö¿¡ mysqlÀÌ ¼³Ä¡µÇ¾î ÀÖ´Ù¸é mysql 
                ¼³Ä¡°æ·Î¿¡¼ mysql_setpermission ÇÁ·Î±×·¥À» ã¾Æº¸±â ¹Ù¶õ´Ù. 
                ÀÌ ÇÁ·Î±×·¥Àº ´Ù¸§ ¾Æ´Ñ Perl·Î ¸¸µé¾îÁø ½Ã½ºÅÛ µµ±¸ÀÇ ÀÏÁ¾ÀÌ´Ù. 
                ÀÌ ÇÁ·Î±×·¥Àº mysqlÀ» »ç¿ëÇÔ¿¡ ÀÖ¾î ¹ø°Å·Î¿î ÀÛ¾÷ÀÌ ¾Æ´Ò ¼ö 
                ¾ø´Â database¿Í userÀÇ »ý¼º ¹× ±ÇÇÑÁ¶Á¤ µîÀÇ ÀÛ¾÷À» ÀÚµ¿ÈÇÑ 
                µµ±¸ÀÌ´Ù. »Ó¸¸ ¾Æ´Ï¶ó my sqlaccess, mysql_find_rows, mysql_zap 
                µîÀÇ ÇÁ·Î±×·¥µµ ¸¶Âù°¡Áö·Î Perl·Î ¸¸µé¾îÁø ½Ã½ºÅÛ µµ±¸ÀÇ ÀÏÁ¾ÀÌ´Ù. 
                ÀÌ·¸µí PerlÀ» ÀÌ¿ëÇØ ½Ã½ºÅÛ µµ±¸¸¦ ¸¸µé¾îµÎ¸é ºó¹øÇÏ°Ô ¹ß»ýÇÏ´Â 
                º¹ÀâÇÑ ÀÛ¾÷µéÀ» ÀÚµ¿ÈÇÒ ¼ö ÀÖ¾î ¼¹ö ¿î¿µÀÚ ¹× ½Ã½ºÅÛ »ç¿ëÀÚ¿¡°Ô 
                Æí¸®ÇÔÀ» Á¦°øÇÑ´Ù.
                Perl ¼Ò½º ÇÁ·Î±×·¥À» ½Ã½ºÅÛ µµ±¸·Î Á÷Á¢ »ç¿ëÇϱâ 
                À§Çؼ´Â ¾Õ¼ ¼³¸íÇßµíÀÌ ½ÇÇà±ÇÇÑ(chmod +x)À» ºÎ¿©ÇÏ°í ¼Ò½º 
                ù ¹øÂ° ÁÙ¿¡ PerlÀÇ À§Ä¡¸¦ ÁöÁ¤ÇØÁà¾ß ÇÑ´Ù. ¶ÇÇÑ Perl ¼Ò½º ÇÁ·Î±×·¥ÀÌ 
                PATH¿¡ °É·ÁÀÖÁö ¾Ê´Ù¸é ./program °ú °°ÀÌ ½ÇÇàÇØ¾ß ÇÑ´Ù´Â Á¡À» 
                ÀØÁö ¸»ÀÚ.
                1. Perl ¸í·ÉÇà ¿É¼Ç
                PerlÀ» ¸í·ÉÇà¿¡¼ ½ÇÇàÇÒ °æ¿ì ¸ñÀû¿¡ µû¶ó 
                ´Ù¾çÇÑ ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. PerlÀÌ ½Ã½ºÅÛ µµ±¸·Î »ç¿ëµÉ ¶§ 
                ƯÈ÷ ¿É¼ÇÀ» ÀÚÁÖ »ç¿ëÇÏ°Ô µÇ´Âµ¥, ÁÖ·Î »ç¿ëµÇ´Â ¸í·ÉÇà ¿É¼ÇÀº 
                ´ÙÀ½°ú °°´Ù. 
                 
                
                        
                            | ¿É¼Ç | ¼³¸í | 
                    
                        | e | ÁÖ¾îÁø Perl ¸í·É ½ÇÇà | 
                    
                        | p | ÁöÁ¤ÇÑ ÆÄÀÏÀ» ´ë»óÀ¸·Î 
                            ÀÛ¾÷ | 
                    
                        | i | ¿øº»ÆÄÀÏÀ» °á°úÆÄÀÏ·Î 
                            ´ëü | 
                    
                        | c | ±¸¹®°Ë»ç(¹®¹ý¿¡·¯ 
                            Á¡°Ë) | 
                    
                        | v | Perl ¹öÀüÁ¤º¸ | 
                    
                        | V | Perl ¹öÀüÁ¤º¸(»ó¼¼) | 
                    
                        | w | °æ°í Ãâ·Â(°³¹ß°úÁ¤¿¡ 
                            ÁÖ·Î »ç¿ë) | 
                    
                        | U | ºñ¾ÈÀü¸ðµå, SUID Àû¿ë½Ã 
                            »ç¿ë | 
                
                 
                2. ¹®ÀÚ¿ Àϰý ġȯ
                ȸ»ç¸íÀ̳ª µµ¸ÞÀÎ, ¸ÞÀÏÁÖ¼Ò µîÀÌ ¹Ù²î¾úÀ» 
                ¶§ ¼ö¸¹Àº ¹®¼ÆÄÀÏ¿¡ ÀûÈù ³»¿ëÀ» ¸ðµÎ °íÄ¡±â¶õ ½¬¿î ÀÏÀÌ ¾Æ´Ï´Ù. 
                ÇÏÁö¸¸ PerlÀ» ÀÌ¿ëÇÏ¸é ³Ê¹«µµ °£´ÜÈ÷ º¯°æ ³»¿ëÀ» ¹Ý¿µÇÒ ¼ö ÀÖ´Ù. 
                ¾Æ·¡ ¸í·ÉÀº html È®ÀåÀÚ¸¦ Áö´Ñ ¹®¼ÆÄÀÏ¿¡¼ ¡°¿ìÁ¤¡±À̶ó´Â ¹®ÀÚ¿À» 
                ã¾Æ ¡°»ç¶û¡±À̶ó´Â ¹®ÀÚ¿·Î ¸ðµÎ ġȯÇÏ´Â ¸í·É(Perl ¸í·ÉÇà 
                ¿É¼Ç)ÀÌ´Ù.
   
                
                 
                find ¸í·ÉÀ» ÀÌ¿ëÇϸé ÇÏÀ§ °æ·ÎÀÇ ¹®¼µµ ÀϰýÀûÀ¸·Î 
                ġȯÇÒ ¼ö ÀÖ´Ù.
   
                
                 
                3. ÆÄÀÏ¸í ´ë¼Ò¹®ÀÚ Àϰýº¯°æ
                ÆÄÀϸíÀÇ ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê´Â ¿î¿µÃ¼Á¦(À©µµ¿ìÁî 
                µî)¿¡¼ »ý¼ºµÈ ÆÄÀϸíÀº ¸¹Àº ¹®Á¦¸¦ ¾ß±âÇϰï ÇÑ´Ù. ƯÈ÷ HTML 
                ¹®¼¿¡¼ ¸µÅ©¿À·ù¸¦ À¯¹ßÇϰųª ÆÄÀϸíÀ» ÀÔ·ÂÇÒ ¶§ ÀÔ·ÂÈ¥¼±À» 
                °¡Áß½Ã۱⵵ ÇÑ´Ù. ÇÏÁö¸¸ ´ÙÀ½ µµ±¸(recase)¸¦ ÀÌ¿ëÇÏ¸é ÆÄÀϸíÀ» 
                ¼Ò¹®ÀÚ ¶Ç´Â ´ë¹®ÀÚ·Î ÀϰýÀûÀ¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù.
   
                
                        
                            | $ lsHOME.GIF 
                            LIST.GIF NEXT.GIF
 $ recase * (¶Ç´Â $ recase 
                            -l *)
 $ ls
 home.gif list.gif next.gif
 $ recase -u *
 $ ls
 HOME.GIF LIST.GIF NEXT.GIF
 | 
                
                  
                
                        
                            | File Name : recase | 
                    
                        | #!/usr/bin/perl# »ç¿ë¹ý : recase [¿É¼Ç] [ÆÄÀÏ ¸®½ºÆ®]
 # ¿É¼Ç 
                            : -l(¼Ò¹®ÀÚ, ±âº»°ª), -u(´ë¹®ÀÚ)
 # ¿É¼Ç Á¡°Ë(¼Ò¹®ÀÚÈ 
                            ¶Ç´Â ´ë¹®ÀÚÈ)
 if($ARGV[0]  =~  /-L/i) 
                            { $method=¡±L¡±; shift; }
 elsif($ARGV[0]  =~ 
                             /-U/i) { $method=¡±U¡±; shift; }
 else 
                            { $method = ¡°L¡±; }
 foreach $file (@ARGV) {# 
                            µð·ºÅ丮ÀÎ °æ¿ì ó¸®ÇÏÁö ¾ÊÀ½
 next if -d $file;
 ($dir, $filename)  =  $file  =~  /(.*[¡¬/¡¬¡¬])(.*)$/;
 $filename = $file if $file !~ /¡¬//;
 # º¯°æÀÌ 
                            ÇÊ¿äÇÑ ÆÄÀϸíÀÎÁö È®ÀÎ
 next if $method eq ¡°L¡± 
                            and
 $filename  !~  /[A-Z]/;
 next 
                            if $method eq ¡°U¡± and
 $filename  !~  /[a-z]/;
 # ´ë¼Ò¹®ÀÚ º¯È¯
 $filename  =~  tr/A-Z/a-z/ 
                            if $method eq ¡°L¡±;
 $filename  =~  tr/a-z/A-Z/ 
                            if $method eq ¡°U¡±;
 if(-f ¡°$dir$filename¡±) 
                            {
 # »õ·Î¿î À̸§ÀÇ ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÏ´Â °æ¿ì
 print ¡°Already exist! : $dir$filename¡¬n¡±;
 next; }
 # ÆÄÀÏ¸í º¯°æ
 rename(¡°$file¡±, 
                            ¡°$dir$filename¡±);
 | 
                
                 
                ƯÁ¤°æ·Î ÀÌÇÏÀÇ ¸ðµç ÆÄÀϸíÀ» ¼Ò¹®ÀÚ·Î º¯°æÇÏ·Á¸é 
                ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ¸é µÈ´Ù.
   
                
                        
                            | $ find way-cart 
                            -type f -exec recase {} ¡¬;  | 
                
                 
                4. ¹®¼Çü½Ä º¯È¯(UNIX ¡ê DOS)
                PerlÀ̳ª shell ½ºÅ©¸³Æ® ÆÄÀÏÀ» ¹ÙÀ̳ʸ®(Binary) 
                ¸ðµå·Î Àü¼Û(FTP µî)ÇÏ¸é ½ºÅ©¸³Æ® ½ÇÇà½Ã ¿¡·¯°¡ ¹ß»ýÇϰï ÇÑ´Ù. 
                À̸¦ ±Øº¹Çϱâ À§Çؼ´Â ÆÄÀÏÀ» ¾Æ½ºÅ°(ASCII) ¸ðµå·Î ´Ù½Ã Àü¼ÛÇϸé 
                µÇÁö¸¸, PerlÀ» ÀÌ¿ëÇØ °£´ÜÈ÷ ÇØ°áÇÒ ¼öµµ ÀÖ´Ù. ÀÌ´Â ¾Õ¼ ¼³¸íÇÑ 
                ¡®¹®ÀÚ¿ ġȯ¡¯°ú µ¿ÀÏÇÑ ¿ø¸®´Ù.
   
                
                        
                            | # DOS ¡æ UNIX 
                            ¹®¼Çü½ÄÀ¸·Î º¯È¯$ perl -pi -e ¡°s/¡¬r//¡± 
                            *.cgi
 # UNIX ¡æ DOS ¹®¼Çü½ÄÀ¸·Î º¯È¯$ perl -pi -e ¡°s/¡¬n/¡¬r¡¬n/¡± *.txt
 | 
                
                 
                ¸í·É(Perl ¸í·ÉÇà ¿É¼Ç)ÀÌ ±â¾ïÇϱ⠽±Áö¸¸Àº 
                ¾ÊÀ» Å×´Ï shell ½ºÅ©¸³Æ®·Î Çѹø ¸¸µé¾î º¸ÀÚ. ÆÄÀÏ¿¡ ½ÇÇà±ÇÇÑÀ» 
                ºÎ¿©ÇÑ ÈÄ »ç¿ëÀÚµéÀÇ PATH¿¡ Æ÷ÇԵǾîÀÖ´Â °æ·Î(/usr/local/bin 
                µî)¿¡ À§Ä¡ÇØµÎ¸é Æí¸®ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
   
                
                
                        
                            | File Name : dos2unix | 
                    
                        | #!/bin/sh# DOS 
                            ¡æ UNIX ¹®¼Çü½ÄÀ¸·Î º¯È¯
 perl -pi -e ¡°s/¡¬r//¡± 
                            $*
 File Name : unix2dos#!/bin/sh
 # UNIX ¡æ DOS ¹®¼Çü½ÄÀ¸·Î º¯È¯
 perl -pi -e 
                            ¡°s/¡¬n/¡¬r¡¬n/¡± $*
 | 
                
                  
                
                 
                5. ÆÄÀÏ Å©±âÁ¤º¸ Ãâ·Â ¹× Ȱ¿ë
                ´ÙÀ½Àº ÁöÁ¤ÇÑ ÆÄÀÏÀÇ Å©±â¸¦ Ãâ·ÂÇÏ´Â µµ±¸(sizeof)·Î¼, 
                ¾ò¾îÁø Á¤º¸´Â ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼µµ Ȱ¿ëÇÒ ¼ö ÀÖ´Ù.
                  
                
                        
                            | File Name : sizeof | 
                    
                        | #!/usr/bin/perl# 1. ÆÄÀÏÅ×½ºÆ® ¿¬»êÀÚÁß -s(Size) ¿É¼Ç ÀÌ¿ë
 # 2. ÇϳªÀÇ ÆÄÀϸ¸ È®ÀÎÇÒ ¶§´Â
 # ´Ù¸¥ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ 
                            Ȱ¿ëÇÒ ¼ö ÀÖµµ·Ï
 # ÆÄÀÏÅ©±â¸¸ Ãâ·Â
 if($#ARGV 
                            eq 0) {
 print -s $ARGV[0]; exit; }
 foreach 
                            (@ARGV) {
 print ¡°$_ : ¡°, -s $_, ¡°¡¬n¡±; }
 | 
                
                 
                $ sizeof  *.cgi 
 way-admin.cgi : 
                46031
 way-board.cgi : 19065
 way-notice.cgi : 6264
                ±×·±µ¥ ÀÌ·± µµ±¸´Â ¾ðÁ¦ ¾²Àϱî? 
 ÇÊÀÚ´Â 
                ¸ÅÁÖ 1G byte°¡ ³Ñ´Â ÀڷḦ ¿ø°ÝÀ¸·Î ¹é¾÷ ¹Þ´Â´Ù. ±×·±µ¥ ¹é¾÷ÆÄÀÏÀÌ 
                ÀúÀåµÉ ÄÄÇ»Å͸¦ Ç×»ó ÄÑµÑ ¼ö ¾ø´Â Ư¼öÇÑ »óȲÀÎÁö¶ó ¹é¾÷ÀÌ Á¾·áµÇ¸é 
                ÀÚµ¿À¸·Î halt½ÃÄÑ¾ß ÇÑ´Ù. 
 ¹®Á¦´Â Á¤»óÀûÀ¸·Î ¹é¾÷ÀÌ ÀÌ·ç¾îÁ³´ÂÁö 
                ¾Ë ¼ö ¾ø´Â »óÅ¿¡¼ ¹«Åδë°í halt½ÃÄѼ´Â ¾ÈµÈ´Ù´Â Á¡ÀÌ´Ù. ±×·¡¼ 
                »ý°¢Çس½ °ÍÀº(¹°·Ð ´Ù¸¥ ¹æ¹ýÀ¸·Îµµ °¡´ÉÇÏ´Ù.) ¼ö½ÅµÈ ¹é¾÷ÆÄÀÏ 
                Å©±â¸¦ È®ÀÎÇÏ¿© ¿øº»ÆÄÀϰú µ¿ÀÏÇÑ Å©±âÀÏ °æ¿ì¸¸ halt¸í·ÉÀ» ½ÇÇàÇϵµ·Ï 
                ÇÏ´Â °ÍÀÌ´Ù.
   
                
                        
                            | File Name : remotebackup | 
                    
                        | 
                                #!/bin/sh# »ç¿ë¹ý : remotebackup 
                                [¹é¾÷ÆÄÀÏÅ©±â]
 # ÆÄÀÏ ´Ù¿î·Îµå
 ncftpget 
                                -u way -p ¡°********¡±  ¡¬
 ¡°ftp://way.co.kr/backup/19991231.tar.gz¡±
 # ¿ÜºÎ¸í·ÉÀÎ Perl ÇÁ·Î±×·¥À» ½ÇÇàÇϰí
 # 
                                °á°ú¸¦ ¹Þ¾Æ¿À±â À§ÇØ Perl¿¡¼¿Í ¸¶Âù°¡Áö·Î
 # shell ½ºÅ©¸³Æ®µµ `(¿ªµû¿ÈÇ¥)±âÈ£ »ç¿ë
 SIZE=`sizeof 19991231.tar.gz`
 # ÀÔ·ÂÇÑ ÆÄÀÏÅ©±â¿Í 
                                ¹é¾÷ ¹ÞÀº ÆÄÀÏÅ©±â ºñ±³
 if [ ¡°X$1¡± = ¡°X${SIZE}¡± 
                                ]
 # ÀÏÄ¡(Á¤»ó¹é¾÷)ÇÒ °æ¿ì ½Ã½ºÅÛ Á¾·á
 then halt
 fi
 | 
                
                 
                6. ¼öÄ¡Á¤º¸ Äĸ¶ Ç¥±â
                  
                
                        
                            | File Name : comma | 
                    
                        | #!/usr/bin/perl# »ç¿ë¹ý : comma [¼öÄ¡]
 1 while $ARGV[0]   =~ 
                              s/(¡¬d+)(¡¬d{3})/$1,$2/;
 print $ARGV[0];
 | 
                
                 
                ÀÌ µµ±¸´Â ¶Ç ¾ðÁ¦ »ç¿ëµÉ±î? ÇÊÀÚ´Â °èÁ¤ »ç¿ëÀÚÀÇ 
                À¥¼¹ö ·Î±×ÆÄÀÏÀ» ÀÌ¿ëÇØ ÀÏÀÏ ÀÚ·á Àü¼Û·®À» »êÃâÇÑ´Ù. »êÃâµÈ 
                Á¤º¸¸¦ Ãâ·ÂÇÒ ¶§ ½Äº°À» ¿ëÀÌÇÏ°Ô Çϱâ À§ÇØ ÀÌ µµ±¸¸¦ ÀÌ¿ëÇØ 
                3ÀÚ¸®¸¶´Ù Äĸ¶¸¦ ³Ö¾î Ãâ·ÂÇϰí ÀÖ´Ù.
                $ comma 1234567890
 1,234,567,890
                ¾Õ¼ ¼Ò°³ÇÑ remotebackup°ú ¸¶Âù°¡Áö·Î shell 
                ½ºÅ©¸³Æ® µîÀÇ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ¿ÜºÎ¸í·ÉÀ¸·Î comma ¸í·ÉÀ» »ç¿ëÇϸé 
                º¸±â ÁÁ°Ô ¼öÄ¡Á¤º¸¸¦ Ç¥½ÃÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
                ÆÄÀÏ Å©±â¸¦ ÆÄ¾ÇÇÑ ÈÄ º¸±â ÁÁ°Ô Ãâ·ÂÇØº¸ÀÚ.
                $ comma `sizeof way-board.cgi`
 19,065
                 
                7. ÆÄÀÏ ºÎºÐ Ãâ·Â
                ÀÌÁ¦ ¼Ò°³ÇÒ µµ±¸´Â ƯÁ¤ ÆÄÀÏÀÇ ÀϺκÐÀ» Ãâ·ÂÇÏ´Â 
                µµ±¸´Ù. ¿¹¸¦ µé¾î tmp¶ó´Â ÆÄÀÏÀÇ 5¹øÂ° ÁÙºÎÅÍ 3ÁÙÀ» Ãâ·ÂÇϰíÀÚ 
                ÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù.
                  
                
                 
                $ cat tmp
 Line 1
 Line 2
 Line 3
 
                Line 4
 Line 5
 Line 6
 Line 7
 Line 8
 Line 
                9
 Line 10
                $ partprint 5 3 tmp
                        FILE 
                : tmp
         LINE 
                : (from 5 to 7 / total 10)
                Line 5
 Line 6
 Line 7
                  
                
                        
                            | File Name : partprint | 
                    
                        | #!/usr/bin/perl# »ç¿ë¹ý : partprint [½ÃÀÛÁÙ] [Ãâ·ÂÁÙ] [ÆÄÀÏ]
 $start = shift;
 $end = shift;
 $filename 
                            = shift;
 open(FILE, ¡°$filename¡±) or
 die 
                            ¡°Error: $filename, $!¡±;
 @File = <FILE>;
 close(FILE);
 $start --;
 $start = 0 if $start 
                            < 0;
 $end = 0 if $end < 0;
 $end  --;
 $end = $start + $end;
 print ¡°=¡± x 80, ¡°¡¬n¡±;
 print ¡°FILE : $filename¡¬n¡±;
 print ¡°LINE 
                            : ¡°;
 print ¡°(from ¡°, $start + 1, ¡° to ¡°, 
                            $end + 1,
 ¡° / total ¡°, $#File+1, ¡°)¡¬n¡±;
 print ¡°=¡± x 80, ¡°¡¬n¡±;
 @File = @File[$start 
                            .. $end];
 foreach (@File) { print $_; }
 | 
                
                 
                8. À¥È£½ºÆÃ ¼¹ö°ü¸® ½Ã½ºÅÛ
                ÀÌÁ¦ °£´ÜÇϸ鼵µ Á¾ÇÕÀûÀÎ ±â´ÉÀ» ¼öÇàÇÏ´Â 
                ½Ã½ºÅÛ µµ±¸¸¦ ¸¸µé¾î º¸ÀÚ. ÀÌ µµ±¸´Â ¼¼ °÷ÀÇ À¥È£½ºÆÃ ¾÷ü¿¡¼ 
                10°³¿ù ÀüºÎÅÍ À¯¿ëÇÏ°Ô »ç¿ëµÇ°í ÀÖ´Ù. Áö¸éÀ¸·Î ¿Å±â±â ¾î·Á¿î 
                ÀϺΠ±â´ÉÀº ¹èÁ¦ÇÏ¿´À¸¸ç, ¼Ò½º¸¦ ¼Ò°³ÇÏ°í °¢ ºÎºÐÀÇ ±â´ÉÀ» ¼³¸íÇÔÀ¸·Î½á 
                ÀÌÇØ¿Í ÀÀ¿ëÀ» µ½°íÀÚ ÇÑ´Ù.
 ½ÇÁ¦ »ç¿ëÀ» ¿øÇÑ´Ù¸é Àӽà ¼¹ö¸¦ 
                ÀÌ¿ëÇØ ¿©·¯ Â÷·Ê ½ÃÇèÀ» °ÅÄ£ ÈÄ »ç¿ëÇϱ⸦ ±ÇÇϸç super user 
                ±ÇÇÑÀ¸·Î ½ÇÇàµÇ¹Ç·Î ¼¼½ÉÇÑ ÁÖÀǸ¦ ¿äÇÑ´Ù.
                ÁÖ¿ä ±â´ÉÀº ´ÙÀ½°ú °°´Ù.
 °¡. »ç¿ëÀÚ °èÁ¤ 
                °ü¸®
 ³ª. POP °èÁ¤ °ü¸®
 ´Ù. µð½ºÅ© ÇÒ´ç
 ¶ó. µµ¸ÞÀÎ 
                ¼³Á¤
 ¸¶. µ¥¸ó(bind, sendmail, apache) °ü¸®
                #!/usr/bin/perl
 #=====================================
 
                config();
 menu();
 #=====================================
                sub config {
 # ÀÌ ·çƾÀº ½Ã½ºÅÛ¿¡¼ »ç¿ëÇÒ 
                ÁÖ¿ä ¼³Á¤À» ¼±¾ðÇÏ´Â
 # ºÎºÐÀÌ´Ù.
                # ±×·ì ¹× »ç¿ëÀÚ ±âº»°ªÀ¸·Î¼
 # ÀÌ¹Ì Á¸ÀçÇÏ´Â 
                ±×·ì ¹× »ç¿ëÀÚ¿©¾ß ÇÑ´Ù.
 # °èÁ¤ Ãß°¡½Ã ±âº» ±×·ì
 $user_basegroup 
                = ¡°user¡±;
 # POP°èÁ¤ Ãß°¡½Ã ±âº» ±×·ì
 $pop_basegroup 
                = ¡°pop¡±;
 # µð½ºÅ© ÇÒ´ç Ç¥º» »ç¿ëÀÚ
 $disk_baseuser 
                = ¡°way¡±;
                # »ç¿ëÀÚ °èÁ¤ °ü¸® µî¿¡¼ Á¶ÀÛÀÌ Çã¿ëµÇ´Â 
                ÃÖ¼Ò UID
 $min_uid = 500;
                # »ç¿ëÀÚ¿¡°Ô ºÎ¿©ÇÒ IP ÁÖ¼Ò¸¦ ±â·ÏÇÑ´Ù.
 
                # Name-based Virtual Host(apache)¸¦ ÀüÁ¦·Î ÇÑ´Ù.
 $ip_address 
                = ¡°210.123.12.1¡±;
                # ¾Æ·¡ °æ·ÎµéÀº /etc/skel¿¡ ¹Ì¸® »ý¼ºµÇ¾î 
                ÀÖ¾î¾ß ÇÑ´Ù.
 # $ mkdir /etc/skel/public_html  /etc/skel/wwwlog
 
                # À¥¹®¼ °æ·Î
 $webdir = ¡°public_html¡±;
 # À¥·Î±× °æ·Î
 
                $logdir = ¡°wwwlog¡±;
                # ¾Æ·¡´Â Ư¼öÇÑ °æ¿ì°¡ ¾Æ´Ñ ÇÑ º¯°æÇÒ Çʿ䰡 
                ¾ø´Ù.
 # shadow ½Ã½ºÅÛÀ» »ç¿ëÇÏ´õ¶óµµ º¯°æÇÒ Çʿ䰡 ¾ø´Ù.
 
                # ºñ¹Ð¹øÈ£ ÆÄÀÏ
 $pass_file = ¡°/etc/passwd¡±;
 # ±×·ìÆÄÀÏ
 
                $group_file = ¡°/etc/group¡±;
                # Message
 $prog_msg = ¡°[MSG] ¡°;
 
                }
                #=====================================
                sub menu {
 # ÀÌ ·çƾÀº ±âº» ¸Þ´ºÈ¸éÀ» 
                Ãâ·ÂÇÏ´Â ±â´ÉÀ» ÇÑ´Ù.
                # ½ÇÇàÀÚ°¡ super user°¡ ¾Æ´Ï¸é Á¾·áÇÑ´Ù.
 
                chomp($run_id = `id -u`);
 if($run_id ne ¡°0¡±) {
 print 
                ¡°$prog_msg ½ÇÇà±ÇÇÑÀÌ ¾ø½À´Ï´Ù.(UID:$run_id)¡¬n¡±;
 exit; 
                }
                # get_date ÇÔ¼ö¸¦ ÅëÇØ ÇöÀç ½Ã°£Á¤º¸¸¦ ¾ò´Â´Ù.
 
                $date_info = get_date(time);
 $date_seri = ¡°$date_info¡± 
                . ¡°01¡±;
                # ȸéÀ» Á¤¸®Çϰí Ãâ·ÂÇÑ´Ù.
 system(¡°clear¡±);
 
                print  <<¡±__END__¡±;
                        À¥È£½ºÆÃ 
                ¼¹ö °ü¸® ½Ã½ºÅÛ
 11. °èÁ¤ µî·Ï                      26. 
                »ç¿ëÀÚ password ÁöÁ¤
 12. °èÁ¤ »èÁ¦                      27.
 
                13. °èÁ¤ Á¶È¸                      28. 
                ÇÁ·Î¼¼¼ Á¶È¸
 14. Àüü °èÁ¤ Á¶È¸               29. 
                µ¥¸ó °ü¸®
 15. POP °èÁ¤ µî·Ï               30.
 
                16.                                    31.
 
                17. µð½ºÅ© ÇÒ´ç                   32.
 
                18. µð½ºÅ© ÇÒ´ç(¼öµ¿)           33.
 
                19. µð½ºÅ© ÇÒ´ç Á¶È¸            34.
 
                20.                                    35.
 
                21. µµ¸ÞÀÎ µî·Ï                   36.
 
                22. µµ¸ÞÀÎ Á¤º¸ °»½Å            37.
 
                23. µµ¸ÞÀÎ Á¤º¸ »ó¼¼Á¶È¸      38.
 
                24.                                    39.
 
                25.                                    40.
 
                ¡¬¡¬. EXIT
 __END__
                print ¡° ¼±Åà : ¡°;
 $choice  =  <STDIN>;
 
                chomp $choice;
 print ¡°-¡±  x 80, ¡°¡¬n¡±;
 # ÀÔ·ÂÇÑ 
                ¸Þ´º¹øÈ£¿¡ µû¶ó ÇØ´çµÇ´Â ±â´ÉÀ» ¼öÇàÇÑ´Ù.
 if ($choice eq 
                11) { add_user(); }
 elsif ($choice eq 12) { delete_user(); 
                }
 elsif ($choice eq 13) { query_user(); }
 elsif ($choice 
                eq 14) { all_user_info(); }
 elsif ($choice eq 15) { pop_add(); 
                }
 elsif ($choice eq 17) { disk_quota(); }
 elsif ($choice 
                eq 18) { disk_quota_edit(); }
 elsif ($choice eq 19) { disk_query(); 
                }
 elsif ($choice eq 21) { add_domain(); }
 elsif ($choice 
                eq 22) { domain_apply(); }
 elsif ($choice eq 23) { domain_display(); 
                }
 elsif ($choice eq 26) { pass_define(); }
 elsif ($choice 
                eq 28) { ps_ax(); }
 elsif ($choice eq 29) { demon(); }
 
                elsif ($choice eq ¡°¡¬¡¬¡±) { print ¡°¡¬nbye...¡¬n¡¬n¡±; exit; 
                }
 else { menu(); }
                }
                #=====================================
                # ¿©±â¼ºÎÅÍ´Â ½Ã½ºÅÛ¿¡¼ °øÅëÀûÀ¸·Î »ç¿ëµÇ´Â
 
                # ÇÔ¼öµéÀÌ´Ù.
                sub check {
 # ¸í·ÉÀÇ ½ÇÇàÀ» ÃÖÁ¾ÀûÀ¸·Î 
                È®ÀÎÇϵµ·Ï ÇÏ´Â ·çƾ
 print ¡°$prog_msg È®½ÇÇմϱî? [yes/No] 
                ¡°;
 $input  =  <STDIN>;
 chomp $input;
 
                if ($input  =~  /yes/i) { return; }
 else { print 
                ¡°¡¬n$prog_msg ½ÇÇàÀ» Ãë¼ÒÇÕ´Ï´Ù. [Enter] ¡°;
 $input = <STDIN>;
 
                menu(); }
 }
                sub end {
 # ½ÇÇà°á°ú¸¦ Ãâ·ÂÇϰí ÃʱâÈÇÏ´Â 
                ·çƾ
 local ($end) = @_;
 if ($end eq ¡°¡±) { $end = ¡°Ã³¸®°¡ 
                ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±; }
 print ¡°¡¬n$prog_msg $end [Enter] ¡°;
 
                $input = <STDIN>;
 exec(¡°$0¡±);
 }
                sub file_error {
 # ÆÄÀÏ Á¶À۽à ¹®Á¦°¡ 
                ¹ß»ýÇÏ¸é ¿¡·¯»ç½ÇÀ» °æ°íÇÏ´Â ·çƾlocal ($err) = @_;
 if ($err 
                eq ¡°¡±) { $err = ¡°ÆÄÀÏ ÀúÀå ¿À·ù, $FILE¡±; }
 print ¡°=¡± 
                x 30 . ¡° Áß´ë ¿À·ù ¹ß»ý ¡° . ¡°=¡±  x 30 . ¡°¡¬n¡±;
 
                print ¡° ¿À·ù ³»¿ë : $err ¡¬n¡±;
 print ¡°=¡± x 80;
 print 
                ¡°Áß´ëÇÑ ¿À·ùÀÔ´Ï´Ù.¡±;
 print ¡° ÇØ´ç ÆÄÀÏÀ» ¸é¹ÐÈ÷ °ËÅäÇϽñâ 
                ¹Ù¶ø´Ï´Ù.¡¬n¡±;
 exit;
 }
                sub user_check {
 # ³Ñ°Ü¹ÞÀº »ç¿ëÀÚ ID 
                µîÀÇ Á¤º¸¸¦ ÀÌ¿ëÇØ »ç¿ëÀÚ Á¤º¸¸¦
 # ¾ò´Â ÇÔ¼ö
 local ($search_data, 
                $search_field) = @_;
 $FILE = ¡°$pass_file¡±;
 open(FILE, 
                ¡°$FILE¡±) || file_error(¡°ÆÄÀÏ Àб⠿À·ù, $FILE¡±);
 while($user_data 
                = <FILE>) {
 chomp $user_data;
 @ud  =  split(¡°:¡±, 
                $user_data);
 $search_fld  =  $search_field  - 
                1;
 $search_fld_data = $ud[$search_fld];
 if ($search_data 
                eq $search_fld_data) {
 return $user_data; }
 } 
 close(FILE);
 
                return 0;
 }
                sub group_check {
 # ³Ñ°Ü¹ÞÀº ±×·ì ID µîÀÇ 
                Á¤º¸¸¦ ÀÌ¿ëÇØ ±×·ì Á¤º¸¸¦
 # ¾ò´Â ÇÔ¼ö
 local ($search_data, 
                $search_field) = @_;
 $FILE = ¡°$group_file¡±;
 open(FILE, 
                ¡°$FILE¡±) || file_error(¡°ÆÄÀÏ Àб⠿À·ù, $FILE¡±);
 while($group_data 
                 =  <FILE>) {
 chomp $group_data;
 @gd 
                = split(¡°:¡±, $group_data);
 $search_fld = $search_field 
                - 1;
 $search_fld_data = $gd[$search_fld];
 if ($search_data 
                eq $search_fld_data) {
 return $group_data; }
 } 
 
                close(FILE);
 return 0;
 }
                sub get_date {
 # ½Ã°£Á¤º¸¸¦ ¾ò´Â ÇÔ¼ö
 
                local ($data) = @_;
 local ($second, $minute, $hour, $date, 
                $month,
 $year, $weekday, $yearday, $Isdst) = localtime($data);
 
                $month  ++;
 $year  +=  1900;
 $month  < 
                 10 && ($month  = ¡°0$month¡±);
 $date 
                 <  10 && ($date  = ¡°0$date¡±);
 
                $hour  <  10 && ($hour  = ¡°0$hour¡±);
 
                $minute  <  10 && ($minute  = ¡°0$minute¡±);
 
                $second  <  10 && ($second  = ¡°0$second¡±);
 
                return ¡°$year$month$date¡±;
 }
                #=====================================
                # ¿©±â¼ºÎÅÍ´Â ¸Þ´º¿¡ ³ª¿µÈ ½ÇÁ¦ ÀÛ¾÷À» ¼öÇàÇÏ´Â
 
                # ·çƾÀÌ´Ù.
                sub add_user {
 # 11. °èÁ¤ µî·Ï
 print 
                ¡°$prog_msg µî·ÏÇÒ »ç¿ëÀÚ ID : ¡°;
 $id  =  <STDIN>;
 
                chomp $id;
 if ($id eq ¡°¡±) { add_user(); }
 if ($id 
                eq ¡°¡¬¡¬¡±) { menu(); }
 if (user_check($id, ¡°1¡±)) {
 
                end(¡°ÀÌ¹Ì µî·ÏµÇ¾îÀÖ´Â IDÀÔ´Ï´Ù.¡±); }
 print ¡°$prog_msg 
                µî·ÏÇÒ »ç¿ëÀÚÀÇ ¼Ò¼Ó±×·ì¡±;
 print ¡°(default=$user_basegroup) 
                : ¡°;
 $grp  =  <STDIN>;
 chomp $grp;
 
                if  ($grp eq ¡°¡±) { $grp = $user_basegroup; }
 if  ($grp 
                eq ¡°¡¬¡¬¡±) { menu(); }
 if  (!group_check($grp, ¡°1¡±)) 
                {
 end(¡°µî·ÏµÇÁö ¾ÊÀº GROUPÀÔ´Ï´Ù.¡±); }
 check();
 
                # adduser ¸í·É¿¡ -g ¿É¼ÇÀ» »ç¿ëÇØ ±×·ìÀ» ÁöÁ¤ÇÑ´Ù.
 system(¡°/usr/sbin/useradd 
                $id -g $grp¡±);
 # À¥·Î±× °æ·ÎÀÇ ¼ÒÀ¯±ÇÀ» super user·Î ¹Ù²Û´Ù.
 
                system(¡°/bin/chown 0.0 /home/$id/$logdir¡±);
 end();
 
                }
                sub delete_user {
 # 12. °èÁ¤ »èÁ¦
 
                print ¡°$prog_msg »èÁ¦ÇÒ »ç¿ëÀÚ ID : ¡°;
 $id  =  <STDIN>;
 
                chomp $id;
 if  ($id eq ¡°¡±) { delete_user(); }
 
                if  ($id eq ¡°¡¬¡¬¡±) { menu(); }
 if  (!($user_data 
                = user_check($id, ¡°1¡±))) {
 end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); 
                }
 ($ud1, $ud2, $ud3, $ud4, $ud5, $ud6, $ud7)
 =  split(¡°:¡±, 
                $user_data);
 if  ($ud3 < $min_uid) { 
 end(¡°ÇØ´ç 
                ID¸¦ »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù.¡±); }
 check();
 # userdel ¸í·É¿¡ 
                -r ¿É¼ÇÀ» ÀÌ¿ëÇØ °èÁ¤À» »èÁ¦ÇÑ´Ù.
 # ÀڷẸȣ¸¦ À§ÇØ »èÁ¦ÇÒ 
                °èÁ¤ÀÇ È¨°æ·Î°¡ /home °æ·Î
 # ÇÏÀ§¿¡ À§Ä¡ÇÏÁö ¾ÊÀ¸¸é Ȩ°æ·Î¸¦ 
                »èÁ¦ÇÏÁö ¾Ê´Â´Ù.
 if($ud6 =~ /^¡¬/home/) { $home_del = ¡°-r¡±; 
                }
 system(¡°/usr/sbin/userdel $home_del $id¡±);
 end();
 
                }
                sub query_user {
 # 13. °èÁ¤ Á¶È¸
 # 
                ÁöÁ¤ÇÑ »ç¿ëÀÚ¿¡ ´ëÇØ ´ÙÀ½°ú °°Àº °á°ú¸¦ Ãâ·ÂÇÑ´Ù.
 # [MSG] 
                Á¶È¸ÇÒ »ç¿ëÀÚ ID : way
 # [MSG] ID : way (539)
 # [MSG] 
                GROUP : user (500)
 # [MSG] HOME DIR : /home/way
 # [MSG] 
                SHELL : /bin/bash
 print ¡°$prog_msg Á¶È¸ÇÒ »ç¿ëÀÚ ID : ¡°;
 
                $id  =  <STDIN>;
 chomp $id;
 if  ($id 
                eq ¡°¡±) { query_user(); }
 if  ($id eq ¡°¡¬¡¬¡±) { 
                menu(); } 
 if  (!($user_data = user_check($id, ¡°1¡±))) 
                {
 end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
 ($ud1, $ud2, $ud3, 
                $ud4, $ud5, $ud6, $ud7)
 =  split(¡°:¡±, $user_data);
 
                $s_group  =  $ud4;
 if  (!($group_data = group_check($s_group, 
                ¡°3¡±))) {
 end(¡°µî·ÏµÇÁö ¾ÊÀº GROUPÀÔ´Ï´Ù. (GID=$s_group)¡±); 
                }
 ($gd1, $gd2, $gd3, $gd4) = split(¡°:¡±, $group_data);
 
                print ¡°$prog_msg ID : $id ($ud3)¡¬n¡±;
 print ¡°$prog_msg 
                GROUP : $gd1 ($s_group)¡¬n¡±;
 p
                rint ¡°$prog_msg HOME DIR : $ud6¡¬n¡±;
 
                print ¡°$prog_msg SHELL : $ud7¡¬n¡¬n¡±;
 end(¡°Á¶È¸°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±);
 
                }
                sub all_user_info {
 # 14. Àüü °èÁ¤ Á¶È¸
 
                # ºñ¹Ð¹øÈ£ ÆÄÀÏÀ» Ãâ·ÂÇÑ´Ù.
 $FILE = ¡°$pass_file¡±;
 
                open(FILE, ¡°$FILE¡±) || file_error(¡°ÆÄÀÏ Àб⠿À·ù, $FILE¡±);
 
                while($user_data  =  <FILE>) {
 chomp $user_data;
 
                @ud = split(¡°:¡±, $user_data);
 $search_fld_data = $ud[2];
 
                if ($search_fld_data > =  $min_uid ) {
 $print_data 
                .= ¡°$user_data¡¬n¡±; }
 }
 close(FILE);
 print $print_data;
 
                end(¡°Á¶È¸°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±);
 }
                sub pop_add {
 # 15. POP °èÁ¤ µî·Ï
 
                print ¡°$prog_msg µî·ÏÇÒ POP ID : ¡°;
 $id  =  <STDIN>;
 
                chomp $id;
 if  ($id eq ¡°¡±) { pop_add(); }
 if 
                 ($id eq ¡°¡¬¡¬¡±) { menu(); }
 if  (user_check($id, 
                ¡°1¡±)) {
 end(¡°ÀÌ¹Ì µî·ÏµÇ¾îÀÖ´Â IDÀÔ´Ï´Ù.¡±); }
 print 
                ¡°$prog_msg µî·ÏÇÒ »ç¿ëÀÚÀÇ ¼Ò¼Ó±×·ì¡±;
 print ¡°(default=$pop_basegroup) 
                : ¡°;
 $grp = <STDIN>;
 chomp $grp;
 if  ($grp 
                eq ¡°¡±) { $grp = $pop_basegroup; }
 if  ($grp eq ¡°¡¬¡¬¡±) 
                { menu(); }
 if  (!group_check($grp, ¡°1¡±)) {
 end(¡°µî·ÏµÇÁö 
                ¾ÊÀº GROUPÀÔ´Ï´Ù.¡±); }
 check();
 # POP °èÁ¤Àº noshellÀ̶ó´Â 
                °£´ÜÇÑ ½©½ºÅ©¸³Æ®¸¦
 # ±âº» shell·Î ÁöÁ¤ÇÑ´Ù.
                File Name : /usr/local/bin/noshell
 #!/bin/sh
 
                echo
 echo ¡° ============================= ¡°
 echo ¡° 
                ÇöÀç Á¢¼ÓÇϽŠID´Â¡±
 echo ¡° TELNET, FTP Á¢¼ÓÀÌ Çã¿ëµÇÁö¡±
 
                echo ¡° ¾Ê½À´Ï´Ù.¡±
 echo ¡° ============================= 
                ¡°
 echo
                system(¡°/usr/sbin/useradd $id -g $grp -M 
                 ¡¬¡¬
 -s /usr/local/bin/noshell -d /¡±);
 end();
 
                }
                sub disk_quota {
 # 17. µð½ºÅ© ÇÒ´ç
 
                # quota ±â´ÉÀ» ÀÌ¿ëÇØ »ç¿ëÀÚÀÇ µð½ºÅ©¸¦ ÇÒ´çÇÑ´Ù.
 print 
                ¡°$prog_msg µð½ºÅ©¸¦ ÇÒ´çÇÒ »ç¿ëÀÚ ID : ¡°;
 $id  = 
                 <STDIN>;
 chomp $id;
 if  ($id eq ¡°¡±) 
                { disk_quota(); }
 if  ($id eq ¡°¡¬¡¬¡±) { menu(); }
 
                if  (!user_check($id, ¡°1¡±)) {
 end(¡°µî·ÏµÇÁö ¾ÊÀº 
                IDÀÔ´Ï´Ù.¡±); }
 print ¡°$prog_msg Ç¥º» »ç¿ëÀÚ ID(default:$disk_baseuser) 
                : ¡°;
 $id_2  =  <STDIN>;
 chomp $id_2;
 
                if  ($id_2 eq ¡°¡±) { $id_2 = $disk_baseuser; }
 if 
                 ($id_2 eq ¡°¡¬¡¬¡±) { menu(); }
 if  (!user_check($id_2, 
                ¡°1¡±)) {
 end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
 check();
 
                # edquota ¸í·É¿¡ -p ¿É¼ÇÀ» ÀÌ¿ëÇØ »õ·Î ÁöÁ¤ÇÒ
 # »ç¿ëÀÚ¿¡°Ô 
                Ç¥º» »ç¿ëÀÚÀÇ µð½ºÅ© ÇÒ´çÁ¤º¸¸¦
 # º¹»çÇÑ´Ù.(man edquota)
 
                system(¡°/usr/sbin/edquota -p $id_2 $id¡±);
 end();
 }
                sub disk_quota_edit {
 # 18. µð½ºÅ© ÇÒ´ç(¼öµ¿)
 
                print ¡°$prog_msg µð½ºÅ©¸¦ ÇÒ´çÇÒ »ç¿ëÀÚ ID : ¡°;
 $id  = 
                 <STDIN>;
 chomp $id;
 if  ($id eq ¡°¡±) 
                { disk_quota_edit(); }
 if  ($id eq ¡°¡¬¡¬¡±) { menu(); 
                }
 if  (!user_check($id, ¡°1¡±)) {
 end(¡°µî·ÏµÇÁö 
                ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
 check();
 system(¡°/usr/sbin/edquota 
                -u $id¡±);
 end();
 } 
                sub disk_query {
 # 19. µð½ºÅ© ÇÒ´ç Á¶È¸
 
                print ¡°$prog_msg µð½ºÅ© »ç¿ë»óȲÀ» Á¶È¸ÇÒ¡±;
 print ¡° »ç¿ëÀÚ 
                ID(default:all) : ¡°;
 $id  =  <STDIN>;
 
                chomp $id;
 if  ($id eq ¡°¡±) { $id = ¡°ALL¡±; }
 
                if  ($id eq ¡°¡¬¡¬¡±) { menu(); }
 if  ( !user_check($id, 
                ¡°1¡±) && ($id ne ¡°ALL¡±) ) {
 end(¡°µî·ÏµÇÁö ¾ÊÀº 
                IDÀÔ´Ï´Ù.¡±); }
 # Àüü »ç¿ëÀÚÀÇ µð½ºÅ© Á¤º¸´Â repquota ¸í·É
 
                # (man repquota)À» ÀÌ¿ëÇϰí, °³º° »ç¿ëÀÚ´Â quota ¸í·É
 # 
                (man quota)À» ÀÌ¿ëÇÑ´Ù.
 if($id eq ¡°ALL¡±) { system(¡°/usr/sbin/repquota 
                -avug¡±); }
 else { system(¡°/usr/bin/quota -u $id¡±); }
 
                end(¡°Á¶È¸°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.¡±);
 }
                sub add_domain {
 # 21. µµ¸ÞÀÎ µî·Ï
 
                print ¡°$prog_msg µµ¸ÞÀÎÀ» µî·ÏÇÒ »ç¿ëÀÚ ID : ¡°;
 $id  = 
                 <STDIN>;
 chomp $id;
 if  ($id eq ¡°¡±) 
                { add_domain(); }
 if  ($id eq ¡°¡¬¡¬¡±) { menu(); }
 
                if  (!user_check($id, ¡°1¡±)) {
 end(¡°µî·ÏµÇÁö ¾ÊÀº 
                IDÀÔ´Ï´Ù.¡±); }
 print ¡°$prog_msg µî·ÏÇÒ µµ¸ÞÀÎ(ex. abcd.co.kr) 
                : ¡°;
 $domain  =  <STDIN>;
 chomp $domain;
 
                if  ($domain eq ¡°¡±) { add_domain(); }
 if  ($domain 
                eq ¡°¡¬¡¬¡±) { menu(); }
 $domain  =~  tr/[A-Z]/[a-z]/;
 
                $domain  =~  s/^ +| + _$//g;
 # Áߺ¹À» ¸·±â À§ÇØ 
                ³×ÀÓ¼¹ö zone ÆÄÀÏÀÌ
 # ÀÌ¹Ì Á¸ÀçÇÏ´ÂÁö Á¡°ËÇÑ´Ù.
 if(-e 
                ¡°/var/named/custom/$domain¡±) {
 print ¡°¡¬n$prog_msg ERROR, 
                µ¿ÀÏÇÑ µµ¸ÞÀÎÀÌ¡±;
 print ¡° ÀÌ¹Ì µî·ÏµÇ¾î ÀÖ½À´Ï´Ù. [Enter] 
                ¡°;
 $input  =  <STDIN>;
 menu(); }
 
                check();
                # bind 8.x´ë¿¡¼ »ç¿ëÇÏ´Â /etc/named.conf¿¡
 
                # Ãß°¡ÇÒ Á¤º¸¸¦ »ý¼ºÇÑ´Ù.
 $named_conf  =  <<¡±__END__¡±;
                zone ¡°$domain¡± {
 type master;
 file 
                ¡°custom/$domain¡±;
 };
                __END__
                # zone ÆÄÀÏ(/var/named/custom/µµ¸ÞÀθí)¿¡
 
                # ±â·ÏÇÒ Á¤º¸¸¦ »ý¼ºÇÑ´Ù.
 # serial ºÎºÐÀÇ $date_seri °ªÀº 
                ÀÏÀÚÁ¤º¸¿¡
 # ¹øÈ£(01)¸¦ Á¶ÇÕÇÑ °ª(1999123101)À» »ç¿ëÇÑ´Ù.
 
                $named_zone  =  <<¡±__END__¡±;
         @       IN      SOA     ns.way.co.kr 
                domain.way.co.kr.
         (
 
                                                $date_seri 
                  ; serial
                                 8H 
                ; refresh
                                 2H 
                ; retry
                                 1W 
                ; expiry
                                 1D 
                ) ; minimum
                                IN      NS 
                     ns.way.co.kr.
                 IN      NS       
                dns.way.co.kr.
                 IN      A 
                      $ip_address
                 IN      MX 
                     10 mail.way.co.kr.
     www     IN      A 
                      $ip_address
                 IN      MX 
                     10 mail.way.co.kr.
 __END__
                # apache ¼³Á¤ÆÄÀÏ(httpd.conf)ÀÇ VirtualHost
 
                # Á¤º¸¸¦ »ý¼ºÇÑ´Ù.
 # httpd.conf ÆÄÀÏ¿¡ ¹Ì¸® NameVirtualHost
 
                # Áö½ÃÀÚ¸¦ ¼±¾ðÇØ µÎ¾î¾ß ÇÑ´Ù.
 # Ãß°¡ÇÒ ¸ðµç µµ¸ÞÀÎÀÌ µ¿ÀÏÇÑ 
                IP¸¦ »ç¿ëÇÏ´Â
 # Name-based Virtual Host ÀÓÀ» ÀüÁ¦·Î ÇÑ´Ù.
 
                $httpd_conf  =  <<¡±__END__¡±;
 <VirtualHost 
                $ip_address>
 ServerAdmin webmaster\@$domain
 DocumentRoot 
                /home/$id/$webdir
 ScriptAlias /cgi-bin/ /home/$id/$webdir/cgi-bin/
 
                ServerName www.$domain
 ServerAlias $domain www.$domain
 
                TransferLog /home/$id/$logdir/today.log
 ErrorLog /home/$id/$logdir/error.log
 
                </VirtualHost>
                __END__
                # »ý¼ºÇÑ named.conf Á¤º¸¸¦ ÆÄÀÏ¿¡ ±â·ÏÇÑ´Ù.
 
                $FILE = ¡°/etc/named.conf¡±;
 open(FILE, ¡°>>$FILE¡±) 
                || file_error();
 print FILE $named_conf;
 close(FILE);
                # »ý¼ºÇÑ named zone ÆÄÀÏ Á¤º¸¸¦ ±â·ÏÇÑ´Ù.
 
                $FILE = ¡°/var/named/custom/$domain¡±;
 open(FILE, ¡°>$FILE¡±) 
                || file_error();
 print FILE $named_zone;
 close(FILE);
                # Ãß°¡ÇÑ µµ¸ÞÀÎÀ¸·Î µµÂøÇÑ ¸ÞÀÏÀ» ¼ö½ÅÇÒ ¼ö 
                ÀÖµµ·Ï
 # ¼³Á¤ÇÑ´Ù.
 $FILE = ¡°/etc/sendmail.cw¡±;
 
                open(FILE, ¡°>>$FILE¡±) || file_error();
 print FILE 
                ¡°$domain¡¬n¡±; 
 close(FILE);
                # µµ¸ÞÀκ°·Î °¡»ó »ç¿ëÀÚ mailÀ» »ç¿ëÇÒ ¼ö
 
                # ÀÖµµ·Ï virtusertableÀ» ¼³Á¤(Ãß°¡)ÇÑ´Ù.
 # @way.co.kr way¶ó°í 
                ÁöÁ¤Çϸé way.co.kr µµ¸ÞÀÎÀ¸·Î
 # ¼ö½ÅµÇ´Â ¸ðµç ¸ÞÀÏÀº way 
                °èÁ¤À¸·Î ¹è´ÞµÈ´Ù.
 # sendmail.cf ÆÄÀÏ¿¡ virtusertableÀ» 
                »ç¿ëÇÒ ¼ö ÀÖ´Â
 # ¼³Á¤ÀÌ µÇ¾îÀÖ¾î¾ß ÇÑ´Ù.
 $FILE = ¡°/etc/mail/virtusertable¡±;
 
                open(FILE, ¡°>>$FILE¡±) || file_error();
 print FILE 
                ¡°¡¬@$domain $id¡¬n¡±;
 close(FILE);
                # Ãß°¡ÇÑ µµ¸ÞÀÎÀÇ VirtualHostÁ¤º¸¸¦ httpd.conf
 
                # ÆÄÀÏ¿¡ ±â·Ï(Ãß°¡)ÇÑ´Ù.
 # apache¸¦ RedHat rpmÀ¸·Î ¼³Ä¡ÇÑ 
                °æ¿ì¿¡´Â
 # /etc/httpd/conf/httpd.conf ÆÄÀÏ¿¡ ¹Ý¿µÇؾßÇÑ´Ù.
 
                $FILE = ¡°/usr/local/apache/conf/httpd.conf¡±;
 open(FILE, 
                ¡°>>$FILE¡±) || file_error();
 print FILE ¡°$httpd_conf¡±;
 
                close(FILE);
 end();
 }
                sub domain_apply {
 # 22. µµ¸ÞÀÎ Á¤º¸ °»½Å
 
                # ¡°µµ¸ÞÀÎ µî·Ï¡±ÈÄ µî·Ï³»¿ëÀ» ¹Ý¿µÇϱâ À§ÇØ ½ÇÇàÇÑ´Ù.
 # 
                apache¸¦ RedHat rpmÀ¸·Î ¼³Ä¡ÇÑ °æ¿ì¿¡´Â
 # /etc/rc.d/init.d/httpd 
                ÆÄÀÏÀ» ÀÌ¿ëÇÑ´Ù.
 # restart¸¦ ÀÌ¿ëÇÒ ¼öµµ ÀÖÁö¸¸ ¿¬¼ÓµÇ´Â 
                ½ÇÇà¿¡ ¾à°£ÀÇ
 # ¿©À¯¸¦ µÎ±â À§ÇØ 1ÃÊ °£°ÝÀ¸·Î stop°ú start¸¦ 
                ½ÇÇàÇÑ´Ù.
                check();
 system(¡°/usr/local/apache/bin/apachectl 
                stop¡±);
 sleep 1;
 system(¡°/usr/local/apache/bin/apachectl 
                start¡±);
 sleep 1;
 system(¡°/etc/rc.d/init.d/named stop¡±);
 
                sleep 1;
 system(¡°/etc/rc.d/init.d/named start¡±);
 sleep 
                1;
 system(¡°/etc/rc.d/init.d/sendmail stop¡±);
 sleep 
                1;
 system(¡°/etc/rc.d/init.d/sendmail start¡±);
 sleep 
                1;
 end();
 }
                sub domain_display {
 # 23. µµ¸ÞÀÎ Á¤º¸ 
                »ó¼¼Á¶È¸
 # µµ¸ÞÀÎÀÇ µî·Ï³»¿ë(°¢ ¼³Á¤ÆÄÀÏ)À» Á¶È¸ÇÑ´Ù.
 
                # vi editor¸¦ ÀÌ¿ëÇØ ¼³Á¤ÆÄÀϵéÀ» Á¶È¸Çϰí
 # ÆíÁýÇÒ ¼ö ÀÖ´Ù.
 
                print ¡°$prog_msg Á¶È¸ÇÒ µµ¸ÞÀÎ(ex. abcd.co.kr) : ¡°;
 $domain 
                 =  <STDIN>;
 chomp $domain;
 if  ($domain 
                eq ¡°¡±) { domain_display(); }
 if  ($domain eq ¡°¡¬¡¬¡±) 
                { menu(); }
 $domain_file_list = ¡°/etc/named.conf ¡°;
 
                $domain_file_list .= ¡°/var/named/custom/$domain ¡°;
 $domain_file_list 
                .= ¡°/etc/sendmail.cw ¡°;
 $domain_file_list .= ¡°/etc/mail/virtusertable 
                ¡°;
 $domain_file_list .= ¡°/usr/local/apache/conf/httpd.conf 
                ¡°;
 check();
 system(¡°vi $domain_file_list¡±);
 end();
 
                }
                sub pass_define {
 # 26. »ç¿ëÀÚ password 
                ÁöÁ¤
 print ¡°$prog_msg password¸¦ ÁöÁ¤(º¯°æ)ÇÒ »ç¿ëÀÚ ID 
                : ¡°;
 $id  =  <STDIN>;
 chomp $id;
 
                if  ($id eq ¡°¡±) { pass_define(); }
 if  ($id 
                eq ¡°¡¬¡¬¡±) { menu(); }
 if  (!($user_data = user_check($id, 
                ¡°1¡±))) {
 end(¡°µî·ÏµÇÁö ¾ÊÀº IDÀÔ´Ï´Ù.¡±); }
 ($ud1, 
                $ud2, $ud3, $ud4, $ud5, $ud6, $ud7)
 =  split(¡°:¡±, 
                $user_data);
 if  ($ud3 < $min_uid) { 
 end(¡°ÇØ´ç 
                IDÀÇ password¸¦ ÁöÁ¤(º¯°æ)ÇÒ ¼ö ¾ø½À´Ï´Ù.¡±); }
 check();
 
                system(¡°/usr/bin/passwd $id¡±);
 end();
 }
                sub ps_ax {
 # 28. ÇÁ·Î¼¼¼ Á¶È¸
 system(¡°/bin/ps 
                ax¡±);
 end();
 } 
                sub demon {
 # 29. µ¥¸ó °ü¸®
 # ¡°µµ¸ÞÀÎ 
                Á¤º¸ °»½Å¡±°ú ¡°ÇÁ·Î¼¼¼ Á¶È¸¡±¸¦ ÅëÇØ µ¥¸óÀÇ
 # ¼öµ¿ Á¶ÀÛ(stop, 
                start, restart)ÀÌ ÇÊ¿äÇÑ °æ¿ì »ç¿ëÇÑ´Ù.
 print ¡°$prog_msg 
                {httpd,named,sendmail}¡±;
 print ¡° {start,stop,restart}¡¬n¡±;
 
                print ¡°$prog_msg # ¡°;
 $cmd  =  <STDIN>;
 
                chomp $cmd;
 if  ($cmd eq ¡°¡±) { demon(); }
 if 
                 ($cmd eq ¡°¡¬¡¬¡±) { menu(); }
 ($cmd, $act) = $cmd 
                =~ /^(.*) (.*)$/;
 if($cmd  =~  /^httpd/) {
 
                $cmd = ¡°/usr/local/apache/bin/apachectl¡±; }
 elsif($cmd 
                 =~  /^named/) {
 $cmd = ¡°/etc/rc.d/init.d/named¡±; 
                }
 elsif($cmd  =~  /^sendmail/) {
 $cmd = ¡°/etc/rc.d/init.d/sendmail¡±; 
                }
 # ÀÓÀÇÀÛµ¿À» ¸·±â À§ÇØ httpd, named, sendmail ÀÌ¿ÜÀÇ
 
                # µ¥¸óÀº Á¶ÀÛÇÒ ¼ö ¾øµµ·Ï ÇÑ´Ù.
 else { end(¡°Çã¿ëµÇÁö ¾Ê´Â 
                ¸í·ÉÀÔ´Ï´Ù.¡±); }
 system(¡°$cmd $act¡±);
 demon();
 
                end();
 }
                À̹ø ¡°Perl ½Ã½ºÅÛ µµ±¸¡± °Á¸¦ ³¡À¸·Î ºÎÁ·Çϳª¸¶ 
                ¡°Perl programming¡± ¿¬À縦 ¸¶Ä£´Ù.