RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'Linux'에 해당되는 글 103

출처 : 대전국제IT교육센터 정성재 강사

 

1. 아파치란?
인터넷상에서 우리는 보통 www이라고 치면서 접속한다. www이라고 치면서 들어갈 때 우리는 특별한
프로토콜을 이용하게 되는데 그 프로토콜이 HTTP이다. 이 HTTP프로토콜을 리눅스(유닉스)에서는 보
통 httpd라는 데몬으로 서비스하며, 보통 우리는 Webserver라고 부른다. 이러한 Webserver중에서 가
장 대표적인 것이 Apache이다.


2. apache 설치
(1) 기존의 아파치 버전을 확인한다.
    rpm -qi apache
(2) 최신버전의 아파치파일을 다운받는다.
   apache_1.3.26.tar.gz을 다운받아 /usr/local/src에 위치시킨다.
(3) 압축을 푼다.
   tar zxvf apache_1.3.26.tar.gz
(4)기존의 인스톨된 apache제거하기
   1) 아파치 데몬을 정지시킴 : /etc/rc.d/init.d/httpd stop
   2) 인스톨된 아파치를 찾는다. : rpm -qi apache
   3) 찾아진 아파치를 모두 제거한다.
     예) rpm -e apache --nodeps
     (참고) 기존의 아파치를 rpm -e 명령으로 제거해도 리눅스배포판에 따라 몇몇의 디렉토리나
           파일이 제거 안 될 수도 있다. 이 경우에는 일일히 수동으로 제거해준다. 물론 제거하지
           않아도 시스템의 공간을 조금 차지하고 있을뿐 큰 지장은 없다.
(5) 설치한다. (여기서는 그냥 아파치만 설치하는 것으로 한다.)
   1) cd apache_1.3.26
   2) ./configure --prefix=/usr/local/apache
   3) make
   4) make install
   (참고) ./configure에 관련된 옵션을 확인하려면 ./configure --help명령을 내리면 된다.
(6) 아파치의 디렉토리구조
   1) 개요: 아파치를 설치하게 되면 /usr/local/apache디렉토리 아래에 bin, cgi-bin, conf,
           htdocs, libexec, logs, icons, include, proxy, man 디렉토리로 구성되며, conf디렉토리
           에 아파치 웹서버의 주 설정파일인 httpd.conf파일이 들어있다.
   2) 디렉토리설명
     ㄱ. /bin : apache사용시에 필요한 유틸리티들이 위치하는 디렉토리
     ㄴ. /cgi-bin : cgi 스크립트가 들어있는 디렉토리
     ㄷ. /conf : apache의 여러가지 환경 설정파일이 들어있는 디렉토리(httpd.conf)
     ㄹ. /icons : apache에서 사용되는 아이콘들이 들어있는 디렉토리
     ㅁ. /logs: apache서버 운영시 발생하는 여러 log들이 위치하는 디렉토리
     ㅂ. /htdocs : 웹문서들이 위치하는 기본 디렉토리이다.
     ㅅ. /include: 헤더파일들이 위치하는 디렉토리이다.
     ㅇ. /man : man 페이지에 추가할 수 있도록 만들어 놓은 파일관련 디렉토리이다.

(참고) apache관련 항목 man 명령의 메뉴얼로 등록하기
1. 설명
  /usr/local/apache/man 디렉토리에 보면 man용 메뉴얼파일이 있다. 추가로 설치한 응용프로그램들
의 메뉴얼페이지가 위치하는 /usr/local/man디렉토리에 등록하면 man 명령으로 메뉴얼페이지를 확인
할 수 있다.
2. 방법
  cp /usr/local/apache/man/man1/* /usr/local/man/man1
  cp /usr/local/apache/man/man8/* /usr/local/man/man8

3. apache의 환경설정
(1)apache의 환경설정파일
   예전의 apache서버에서는 환경 설정파일이 3가지로 나뉘어 있었다. 각각 웹서버 프로세스에 관련
  된 내용을 다루고 있는 ServerConfig파일(보통 httpd.conf)와 서버에 제공하고자 하는 자원들에
  관련된 ResourceConfig파일(보통 srm.conf), 서버에 접근을 제한하고자 하는 항목들을 가지고 있는
  AccessConfig파일(보통 access.conf)이었다. 그러나, 현재의 apache서버에서는 ServerConfig파일인
  httpd.conf파일에 모든 기능을 내포하고 있다.

(2) httpd.conf : apache에 관한 전반적인 환경설정을 하는 파일로서 '#'으로 시작되는 라인은 주석
                (comment)처리되어 실제 설정과는 관계없는 line이 된다.
   1) 구성
    ㄱ. Global Environment: 아파치를 전반적으로 제어하는 부분(전체환경설정)
    ㄴ. Main Server Configuration: 가상호스트에서 처리되는 않는 요청을 모두 처리해주는 주서버
                                  또는 기본 서버의 작동을 제어하는 부분(메인서버 환경설정)
    ㄷ. Virtual Host: 다른 IP와 호스트 이름을 처리하는 가상호스트 설정부분
   2)주요설정 : httpd.conf파일은 세가지 섹션 설정으로 구성되어 있다.
    ### Section 1: Global Environment
     -ServerType standalone : 서버 타입을 어떤 방식으로 운영할 것인지 설정하는 부분이다. 두가
                             지 방법을 선택할 수 있다. 슈퍼데몬인 inetd에 의하여 작동되냐 아니
                             면 단독(standalone)이냐로 설정하는데 linux는 응답속도가 빠른 stan
                             dalone 으로 동작한다. 기본값이다.
     -ServerRoot "/usr/local/apache": 웹서버가 설치되는 디렉토리를 나타낸다. 이 곳에 환경설정
                                     파일, log파일, 에러파일, 실행바이너리 등이 위치한다.
     -PidFile /usr/local/apache/logs/httpd.pid : 서버가 시작할 때 자신의 프로세스 ID를 기록할
                                                파일을 나타낸다.
     -ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard 
       : Internal server process정보를 기록할 때 사용한다. 모든 아키텍쳐에서 요구되는 것은 아
        니며, 필요한 경우 아파치 실행 프로세스의 값이 겹치지 않도록 해주면 된다.
     -Timeout 300 : 받기/보내기 타임 아웃 시간을 설정한다.
     -KeepAlive On : 지속적인 접속을 허가할 것인지 말 것인지를 설정하는 부분이다. 즉, 하나의
                    프로세스가 실행됐을 때 처음부터 끝까지 이 프로세스를 요청한 사용자에게 작
                    업을 할 수 있도록 하는 기능이다. 이것을 사용하는 이유는 성능저하 때문인데,
                    예를 들면 자식프로세서가 한 가지 일만 처리하고 죽는 것이 아니라 다음의 일
                    도 처리함으로써 성능 향상을 꾀한다. 활성값은 Off이다.
     -MaxKeepAliveRequests 100 : KeepAlive가 설정되어 있을 때, 지속적인 접속 기간 동안 처리할
                                수 있는 요청 갯수를 설정하는 부분이다. 클라이언트의 요청을 몇
                                번이나 처리하고 다시 처음 상태로 돌아가는지를 설정한다. 최대
                                요청갯수 0을 넣으면 무한대이다. 높은 성능을 내기 위해서는 높은
                                값을 써 넣는다.
     -KeepAliveTimeout 15 : keepAlive가 설정된 상태에서 클라이언트의 요청이 타임 아웃되는 시간
                           을 나타내며 초단위이다.
     -MinSpareServers 5
      MaxSpareServers 10
       : 클라이언트에서 요청이 있을 경우 아파치 웹서버는 현재 부하에 맞게 자동으로 대응한다.
        따라서, 이 값들을 처리할 수 있는 프로세스를 충분히 여유있게 유지할 수 있는 값이다. 아
        파치 서버는 주기적으로 몇 개의 서버가 요청 대기 상태인지를 점검한다. MinSpareServers
        보다 적으면 여유 서버 프로세스를 생성하며, MaxSpareServers보다 많다면 불필요한 프로세
        스를 제거한다.
     -StartServers 5 : 처음 서버를 시작할 때 시작하는 프로세스 수치이다.
     -MaxClients 150 : 웹서버에 접속할 수 있는 최대 클라이언트의 수치를 결정한다. 즉, 동시접
                      속자의 수를 제한하는 값이다. 주의점은 운영체제상에서 만들어 낼 수 있는
                      프로세스 개수가 150개인데 그 이상의 수치를 이곳에 적는다면 서버에 과부
                      하가 걸릴 수도 있으니 주의해야 하며, 서버상에서의 최대 프로세스의 개수
                      를 서버 성능에 맞게 조절해야 한다. 최신 버전인 경우에는 1024가 기본값
                      이다.
     -MaxRequestsPerChild 0 : 자식 프로세스가 죽기전에 처리할 수 있는 요청 개수이다. 한 프로세
                             스가 너무 오랫동안 사용되면 메모리, 자원 낭비가 될 수 있으므로
                             자식 프로세스는 자동으로 죽는다.


    ### Section 2: 'Main' server configuration
     -Port 80 : standalone서버 방식에서 기본으로 사용하는 포트를 나타낸다. 포트번호가 1023보다
               낮을 경우에는 httpd데몬을 루트권한으로 실행해야 한다.
     -User nobody
      Group nobody
       : nobody라는 사용자와 그룹을 가진 사용자들의 요청에 의해 웹서버가 실행되게 된다. httpd
        가 다른 사용자 또는 그룹 권한으로 실행하게 하려면 우선은 httpd가 root사용자 권한으로
        실행되고 나서 설정한 다음에 사용자권한으로 전환한다.
     -ServerAdmin
root@posein.com : 서버에 문제가 발생했을 경우 보낼 관리자의 이메일주소를 적
                                   는다.
     -ServerName posein.com : 서버의 도메인이름을 적는다. 만약 도메인이 없을 경우에는 IP를 적
                             는다. 실제 이름이 아닌 가상의 이름도 가능하다.
     -DocumentRoot "/usr/local/apache/htdocs": URL상의 서버 root문서가 위치하는 디렉토리를 적
                                              는다.

     - <Directory /usr/local/apache/htdocs>
           Options Indexes FollowSymLinks
           AllowOverride None
           Order allow,deny
           Allow from all
       </Directory>
        => 특정 디렉토리를 제어할 때 사용하는 지시자를 <Directory /> ... </Directory>의 형태로
          작성하며, 각각의 디렉토리에 관한 권한등의 여러 설정등을 한다.
          * Options
            NONE : 어떤 옵션도 이용할 수 없으므로 모든 접근을 거부
            ALL : MultiViews 옵션을 제외한 모든 옵션을 부여
            Indexes : URL에 지정된 디렉토리에(index.html 같은) 지정된 파일이 없을 경우 디렉토
                     리의 파일목록을 보여주는 옵션
            Includes : 서버측의 추가적인 정보를 제공(SSI:Server Side Includes)
            FollowSymLinks : 디렉토리의 심볼릭 링크 사용 가능
            ExecCGI : CGI 스크립트를 실행할 수 있도록 함
            IncludesNOEXEC : SSI는 허용하지만 #exec 명령과 CGI 스크립트 #include 불허
            MultiViews : All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용하는 것으로
                        유사한 파일이름을 찾아주는 기능을 실행한다. 예를 들면 index라고만 입력하
                        더라도 index.*를 찾아서 보여준다.
          * AllowOverride: 사용자 인증에 관련된 지시자로 클라이언트가 웹서버의 특정 디렉토리에
                          접근할 때 해당 디렉토리에 있는 유저 인증 파일인 .htaccess 파일을
                          읽게 되는데, 여기를 None으로 설정하면 아파치 서버는 이 파일을 무시
                          하게 된다.
           None : AllowOverride를 사용하지않는다. 즉 유저 인증파일을 사용하지 않는다.
           All : httpd.conf파일의 AccessFileName 지시자로 설정한 파일을 사용하며 또한 지시자를
                사용할 수 있다.
           AuthConfig : AccessFileName 지시자에 명시한 파일에 대해서 사용자 인증 지시자 사용을
                       허락한다. AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName,
                       AuthType, AuthUserFile, require등을 사용할 수 있다.
           FileInfo : AccessFileName 지시자로 설정한 파일에 대해서 문서 유형을 제어하는 지시자
                     사용을 허락한다. AddEncoding, AddLanguage, AddType, DefaultType, ErrorDo
                     cument, LanguagePriority등을 사용할 수 있다.
           Indexes : AccessFileName 지시자로 설정한 파일에 대해서 디렉토리 Indexing을 제어하는
                    지시자 사용을 허락한다. AddDescription, AddIcon, AddIconByEncoding, AddIco
                    nByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgno
                    re, IndexOptions, ReadmeName등을 사용할 수 있다.
           Limit : AccessFileName 지시자로 설정한 파일에 대해서 호스트 접근을 제어하는 지시자
                  사용을 허락한다. Allow, Deny, order 등을 사용할 수 있다.
           Options : AccessFileName 지시자에 명시한 파일에 대해서 Options 그리고 XBiHack 등과
                    같은 지시자 사용을 허락한다. Options, XBitHack등을 사용할 수 있다.
          * Order
            => Order명령은 해당 디렉토리에 대한 IP, DNS 필터링의 순서를 설정한다. Allow는 호스
              트 접근을 허락하며, Deny는 접근을 불허한다. Allow from all은 모든 호스트로부터의
              접근을 허락한다는 뜻이며, Deny from all은 모든 호스트로부터의 요청을 거부한다는
              뜻이다.
                예) Order deny, allow
                    Deny from all
                    Allow from 호스트명

     - #<Directory /home/*/public_html>

       #    AllowOverride FileInfo AuthConfig Limit
       #    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
       #    <Limit GET POST OPTIONS PROPFIND>
       #        Order allow,deny
       #        Allow from all
       #    </Limit>
       #    <LimitExcept GET POST OPTIONS PROPFIND>
       #        Order deny,allow
       #        Deny from all
       #    </LimitExcept>
       #</Directory>

         => 개인 홈페이지 디렉토리에 대한 접근 권한을 설정한다. <Limit> </Limit>로 각각의 접근
           을 제어할 수 있다.

     -<IfModule mod_userdir.c>
          UserDir public_html
      </IfModule>
       => 사용자의 개인 홈페이지의 문서가 위치하는 디렉토리명을 적는다. 기본값이 public_html
         이지만, 너무 길다고 생각되면 www나 web등으로 바꿔도 된다.

     -<IfModule mod_dir.c>
          DirectoryIndex index.html index.php
      </IfModule>

       => 디렉토리의 인덱스파일(처음열리는 파일)로 사용할 파일이름을 적는다. 기본 index.html에
         index.htm, index.php, index.php3 index.shtml등을 추가하도록 한다.

     - AccessFileName .htaccess
        => 각각의 디렉토리의 접근을 제어하는 정보를 가진 파일 이름을 지정하며 웹 클라이언트들
          이 .htaccess파일을 볼 수 없도록 설정한다. 여기에서 사용하는 .htaccess는 권한정보를
          가지고 있으므로 보안유지 차원에서 접근을 허용해서는 안된다. 즉, 파일을 제어하려는
          디렉토리에 넣어 사용한다.

     - <Files ~ "^\.ht">
           Order allow,deny
           Deny from all
           Satisfy All
       </Files>
         => 웹 클라이언트들에게 .htaccess파일을 볼 수 있는지 여부를 결정한다.

     - #CacheNegotiatedDocs
        => 아파치는 기본적으로 협상된 문서에 대해서는 "Pragma: no-cache" 내용을 보내는데 이 설
          정은 프록시 서버들이 문서를 캐시하지 못하게 요청한다. '#'를 제거하고 옵션을 실행하면
          모든 프록시가 문서를 캐시할 수 있게 한다.

     - UseCanonicalName On : 아파치가 자신의 URL 생성시 어떤 특정한 법칙에 따라 생성을 하도록
                            지정하는 지시자이다. On이면 서버이름과 포트를 이용한 명칭을 생성
                            하고, Off이면 클라이언트에게 제공하는 호스트이름과 포트를 생성하면
                            된다.

     - <IfModule mod_mime.c>
           TypesConfig /usr/local/apache/conf/mime.types
       </IfModule>
        => mine.types파일 또는 이에 해당하는 파일을 찾을 위치를 결정한다. MIME은 Multipurpose
          Internet Mail Extension의 약자로 클라이언트 브라우저에게 어떠한 유형의 자료를 전송
          할 것인지를 조절해 주는 기능이다.

     - DefaultType text/plain : 파일 확장자를 정의해 두는 것으로 MIME타입을 알 수 없는 문서에
                              대하여 사용할 기본 MIME타입을 설정한다. 기본값은 text/plain이며,
                              이 값으로 설정하면 Mime Type을 결정하지 못할때는 기본 텍스트문
                              서 결정한다. 주로 서버에 문서 파일이 많을 경우에 사용한다. 웹 브
                              라우저상에서 실행 프로그램이나 이미지 등 바이너리인 경우 웹브라
                              우저가 바이너리라고 해석하게 하기 위해서 "application/octet-str
                              eam" 과 같은 형식을 적어주어야 한다. 이것은 웹브라우저가 실행파
                              일 등을 텍스트문서로 착각하고 브라우저상에 표시하지 않게 하기
                              위함이다.

     - <IfModule mod_mime_magic.c>

           MIMEMagicFile /usr/local/apache/conf/magic
       </IfModule>
         => mod_mime_magic 모듈을 사용할 경우 해당 파일의 내용으로 파일 타입 힌트를 얻는 역할
           을 한다. MIMEMagicFile명령은 암시를 정의하는 모듈이 어디에 위치하고 있는지를 알려
           주는 것으로 이것을 사용하기 위해서는 해당 모듈을 탑재해야 한다.

     -HostnameLookups Off : 클라이언트에서의 접속 이름 또는 IP주소만을 기록할 지를 여부를 체크
                           한다. 예를 들면 posein.com은 On값이 되며, 192.168.0.1은 Off값이다.

     - ErrorLog /usr/local/apache/logs/error_log
       => 웹서버가 에러가 발생했을 경우 에러에 관한 기록파일을 설정한다. 참고로 <VirtualHost>
         지시자에서 ErrorLog 설정을 하지 않았다면 여기에서 언급한 설정을 따른다. 로그 파일의
         경우는 계속해서 사용량이 증가하므로 수시로 용량을 줄여야 한다.

     - LogLevel warn
        => 로그메시지의 크기를 제어하는 부분이다. 옵션에는 debug, info, notice, warn, error,
          crit, alert!, emerg 등이 있다.

     - LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
       LogFormat "%h %l %u %t \"%r\" %>s %b" common
       LogFormat "%{Referer}i -> %U" referer
       LogFormat "%{User-agent}i" agent
        => CustomLog 지시자에서 사용할 별명을 정의하는 곳으로 각각의 의미는 다음과 같다.
          %h : 호스트명
          %l : 리모트 로그이름
          %u : 사용자 인증에 사용된 유저명
          %t : 시간
          %r : 요청한 내용의 첫번째 줄
          %s : 서버상태
          $b : 전송량(헤더 포함) -바이트수
          %{헤더} : 요구된 헤더 내용
          %U : 요구한 URL

     - CustomLog /usr/local/apache/logs/access_log common
        => 클라이언트들이 웹서버에 접근한 정보를 기록해 주는 access_log 파일의 위치를 설정한
          다. <VirtualHost> 지시자에서 이 설정 부분이 없을 경우 여기서 설정한 위치로 모
          두 저장된다. 가상 호스트별로 따로 접근 로그파일을 만들고 싶으면 이 설정을 각각의
          <VirtualHost> 지시자 안에 넣으면 된다.

     - #CustomLog /usr/local/apache/logs/referer_log referer
       #CustomLog /usr/local/apache/logs/agent_log agent
         => 브라우저(agent)와 접속자(referer) 기록 파일을 갖고자 한다면 위 주석을 제거한다.

     - #CustomLog /usr/local/apache/logs/access_log combined
         => access, agent, referer 정보를 하나의 파일에 모두 저장하기를 원한다면 combined 옵션
           을 이용한다.

     - ServerSignature On
        => 아파치 서버가 생성하는 페이지(에러문서, FTP 디렉토리 list, mod_status, mod_info
          output, CGI 생성 문서 제외)에 서버 버전과 가상호스트 이름을 포함하는 행을 넣는 것을
          설정한다. 옵션에는 On | Off | Email 등이 있고 On으로 설정하면 서비스중인 가상호스트
          의 이름과 서버 버전을 포함한 라인을 보여주고, Email의 경우 ServerAdmin으로의 mailto:
          링크도 포함된다.

     - # EBCDICConvertByType  On=InOut text/* message/* multipart/*
       # EBCDICConvertByType  On=In    application/x-www-form-urlencoded
       # EBCDICConvertByType  On=InOut application/postscript model/vrml
       # EBCDICConvertByType Off=InOut */*
        => EBCDIC 코드 셋을 사용하는 메인프레임을 위한 설정이다. EBCDIC는 IBM이 대형운영체계
          에서 사용하기 위해 개발한 알파벳 및 숫자를 위한 바이너리 코드를 말한다. EBCDIC는
          IBM S/390 서버의 운영체계인 OS/390에서 사용되는 텍스트파일용 코드로서 많은 회사들이
          자기 회사의 오래된 응용프로그램과 데이터베이스를 위해 아직도 사용하고 있다. 그러나
          IBM PC나 위크스테이션용 운영체계에서는 텍스트 표현방법에 있어 자신들의 고유한 체계인
          EBCDIC 대신 산업계 표준인 ASCII를 사용한다. EBCDIC 파일내에서 각 알파벳이나 숫자는
          8비트의 이진수로 표현되므로 총 256개의 문자가 정의된다.

     - Alias /icons/ "/usr/local/apache/icons/"
        => 웹 문서 루트 디렉토리(DocumentRoot dir)외의 다른 디렉토리에서도 문서를 저장할 수
          있게 해 주는 별칭을 설정하는 부분으로 별칭의 설정은 Alias /별칭/ "path"하면 된다.
          디렉토리 설정은 앞에서 사용한 옵션을 사용하면 되고, 별칭은 하나 이상 여러 개를 만들
          어 사용 가능하기 때문에 필요한 만큼 만들어 사용하면 된다.

     - IndexOptions FancyIndexing
        => 디렉토리 목록을 표시해 줄 때 표준으로 보여줄 것인지, 아니면 파일에 대한 약간의 정보
          를 추가해서 표시해 줄 것인지를 결정한다. 만약 표시한 파일이 존재하지 않을 경우 디렉
          토리와 파일들의 목록을 보여줄 때 디렉토리와 속성에 따른 아이콘을 사용할 지 여부를
          설정한다.

     - AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

       AddIconByType (TXT,/icons/text.gif) text/*
       AddIconByType (IMG,/icons/image2.gif) image/*
       AddIconByType (SND,/icons/sound2.gif) audio/*
       AddIconByType (VID,/icons/movie.gif) video/*

       AddIcon /icons/binary.gif .bin .exe
       AddIcon /icons/binhex.gif .hqx
       AddIcon /icons/tar.gif .tar
       AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
       AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
       AddIcon /icons/a.gif .ps .ai .eps
       AddIcon /icons/layout.gif .html .shtml .htm .pdf
       AddIcon /icons/text.gif .txt
       AddIcon /icons/c.gif .c
       AddIcon /icons/p.gif .pl .py
       AddIcon /icons/f.gif .for
       AddIcon /icons/dvi.gif .dvi
       AddIcon /icons/uuencoded.gif .uu
       AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
       AddIcon /icons/tex.gif .tex
       AddIcon /icons/bomb.gif core

       AddIcon /icons/back.gif ..
       AddIcon /icons/hand.right.gif README
       AddIcon /icons/folder.gif ^^DIRECTORY^^
       AddIcon /icons/blank.gif ^^BLANKICON^^
         => IndexOptions에서 FancyIndexing으로 설정되어 있을 경우에 사용되며 각각의 파일 및
           확장자에 따른 아이콘의 모양을 정해준다.

     - DefaultIcon /icons/unknown.gif
         => 앞에서 설정되어 있지 않은 파일에 대하여 사용하는 아이콘이다.

     - #AddDescription "GZIP compressed document" .gz
       #AddDescription "tar archive" .tar
       #AddDescription "GZIP compressed tar archive" .tgz
         => 서버에서 만들어지는 인덱스에 있는 파일 뒤에 짧은 주석을 달 수 있도록 한다. 위의
           경우에는 확장자가 .gz이면 "GZIP compressed document"라는 설명을 보여주게 된다.

     - ReadmeName README
       HeaderName HEADER
        => 서버가 디렉토리 목록 뒤에 붙여넣을 README 파일의 이름을 설정하며, HeaderName은 디렉
          토리 인덱스 앞에 내용을 넣을 파일의 이름을 설정한다. 즉, 디렉토리 목록을 보여줄 때
         화면 아래부분에 간단한 설명이 들어갈 파일을 지정한다. 예를 들면, 서버는 처음 name.ht
         ml 파일을 찾고 존재하면 그 내용을 포함한다. 만약 파일이 존재하지 않는다면 name.txt를
         찾고 txt내용을 포함한다.

     - IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
        => 디렉토리를 인덱스할 때 파일을 보이지 않게 설정하는 부분이다.

     - AddEncoding x-compress Z
       AddEncoding x-gzip gz tgz
        => 일부 브라우저에서 전송을 받으면서 정보를 압축해제할수 있도록 허용할 때 사용하는 것
          으로 모든 브라우저에서 이 기능을 지원하지는 않는다.

     - AddLanguage da .dk
       AddLanguage nl .nl
       AddLanguage en .en
       AddLanguage et .ee
       AddLanguage fr .fr
       AddLanguage de .de
       AddLanguage el .el
       AddLanguage he .he
       AddCharset ISO-8859-8 .iso8859-8
       AddLanguage it .it
       AddLanguage ja .ja
       AddCharset ISO-2022-JP .jis
       AddLanguage kr .kr
       AddCharset ISO-2022-KR .iso-kr
       AddLanguage nn .nn
       AddLanguage no .no
       AddLanguage pl .po
       AddCharset ISO-8859-2 .iso-pl
       AddLanguage pt .pt
       AddLanguage pt-br .pt-br
       AddLanguage ltz .lu
       AddLanguage ca .ca
       AddLanguage es .es
       AddLanguage sv .sv
       AddLanguage cz .cz
       AddLanguage ru .ru
       AddLanguage zh-tw .tw
       AddLanguage tw .tw
       AddCharset Big5         .Big5    .big5
       AddCharset WINDOWS-1251 .cp-1251
       AddCharset CP866        .cp866
       AddCharset ISO-8859-5   .iso-ru
       AddCharset KOI8-R       .koi8-r
       AddCharset UCS-2        .ucs2
       AddCharset UCS-4        .ucs4
       AddCharset UTF-8        .utf8
         => 문서의 언어를 표시한다. 즉, 내용 협상 과정을 통해 브라우저가 이해하는 언어의 문서를
           제공할 수 있다. 폴란드어의 경우 펄과 구분하기 위해 pl .po로 포기한다.

     - <IfModule mod_negotiation.c>

           LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv tw
       </IfModule>
         => 내용 협상 과정에서 같은 순위를 가질 때 어느 언어에게 우선권을 부여할 것인지를 설정
           한다. 설정은 내림차순으로 나열한다.

     - AddType : 추가적으로 지원될 파일들을 적는다.
       예) php4를 사용할 경우
         AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
         AddType application/x-httpd-php-source .phps
          => 즉 mime.types의 수정없이 mime을 설정가능하게 해준다.

     - #AddHandler cgi-script .cgi
        => 특정 파일 확장자나 처리기에 연결하거나 특정 파일 타입에 특정 동작 연결을 설정하는
          부분이다. 즉, 어떤 파일 확장자를 파일 종류와 무관하게 작동할 수 있게 "Hander"에 결
          합되도록 설정해 주는 것이다.

     - # Format: Action media/type /cgi-script/location
       # Format: Action handler-name /cgi-script/location
        => 매칭되는 파일이 불려질 때마다 해당 미디어 타입에 맞는 스크립트를 실행할 수 있으며,
          이 설정은 자주 사용되는 CGI 파일 프로세서에 대해 반복적으로 URL을 사용하지 않아도
          된다.

     - #MetaDir .web
        => MetaDir은 아파치가 메타 정보 파일을 찾을 디렉토리 이름을 말하는 것으로 이 파일에는
          문서를 보낼 때 추가할 추가 HTTP 헤더 정보가 있으며, MetaSuffix는 메타정보를 가지고
          있는 파일의 접미어를 설정한다.

     - # Customizable error response (Apache style)
       #  these come in three flavors
       #
       #    1) plain text
       #ErrorDocument 500 "The server made a boo boo.
       #  n.b.  the single leading (") marks it as text, it does not get output
       #
       #    2) local redirects
       #ErrorDocument 404 /missing.html
       #  to redirect to local URL /missing.html
       #ErrorDocument 404 /cgi-bin/missing_handler.pl
       #  N.B.: You can redirect to a script or a document using server-side-includes.
       #
       #    3) external redirects
       #ErrorDocument 402 http://some.other-server.com/subscription_info.html
       #  N.B.: Many of the environment variables associated with the original
       #  request will *not* be available to such a script.
         => 존재하지 않는 페이지를 요청받을 경우 또는 해당 디렉토리의 퍼미션이 없을 경우 보여
           주는 에러 메시지설정이다. 관리자 임의로 다음 3가지 중 선택해서 출력해 줄 수 있다.
             1) plain text - 보통 텍스트 화면
             2) local redirects - 내부 URL로 방향 전환
             3) external redirects - 외부 URL로 방향 전환

     - BrowserMatch "Mozilla/2" nokeepalive
       BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
        => HTTP 응답 방식을 수정한다. 첫번째 지시자는 Netscape 2.x와 유사한 브라우저에 대해
          KeepAlive기능을 사용하지 못하게 하는 설정이다. 두번째 지시자는 HTTP/1.1을 잘못 구현
          301,302(redirect)응답에 대해 KeepAlive를 제대로 지원하지 못하는 MS Explorer 4.0b2를
          위한 설정이다.

     - BrowserMatch "RealPlayer 4\.0" force-response-1.0
       BrowserMatch "Java/1\.0" force-response-1.0
       BrowserMatch "JDK/1\.0" force-response-1.0
         => HTTP/1.1 응답도 제대로 처리하지 못해 HTTP/1.1 spec를 위반하는 브라우저에 대해
           HTTP/1.1응답을 하지 않게 하는 설정이다.

     - #<Location /server-status>
       #    SetHandler server-status
       #    Order deny,allow
       #    Deny from all
       #    Allow from .your-domain.com
       #</Location>
         => 서버 상태정보를 허용할 서버이름을 적어준다. 이 설정을 하면 웹브라우저를 이용하여
           http://localhost/server-status 라고 입력하면 웹서버의 상태를 파악할 수 있다.

     - #<Location /server-info>
       #    SetHandler server-info
       #    Order deny,allow
       #    Deny from all
       #    Allow from .your-domain.com
       #</Location>

         => 원격 서버의 환경 설정을 보고받을 수 있다. 주의할 점은 mod_info.c가 로드되어 있어야
           한다. http://localhost/server-info 라고 입력하면 서버의 환경 설정을 확인할 수 있다.

     - #<Location /cgi-bin/phf*>
       #    Deny from all
       #    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi
       #</Location>
         => 전 1.1버전에 있던 버그를 악용하려는 사람이 있는데, #를 제거하면 버그를 이용한 공격
           이 있을 때 phf.apache.org상의 기록 스크립터로 방향 전환을 시키게 한다. 또 다른 방법
           은 직접 support/php_abuse_log.cgi스크립트를 이용해 사용자 스스로가 저장하는 것이다.

     - #<IfModule mod_proxy.c>
       #    ProxyRequests On
     
       #    <Directory proxy:*>
       #        Order deny,allow
       #        Deny from all
       #        Allow from .your-domain.com
       #    </Directory>

         => 프록시 서버 사용을 설정하는 부분으로 프록시 서버 모듈을 포함했을 경우 #를 제거하면
           프록시 서버사용이 가능하다.

     - #    ProxyVia On
        => HTTP/1.1 "Via:"헤더를 처리할 지 여부를 설정하는 부분이다. 옵션에는 Off | On | Full
          | Block 등이 있으며 Full은 서버 버전을 포함하며, Block은 나가는 모든 자료에 "Via"를
          제거한다.

     - #    CacheRoot "/usr/local/apache/proxy"
       #    CacheSize 5
       #    CacheGcInterval 4
       #    CacheMaxExpire 24
       #    CacheLastModifiedFactor 0.1
       #    CacheDefaultExpire 1
       #    NoCache a-domain.com another-domain.edu joes.garage-sale.com
        => 캐쉬 기능을 enable하기 위해서는 #을 제거한다.


    ### Section 3: Virtual Hosts : 가상 도메인을 설정하는 부분으로 웹호스팅할 경우에 설정한다.
     -NameVirtualHost : 한 서버에서 여러도메인을 사용할 경우 설정해야 한다.
     예) 192.168.1.125라는 IP하나를 가지고 서버를 구축하여 abc.co.kr이라는 도메인을 웹호스팅
        할 경우의 설정
        NameVirtualHost 192.168.1.125
        ------------------------------------
       <VirtualHost 192.168.1.125>
          ServerAdmin
admin@abc.co.kr
          DocumentRoot /home/abc/www
          ServerName www.abc.co.kr
          ServerAlias *.abc.co.kr                   // abc.co.kr앞에 붙는 모든 2차도메인을 모
                                                    //두 abc.co.kr이라는 홈페이지가 열리도록
                                                    //설정을 할 때 쓴다.
          ErrorLog logs/abc-error-log
          CustomLog logs/abc-access_log common
       </VirtualHost>

4. apache의 실행
(1) 데몬파일을 이용한 실행
  /usr/local/apache/bin/httpd stop 한 후에 /usr/local/apache/bin/httpd start한다.
   또는
  /usr/local/apache/bin/httpd restart
(2) 스크립트파일을 이용한 실행(권장)
  /usr/local/apache/bin/apachectl stop 한 후에 /usr/local/apache/bin/apachectl start한다.
   또는
  /usr/local/apache/bin/apachectl restart
(3) 부팅할 때마다 자동적으로 실행하도록 설정하기
  /etc/rc.d/rc.local파일에 /usr/local/apache/bin/apachectl start라고 추가한다.

5. httpd명령의 사용
(1) 사용법
   httpd [option] [command] [file_name]
(2) option
   -t : 환경파일인 httpd.conf의 파일설정을 점검한다.
   -f : 새로 설정한 conf파일이 있을 경우 그 설정파일로 아파치 데몬을 띄운다.
   -S : 현재 시스템에 설정되어 있는 가상 호스트를 보여준다.
   -l : 현재 컴파일된 모듈에 대한 목록을 보여준다.
(3) 사용예
   1) /usr/local/apache/bin/httpd -t  => 문법적으로 httpd.conf의 파일 설정을 점검한다.
      Syntax OK                       => 아무 이상이 없음을 나타낸다.
   2) /usr/local/apache/bin/httpd -f httpd_test.conf => httpd_test.conf파일의 설정대로 데몬을
                                                       띄운다.
(참고) apachectl 스크립트를 이용한 httpd.conf파일의 설정 점검
/usr/local/apache/bin/apachectl configtest


6. apache의 확인
(1) 데몬의 확인 : 아파치데몬이 떠 있는지 확인한다.
   [root@house apache]# ps -aux |grep httpd 또는 ps -aux |grep apache
    root      1515  0.0  1.2  3464 1652 ?        S    23:22   0:00 /usr/local/apache
    nobody    1516  0.0  1.6  3748 2064 ?        S    23:22   0:00 /usr/local/apache
    nobody    1517  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1518  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1519  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1520  0.0  1.3  3548 1720 ?        S    23:22   0:00 /usr/local/apache
    nobody    1523  0.0  1.3  3552 1740 ?        S    23:22   0:00 /usr/local/apache
     => 어떠한 명령을 가지고 실행했느냐에 따라 달라진다. 만약 정상적으로 작동한다면 아파치데몬
       의 리스트를 보여준다. 웹서비스 프로세스들은 초기에 구동된 httpd 데몬 1개만 root권한이고
       나머지는 nobody권한으로 데몬이 실행된다. 일반사용자들이 웹브라우저를 통해서 연결되는
       데몬은 nobody권한의 httpd이다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. Apache 2.0, PHP, MySQL 설치하기
(1) 설명 : Apache 2.0.x 버전, PHP, MySQL의 설치순서는 크게 신경쓰지 않아도 되지만 보통 데이터
           베이스가 기본이 되므로 MySQL를 설치하고, Apache를 설치한 뒤에 마지막으로 PHP를 설치
           하면 된다.
(2) 설치하기
   1) Apache ,PHP, MySQL 소스파일(source파일: tar.gz로 된 파일)을 다운받아 /usr/local/src에
     위치시킨다.
      예) Apache => www.apache.org
          MySQL  => www.mysql.com
          PHP    => www.php.net

   2) 다운받은 파일들의 압축을 푼다.
    예) tar zxvf mysql-3.23.57.tar.gz
        tar zxvf httpd-2.0.47.tar.gz
        tar zxvf php-4.3.2.tar.gz
   3) 기존의 인스톨된 apache제거하기 : rpm패키지로 설치되어 있는 아파치 웹서버 프로그램을 삭
                                      제한다. 꼭 삭제할 필요는 없지만, 공간도 차지하고 새롭게
                                      설치할 아파치와 충돌될 수도 있다.
    ㄱ. 아파치 데몬을 정지시킴 : /etc/rc.d/init.d/httpd stop
         => 아파치 데몬이 작동하지 않을 수도 있다.
    ㄴ. 인스톨된 아파치를 찾는다. : rpm -qi apache 또는 rpm -qi httpd
         => 아파치 1.3 버전은 apache라는 이름으로 설치되지만, 2.0버전은 httpd라는 이름으로
           설치되므로 두 가지 모두 검색해서 나오는 것을 삭제한다.
    ㄷ. 찾아진 아파치를 제거한다.
       예) rpm -e httpd --nodeps
   4) PHP 및 MySQL도 찾아서 존재하면 삭제한다.
    ㄱ. 검색
       rpm -qi php
       rpm -qi mysql
    ㄴ. 삭제
       rpm -e php --nodeps
       rpm -e mysql --nodeps
   5) MySQL 설치하기
    ㄱ. mysql 소스파일의 압축을 푼 디렉토리로 이동한다.
       예) cd /usr/local/src/mysql-3.23.57
    ㄴ. ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
          => --prefix는 인스톨한 기본 디렉토리를 지정하는 옵션이다. --with-charset=euc_kr은
            한글을 지원한다는 뜻이다. 이 옵션을 지정하지 않아도 큰 상관은 없지만 정확한 한글
           정렬을 위해 필요하다.
            (참고) 기타 많이 쓰는 옵션으로 locatstatedir= 있는데 이것은 DB데이터를 저장할
                 디렉토리를 지정하는 옵션이다.
                    예) localstatedir=/usr/local/mysql/data
    ㄷ. make
        => 소스이기 때문에 컴파일과정이 필요하다.
    ㄹ. make install
        => 컴파일한 것을 실행시켜 설치한다.
    ㅁ. 참고: MySQL의 테스트
       1. MySQL의 기본 데이터베이스생성하기 : 처음 설치시 한번 꼭 실행한다. 이 작업은 MySQL
                                             기본 데이터베이스인 mysql과 testdb를 설치해준다.
         예) /usr/local/mysql/bin/mysql_install_db
       2. MySQL데몬을 띄운다. : 설치된 디렉토리로 이동하여 데몬을 띄운다.
         예) /usr/local/mysql/bin/safe_mysqld --user=root &
       3. 실행
         예) /usr/locasl/mysql/bin/mysql -uroot mysql
       4. 성공으로 실행됐을 경우 : 다음과 같이 mysql> 이라는 프롬프트가 나타나면 정상적으로
                                  설치된 것이다. quit명령을 내려 데이터베이스에서 빠져나온다.
         예) mysql> quit
             bye
   6) apache 설치하기
    ㄱ. apache압축을 푼 디렉토리로 이동한다.
       예) cd /usr/local/src/httpd-2.0.47
    ㄴ. ./configure --prefix=/usr/local/apache --enable-mods-shared=most --enable-module=so
          => --prefix는 아파치가 설치될 디렉토리를 지정하는 것이고, --enable-mods-shared=most
            와 --enable-module=so는 DSO방식으로 PHP 모듈이 사용될 수 있도록 지정하는 옵션이다.
    ㄷ. make
    ㄹ. make install
   7) php설치
     ㄱ. php압축을 푼 디렉토리로 이동한다.
        예) /usr/local/src/php-4.3.2
     ㄴ. ./configure --with-apxs2=/usr/local/apache/bin/apxs  --with-mysql=/usr/local/mysql   
        --with-config-file-path=/usr/local/apache/conf --with-exec-dir=/usr/local/apache/bin
        --enable-track-vars --enable-trans-sid
          => (설명)
            --with-apxs2 는 PHP가 아파치데몬에 DSO 모듈로 로딩되도록 하기 위해서 apxs파일의
           위치를 지정하는 것이고 --with-mysql은 MySQL과 연동하기 위해 MySQL이 설치되어 있는
           디렉토리를 가리키는 것이다. --with-config-file-path는 php.ini파일의 경로를 지정하는
           옵션이고, --with-exec-dir은 아파치데몬의 실행경로는 지정한다. --enable-track-vars는
           HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 있는 GET/POST/COOKIE변수들이
           어디서 왔는지 기억하고 있게 만들고 --enable-trans-sid는 보안과 관련된 옵션이다.
    ㄷ. make
    ㄹ. make install
    ㅁ. cp php.ini-dist /usr/local/apache/conf/php.ini
         => 소스디렉토리에 있는 php.ini를 /usr/local/apache/conf디렉토리에 php.ini로 복사한다.
   8) httpd.conf설정(/usr/local/apache/conf/httpd.conf의 환경파일을 설정)
    ㄱ. ServerName의 항목을 찾아 입력: 도메인이름 또는 IP주소를 입력한다.
    ㄴ. DSO support항목에서 아래 모듈부분이 활성화되어있는지 확인한다.
       LoadModule php4_module        modules/libphp4.so
    ㄷ. php관련환경설정 : AddType이라는 항목이 모여있는 곳으로 이동한 뒤 아래와 같이 추가한다.
       예)
           AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
           AddType application/x-httpd-php-source .phps
   9) 아파치 데몬을 재가동한다.
    예) /usr/local/apache/bin/apachectl restart


2. Apache 2.0, PHP, MySQL 연동 확인
(1) 아파치 테스트하기
   1) 설명: 위와 같이 소스로 컴파일하면 아파치 설치디렉토리가 /usr/local/apache가 된다. 웹문서
           를 올려서 아파치 웹서버가 동작하는지 확인한다. 웹문서디렉토리는 /usr/local/apache/
           htdocs 이다.
   2) 방법
    ㄱ. /usr/local/apache/htdocs 디렉토리에 작성한 웹문서(index.html)를 올린다.
    ㄴ. 아파치데몬의 작동유무를 확인한다. 아래와 같이 재가동해도 된다.
       예) /usr/local/apache/bin/apachectl restart
    ㄷ. 웹브라우저를 띄우고 확인한다.
       예) http://localhost (리눅스의 X-window에서 로컬로 확인할 경우)
           http://192.168.0.1 (IP주소로 세팅한 경우)
           http://linux.co.kr (도메인으로 세팅한 경우)
(2)아파치와 PHP가 제대로 연동되는지 테스트해보기
   1) 설명: test.php라는 간단한 php문서를 phpinfo()라는 PHP정보를 보여주는 함수를 이용해서
           작성한 뒤에 웹상에서 불어오도록 한다.
   2) 방법
    ㄱ. 아래와 같이 test.php 를 만든다.
      <?
      phpinfo();
      ?>
    ㄴ. 위 파일을 /usr/local/apache/htdocs 디렉토리에 위치시킨다.
    ㄷ. 웹상에서 불러본다.
       예) http://localhost/test.php
           http://192.168.0.1/test.php
           http://linux.co.kr/test.php
   3) 결과
    ㄱ. 설명: php관련정보가 뜬다면 제대로 세팅된 것이다. 만약 정보가 제대로 보이지 않고  소스
             즉 위의 내용이 그대로 웹페이지에 보인다면 다음과 같이 해본다.
    ㄴ. 오류해결
      a. 재부팅하거나 'depmod -a' 명령을 내린다.
         => 관련 새로 설치된 PHP관련 모듈이 라이브러리로 올라가지 않아서 그럴수도 있으니 재부
           팅하면 리눅스서버에서 관련 모듈들을 다시 읽어들이므로 PHP가 정상적으로 작동한다.
      b. 재부팅해서 안되면 아파치와 PHP 설치시 환경설정 오류일 수 있으니 아파치와 PHP를  다시
        컴파일한다. 기존의 압축파일을 지우고 tar파일을 다시 풀고 설치해도 되고, 아니면
        make clean명령으로 지정한 설정을 초기화한뒤 다시 configure 부터 해도 된다.
(3) PHP 설치후에 Form태그와의 연동에 대하여
   1) 설명: PHP 4.2.x 버전부터 php.ini의 항목중에 register_globals라는 값이 Off되어 있다. 보안
           상 이 값이 Off가 되어 있다. (설치시에 컴파일을 다 끝내면 화면에 메시지로 찍힌다.)
           만약 이 값을 On하지 않고 Form태그를 이용해서 MySQL에 데이터를 입력하면 값이 무조건
           공백으로 들어간다. 이 값을 On 해야 된다.
   2) 방법
    1) vi /usr/local/apache/conf/php.ini 로 파일은 연다.
    2) register_globals=On 으로 바꾼다.
    3) 아파치를 재시작한다. ( PHP는 환경설정이 바뀌면 아파치에 모듈화에서 설치되어 있으므로
      아파치만 재시작하면 자동으로 관련설정이 바뀐다.)
      예) /usr/local/apache/bin/apachectl restart

1. APM에 대하여
(1) 개요
  리눅스를 서버로 사용하는 대부분의 이유는 웹서버를 구축하기 위해서이다. 웹서버는 아파치라는
프로그램을 설치하면 된다. 단순히 웹문서인 html문서만을 보여준다면 그냥 사용해도 되지만, 서버
에서 게시판이나 회원가입같은 처리를 한다면 아파치만으로는 부족하다. 그래서, 리눅스에서는 PHP
라는 웹 프로그래밍언어와 MySQL이라는 데이터베이스와 연계해서 많이 사용한다. 데이터베이스인
MySQL은 보통 먼저 설치후에 아파치가 참조하는 형태로 설치가 되기 때문에 크게 고려하지 않아도
된다. 그러나, 아파치와 PHP는 거의 하나처럼 작동하기 때문에 두 프로그램의 설치시에 고려를 해야
한다.
(2) 아파치와 PHP
  웹서버 프로그램인 아파치는 HTML문서를 보여주는 역할을 한다. PHP는 C언어같은 특별한 언어적 구
조를 가지고 있다. PHP로 작성한 문서가 HTML처럼 해석되려면 아파치에서 해석이 되도록 설치해야
한다. 아파치와 PHP가 작동하는 방식은 아파치서버에 PHP가 묻어서 작동하는 방식이다. 즉, 아파치
서버에 PHP문서를 해석할 수 있는 해석기를 장착한다고 볼 수 있다. 이렇게 장착되는 것을 모듈(Mod
ule)이라고 부르는데, 아파치에 PHP를 모듈로 장착하는 방법에는 크게 두가지 방법이 있다. 하나는
정적 모듈로 장착하는 것이고 하나는 동적 모듈로 장착하는 것이다. 아파치에 정적모듈로 PHP를 장
착하면 PHP가 아파치에 완전히 고정되므로 처리속도가 빠르다. 사용자가 많고 PHP가 많이 사용되면
정적모듈로 장착하는 것이 좋다. 단점으로는 아파치나 PHP 업데이트시에 두 가지 프로그램을 다시
설치해야 한다. 동적모듈은 흔히 DSO(Dynamic Shared Object)라 하는데, 이러한 동적모듈의 장점은
모듈이나 라이브러리를 언제든지 적재할 수 있고, 필요없을 때는 사용하지 않을 수도 있어 자원의
효율성면에서는 우수하다. 그러나, 동적모듈은 정적모듈방식에 비해 속도가 떨어진다. 참고로 현재
아파치버전에는 1.3버전 계열과 2.0버전이 있다. 1.3버전은 PHP를 정적모듈로 컴파일이 지원되지만
2.0버전은 정적모듈 방식으로 컴파일되지 않고 오직 동적모듈방식인 DSO방식으로만 컴파일된다.
만약 PHP 문서가 많다면 아파치 1.3 으로 컴파일해서 사용하는 것도 좋다.


2. Apache, PHP, MySQL 설치하기
(1) 설명 : Apache 1.3 버전, PHP, MySQL의 설치순서는 가장 기본이 되는 데이터베이스 MySQL를
           가장 먼저 설치하고, PHP, Apache 순서로 설치한다. 리눅스를 설치시에 전체설치하면
           기본적으로 Apache, PHP, MySQL이 설치되지만, 대부분 최신의 버전과는 약간 거리가
           있다. 서버구축시에는 가장 최신 버전을 다운받아 설치하는 것이 좋다. 여기서는 PHP를
           정적모듈형태로 설치 하도록 한다.
(2) 설치하기
   1) Apache, PHP, MySQL 소스파일(source파일: tar.gz로 된 파일)을 다운받아 /usr/local/src에
     위치시킨다.
      예) Apache => www.apache.org
          MySQL  => www.mysql.com
          PHP    => www.php.net

   2) 다운받은 파일들의 압축을 푼다.
    예) tar zxvf mysql-3.23.57.tar.gz
        tar zxvf apache_1.3.28.tar.gz
        tar zxvf php-4.3.2.tar.gz
   3) 기존의 인스톨된 apache제거하기 : rpm패키지로 설치되어 있는 아파치 웹서버 프로그램을 삭
                                      제한다. 꼭 삭제할 필요는 없지만, 공간도 차지하고 새롭게
                                      설치할 아파치와 충돌될 수도 있다.
    ㄱ. 아파치 데몬을 정지시킴 : /etc/rc.d/init.d/httpd stop
         => 아파치 데몬이 작동하지 않을 수도 있다.
    ㄴ. 인스톨된 아파치를 찾는다. : rpm -qi apache 또는 rpm -qi httpd
         => 아파치 1.3 버전은 apache라는 이름으로 설치되지만, 2.0버전은 httpd라는 이름으로
           설치되므로 두 가지 모두 검색해서 나오는 것을 삭제한다.
    ㄷ. 찾아진 아파치를 제거한다.
       예) rpm -e httpd --nodeps
   4) PHP 및 MySQL도 찾아서 존재하면 삭제한다.
    ㄱ. 검색
       rpm -qi php
       rpm -qi mysql
    ㄴ. 삭제
       rpm -e php --nodeps
       rpm -e mysql --nodeps
   5) MySQL 설치하기
    ㄱ. mysql 소스파일의 압축을 푼 디렉토리로 이동한다.
       예) cd /usr/local/src/mysql-3.23.57
    ㄴ. ./configure --prefix=/usr/local/mysql --with-charset=euc_kr
          => --prefix는 인스톨한 기본 디렉토리를 지정하는 옵션이다. --with-charset=euc_kr은
            한글을 지원한다는 뜻이다. 이 옵션을 지정하지 않아도 큰 상관은 없지만 정확한 한글
           정렬을 위해 필요하다.
            (참고) 기타 많이 쓰는 옵션으로 locatstatedir= 있는데 이것은 DB데이터를 저장할
                 디렉토리를 지정하는 옵션이다.
                    예) localstatedir=/usr/local/mysql/data
    ㄷ. make
         => 소스이기 때문에 컴파일과정이 필요하다.
    ㄹ. make install
         => 컴파일한 것을 실행시켜 설치한다.
    ㅁ. 참고: MySQL의 테스트
       1. MySQL의 기본 데이터베이스생성하기 : 처음 설치시 한번 꼭 실행한다. 이 작업은 MySQL
                                             기본 데이터베이스인 mysql과 testdb를 설치해준다.
         예) /usr/local/mysql/bin/mysql_install_db
       2. MySQL데몬을 띄운다. : 설치된 디렉토리로 이동하여 데몬을 띄운다.
         예) /usr/local/mysql/bin/safe_mysqld --user=root &
       3. 실행
         예) /usr/locasl/mysql/bin/mysql -uroot mysql
       4. 성공으로 실행됐을 경우 : 다음과 같이 mysql> 이라는 프롬프트가 나타나면 정상적으로
                                  설치된 것이다. quit명령을 내려 데이터베이스에서 빠져나온다.
         예) mysql> quit
             bye
   6) apache환경설정: 이 작업은 설치하는 것이 아니라 PHP의 설치를 위해 아파치가 설치될 디렉토
                     리만 configure한다.
    ㄱ. apache압축을 푼 디렉토리로 이동한다.
    ㄴ. ./configure --prefix=/usr/local/apache (아파치가 설치될 디렉토리 지정)
   7) php설치
     ㄱ. php압축을 푼 디렉토리로 이동한다.
     ㄴ. ./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.28 --enable-tra
        ck-vars
          => --with-mysql은 MySQL과 연동하기 위해 MySQL이 설치되어 있는 디렉토리를 가리키는 것
            이고, --with-apache는 아파치에 static object로 인스톨한다는 것이다. 경로는 아파치
            소스가 풀려있는 곳을 가리켜야 한다. --enable-track-vars는 HTTP_GET_VARS,
            HTTP_POST_VARS, HTTP_COOKIE_VARS 배열에 있는 GET/POST/COOKIE변수들이 어디서 왔는지
            기억하고 있게 만든다. 이 옵션은 단지 Default값을 정하는 것 뿐이다.
    ㄷ. make
    ㄹ. make install
    ㅁ. cp php.ini-dist /usr/local/lib/php.ini
        => PHP의 환경설정파일인 php.ini를 라이브러리 디렉토리에 등록시킨다.

   8) apache설치
    ㄱ. apache압축을 푼 디렉토리로 이동한다.
    ㄴ. ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a
           => php를 아파치모듈로 인식하기 위해 환경 설정을 한다.
    ㄷ. make
    ㄹ. make install
   9) httpd.conf설정(/usr/local/apache/conf/httpd.conf의 환경파일을 설정)
    ㄱ. ServerName의 항목을 찾아 입력: Domain Name 또는 IP주소를 적는다.
    ㄴ. php관련환경설정 : AddType이라는 항목이 모여있는 곳으로 이동한 뒤 아래와 같이 추가한다.
       예)
           AddType application/x-httpd-php .php .htm .html .inc .php4 .php3
           AddType application/x-httpd-php-source .phps
 
1. 개요

웹서버를 운영하기 위해서는 아파치 서버가 작동을 해야한다. 배포판 리눅스를 인스톨하면 자동으
로 아파치 웹서버프로그램이 같이 인스톨되므로 기존에 인스톨된 아파치를 가지고 간단히 웹서버를
구축해 보도록 한다.

2. 웹서버 프로그램 아파치(Apache) 정보 확인하기
(1) 설명: 리눅스에서 웹서버를 운영하기 위해 사용하는 프로그램이 아파치이다. 현재 설치되어
          있는 아파치 프로그램의 정보를 확인하고 관련파일의 파악이 중요하다. 현재 레드햇 8.0
          에는 아파치 2.0 버전이 설치되어 있다. 예전에 레드햇 7.x계열에서는 apache라는 이름으
          로 설치되었지만 현재는 데몬의 이름인 httpd라는 이름으로 설치되어 있다.
(2) 확인
   1) 간단한 정보확인하기
     [root@www root]# rpm -qi httpd
     Name        : httpd                        Relocations: (not relocateable)
     Version     : 2.0.40                            Vendor: Red Hat, Inc.
     Release     : 8                             Build Date: 2002년 09월 05일 (목) 오전 06시 23분 25초
     Install date: 2003년 01월 24일 (금) 오전 12시 22분 18초      Build Host: daffy.perf.redhat.com
     Group       : 시스템 환경/ 데몬들           Source RPM: httpd-2.0.40-8.src.rpm
     Size        : 2702244                          License: Apache Software License
     Signature   : DSA/SHA1, 2002년 09월 05일 (목) 오전 07시 51분 41초, Key ID 219180cddb42a60e
     Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
     URL         : http://httpd.apache.org/
     Summary     : Apache HTTP 서버
     Description :
     Apache는 강력하고, 완전한 기능을 갖춘, 효율적이며 자유롭게
     사용이 가능한 웹 서버입니다. Apache는 인터넷 상에서 가장 인기있는
     웹 서버입니다.
   2) 설치된 파일의 목록확인하기
    ㄱ. [root@www root]# rpm -ql httpd
          => 설치된 httpd 패키지의 전체 파일 목록을 보여준다.
    ㄴ. [root@www root]# rpm -qc httpd
          => 설치된 httpd 패키지의 환경설정파일이나 실행스크립트를 보여준다.

3. 설정하기
(1) 설명: 간단히 웹서버를 구축하려면 웹서버 프로그램인 아파치의 주 환경설정파일인 httpd.conf
          파일을 설정해야 하며, 또한 웹문서(html문서)가 위치할 디렉토리의 경로를 알아야 한다.
(2) 관련파일 및 디렉토리
   1) /etc/rc.d/init.d/httpd : 아파치데몬을 실행시키는 스크립트이다.
   2) /etc/httpd/conf/httpd.conf : 아파치 주 환경 설정파일이다.
   3) /var/www/html : html문서가 위치하는 디렉토리이다.
(3) httpd.conf 설정하기
   1) 설명: /etc/httpd/conf디렉토리에 있는 httpd.conf파일을 현재 설정에 맞게 설정해야 한다.
           vi 편집기로 해당파일을 오픈한 뒤에 명령모드에서 '/항목이름'으로 찾아 변경하도록
           한다.
   2) 주요항목 설정
    ㄱ. ServerName
      a. 설명: 서버의 도메인이름을 적는 부분이다. 현재 주석처리가 되어 있으며 주석처리(#)를
              없애고 도메인을 적는다. 도메인이 없으면 IP주소를 적는다.
      b. 설정예
        ServerName 203.xxx.xxx.xxx
    ㄴ. DocumentRoot
      a. 설명: 웹문서인 html문서가 위치하는 경로를 나타낸다.
      b. 설정예
        DocumentRoot "/var/www/html"
          => 현재 웹문서가 위치하는 디렉토리는 /var/www/html이다.
    ㄷ. UserDir
      a. 설명: 개인 사용자의 홈페이지 영역을 나타낸다. 개인 홈디렉토리에서 이 지시자가 가리키
              는 디렉토리를 생성하고 웹문서를 올리면 된다. 기본 주석처리가 되어 있으니 주석을
              제거하고 설정하도록 한다.
      b. 설정예
        UserDir public_html
          => 현재 개인 사용자의 홈디렉토리는 public_html이다.
    ㄹ. DirectoryIndex
      a. 설명: 여러 웹문서중에 기본으로 인식하는 웹문서를 지정한다.
      b. 설정예
        DirectoryIndex index.html
          => /var/www/html에서 index.html을 기본 웹문서로 인식한다.

4. 웹서버로 사용하기

(1) 웹서버 구축하기
   1) vi편집기로 /etc/httpd/conf/httpd.conf 파일을 연다.
   2) /ServerName이라고 입력하여 항목을 찾는다.
   3) 주석처리(#)없애고 도메인을 적고 도메인이 없으면 IP주소를 그대로 적는다.
   4) 저장하고 빠져나온다.
   5) /var/www/html에 웹문서를 올린다. 이 곳에 올릴 기본 문서는 index.html이어야 한다.
   6) httpd 데몬을 아래의 방법중 하나로 재가동한다.
     ㄱ. service httpd restart
     ㄴ. /etc/rc.d/init.d/httpd restart
(2) 개인 사용자의 홈페이지영역 설정하기
   1) 개인사용자의 홈페이지는 홈디렉토리 아래에 public_html이라는 디렉토리를 만들어야 한다.
     예) mkdir public_html
   2) 이 디렉토리에 index.html이라는 문서를 메인페이지로 해서 넣는다.
   3) 접근권한을 설정한다. 기본값으로 개인 홈디렉토리의 접근권한은 다른사용자에게 막혀있다.
     따라서 chmod명령을 이용하여 다른 사용자의 접근권한을 부여한다. 디렉토리인 관계로 rx권한을
     부여해야 한다.
     예) chmod go+rx ID, chmod a+rx ~ 또는 chmod 755 ~
   4) 개인 홈페이지의 주소는 아래와 같다.
     http://호스트명 또는 ip/~사용자ID
(3) 참고: 사용자의 홈디렉토리 변경하기
    리눅스에서 개인 홈페이지의 영역설정을 위한 기본 디렉토리가 public_html이다. 이 디렉토리를
   보다 짧은 이름의 디렉토리로 환경을 바꿀수 있다. 역시 환경설정관련 파일은 /etc/httpd/conf/ht
   tpd.conf이다. 여기서 바꿔야 할 항목은 UserDir 이다. vi를 사용하여 편집하거나 검색할 때 대소
   문자 꼭 지켜야 한다. vi 명령모드에서 '/public_html' 이라고 찾으뒤 한 두번쯤 n키를 해당줄이
   나타난다. 이 항목의 값을 간단하게 www이라고 하자. 그럼 'UserDir public_html'을 'UserDir
   www'이라고 변경하면 된다. 변경후 꼭 httpd를 재가동해야 한다.

5. 웹서버관련 기타중요파일
(1) /etc/rc.d/init.d/httpd
   아파치 데몬을 제어(시작,중지,재시작)할 수 있는 스크립트 파일이다.
(2) /usr/bin/htpasswd
   특정 디렉토리를 제어할 때 사용하는 사용자패스워드 입력프로그램이다.
(3) /usr/sbin/httpd
   아파치 데몬이다.
(4) /etc/httpd/logs
   아파치 웹 서버에 접근 또는 에러난 부분에 대해서 기록하는 디렉토리이다. 아파치웹서버를 관리
  와 관계가 있다.
(5) /usr/sbin/apxs
   DSO(Dynamic Shared Object)기반 아파치 모듈을 컴파일할 때 사용되는 유틸리티이다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. RAID란?
RAID(Redundant Array of Independent[또는 inexpensive] Disks)는 여러 대의 하드디스크가 있을 때
동일한 데이터를 다른 위치에 중복해서 저장하는 방법이다. 데이터를 여러 대의 디스크에 저장하여
입출력 작업이 균형을 이루게 되어 전체적인 성능을 향상시킨다. 운영체제에서 하나의 RAID는 논리적
으로 하나의 디스크로 인식하여 처리된다. 현재 RAID는 데이터를 기록하는 방식과 에러를 체크하는
패리티(Parity)를 사용 등 구성방법에 따라 다양한 형태로 존재한다.

2. RAID의 이용
초기의 RAID는 저용량 하드디스크를 하나의 디스크로 확장하여 사용하는 것이 주류였으나 현재는 백
업을 가능하게 하고 안정적인 데이터의 보존과 유지기능도 한다. 또한 구성방법도 소프트웨어적 구현
과 하드웨어적 구현 등 다양한 방법으로 가능하다. 소프트웨어 RAID는 비용적인 측면에서 유리하나
보다 나은 성능을 위해서는 하드웨어 RAID가 좋다. 하드웨어 수준의 RAID에서 주목할 만한 기능은
전원이 켜있는 상태에서 하드드라이브를 교체할 수 있는 핫스왑(Hot Swap) 베이(Bay)가 있다.

3. RAID에서 사용하는 기술
(1) 스트라이핑(Striping): 스트라이핑기술은 연속된 데이터를 여러 개의 디스크에 라운드로빈방식
                          으로 기록하는 기술이다 .이 기술은 프로세서가 하나의 디스크에서 읽어
                          들이는 것보다 더 빠르게 데이터를 읽거나 쓸 수 있다면 매우 유용하다.
                          즉, 서로 겹쳐서 읽거나 쓸 수 있도록 설계된 네 개의 드라이브가 있을
                          경우, 보통 하나의 섹터를 읽을 수 있는 시간에 네 개의 섹터를 동시에
                          읽을 수 있다.
(2) 미러링(mirroring): 디스크에 에러가 발생할 경우를 대비하여 데이터의 손실을 막기위해, 데이
                       터를 하나 이상의 장치에 중복 저장하는 기술이다. 이 기법은 하드웨어 또는
                       소프트웨어 두가지 방법, 모두 구현될 수 있다.

4. RAID의 종류
(1) RAID-0
   1) 설명: 스트라이핑기술을 사용하여 빠른 입출력 속도를 제공한다. 데이터를 패리티없이 디스크
           에 분산하여 기록한다. 처리속도는 빠르나 데이터복구 능력이 없다.
   2) 그림
     

(2) RAID-1
   1) 설명: 미러링기술을 사용하여 두 개의 디스크에 데이터를 동일하게 기록한다. 스트라이프는
           사용하지 않으며, 각 드라이브를 동시에 읽을 수 있어 읽기 성능은 향상되나 쓰기 성능은
           단일 디스크 드라이브와 같다. 데이터 복구 능력이 탁월하다.
   2) 그림
     

(3) RAID-2
   1) 설명: 디스크들간의 스트라이프를 사용하며, 몇몇 디스크들은 에러를 감지하고 수정하는 ECC
           정보를 가지고 있다.
   2) 그림
     

(4) RAID-3
   1) 설명: 스트라이프를 사용하며 패리티정보를 저장하기 위해 별도로 하나의 드라이브를 사용한
           다. 입출력작업이 동시에 모든 드라이브에 대해 이루어지므로 입출력을 겹치게 할 수
           없다. 대형 레코드가 많은 곳에 적합하다.
   2) 그림
     

(5) RAID-4
   1) 설명: 블록형태의 스트라이프를 사용하며, 이는 어떤 단일 드라이브로부터 레코드를 읽을 수
           있다. 데이터를 읽을 때 중첩 입출력의 장점을 취할 수 있다. 쓰기시에는 패리티를 연산
           해야 하고, 패리티 디스크에 저장해야 하기 때문에 입출력의 중첩이 불가능하고 시스템에
           서 병목현상이 일어날 수 있다.
   2) 그림
     

(6) RAID-5
   1) 설명: 별도의 패리티 디스크 없이 회전식 패리티 어레이 분산하여 기록하지만 데이터를 중복
           저장하지는 않는 방법으로 일반적으로 많이 사용된다. 디스크에 쓰기 제한 주소를 지정
           하므로 모든 읽기/쓰기가 중첩될 수 있다. 작고 랜덤한 입출력이 많은 경우 더 나은 성능
           을 제공한다. 드라이브의 개수는 최소 3개로 구성하면 보통 5개 이상의 드라이브를 사용
           한다.
   2) 그림
     

(7) RAID-6
   1) 설명: 전체적인 구성은 RAID-5와 비슷하지만 드라이브들 간에 분포되어 있는 2차 패리티구성을
           포함함으로써 매우 높은 고장대비 능력을 제공한다.
   2) 그림
     

(8) RAID-7
   1) 설명: 하드웨어 컨트롤러에 내장되어 있는 운영체제를 사용하여 속도가 빠른 버스를 통한 캐시,
           독자적인 컴퓨터의 여러가지 특성을 포함하고 있다. 현재 하나의 업체만 이 시스템을
           제공한다.
   2) 그림
     

(9) RAID 0+1
   1) 설명: RAID-0의 스트라이핑기술과 미러링기술을 동시에 구현한 방법이다.
   2) 그림
     

(10) RAID-10
   1) 설명: RAID-1의 미러링에 스트라이프 어레이를 별도로 제공한다.
   2) 그림
     

(11) RAID-53
   1) 설명: RAID-3 방식에 별도의 스트라이프 어레이를 제공한다.
   2) 그림
    


5. 리눅스에서 RAID 구현하기
(1) 리눅스에서 지원하는 Software RAID 레벨
   1) RAID-Linear: 간단히 여러개의 파티션을 하나로 묶는 역할을 한다. 성능의 개선이나 안정성은
                  제공되지 않는다.
   2) RAID-0: RAID-Linear와 비슷하나 스트라이핑기술을 이용하여 처리속도가 빨라지는 속도향상이
             있다. 그러나, 디스크의 오류에 대한 안정성은 제공되지 않는다.
   3) RAID-1: 미러링기술을 이용하여 두 개 또는 그 이상의 디스크를 정확하게 복사본을 만들어
             유지시킨다. 오류가 발생하면 복사해둔 이미지로 데이터를 복구하게 된다.
   4) RAID-3: 패리티정보를 모아 별도의 디스크에 저장한다. 이 패리티정보를 이용하여 오류가 발생
             한 디스크의 데이터를 복구한다. 안정성은 있으나 디스크의 성능이 다소 감소한다.
   5) RAID-5: RAID-3과 비슷하게 패리티정보를 이용하나 디스크에 저장하지는 않는다. 안정성도 제
             공하고 RAID-3에 비해 디스크의 성능저하가 일어나지 않는다.
(2) 리눅스에서 RAID 관련 예제 파일
   1) 설명: 레드햇 9.0기준으로 /usr/share/doc/raidtools-1.00.3 디렉토리에 보면 각 레벨별로
           예제파일이 존재한다.
   2) 확인
     [root@redhat9 raidtools-1.00.3]# ls
     COPYING  multipath.conf.sample  raid1.conf.sample  raid5.conf.sample
     README   raid0.conf.sample      raid4.conf.sample  raidtab.sample
(3) 사용예: RAID-0 구성하기
   1) fdisk를 이용하여 두 개의 파티션을 생성한다. 속성을 부여한다.
    ㄱ. fdisk를 사용하여 2개의 partiton 생성(n)
       예) /dev/hda8, /dev/hda9로 가정
    ㄴ. 생성된 파티션의 속성 변경(t => fd)
       예) [root@linux245 root]# fdisk -l

           Disk /dev/hda: 20.4 GB, 20411080704 bytes
           255 heads, 63 sectors/track, 2481 cylinders
           Units = cylinders of 16065 * 512 = 8225280 bytes

              Device Boot    Start       End    Blocks   Id  System
           /dev/hda1   *         1        64    514048+  83  Linux
           /dev/hda2            65      1339  10241437+  83  Linux
           /dev/hda3          1340      1721   3068415   83  Linux
           /dev/hda4          1722      2481   6104700    f  Win95 Ext'd (LBA)
           /dev/hda5          1722      2103   3068383+  83  Linux
           /dev/hda6          2104      2230   1020096   83  Linux
           /dev/hda7          2231      2263    265041   82  Linux swap
           /dev/hda8          2264      2372    875511   fd  Linux raid autodetect
           /dev/hda9          2373      2481    875511   fd  Linux raid autodetect
    ㄷ. 재부팅: fdisk를 설정한 내용을 반영시키려면 재부팅하도록 한다.
   2) /etc/raidtab 파일 생성하기
    ㄱ. /usr/share/doc/raidtools-1.00.3 디렉토리에 있는 샘플파일을 복사한다.
       cp /usr/share/doc/raidtools-1.00.3/raidtab.sample /etc/raidtab
    ㄴ. /etc/raidtab 파일 편집하기
       [root@linux245 root]# cat /etc/raidtab
       raiddev /dev/md0                        // raid 디바이스명 지정
           raid-level                0         // raid 레벨 지정
           nr-raid-disks             2         // raid 갯수 지정
           persistent-superblock     1         // 기본 세팅지정
           chunk-size                4        

           device                    /dev/hda8  // 디바이스명
           raid-disk                 0          // raid 디스크 넘버로 0부터 설정
           device                    /dev/hda9
           raid-disk                 1
   3) raid device를 생성
     [root@linux245 root]# mkraid /dev/md0
     handling MD device /dev/md0
     analyzing super-block
     disk 0: /dev/hda8, 875511kB, raid superblock at 875392kB
     disk 1: /dev/hda9, 875511kB, raid superblock at 875392kB
   4) raid를 작동시킨다.
     [root@linux245 root]# raidstart /dev/md0
   5) 파일시스템을 생성한다.
     [root@linux245 root]# mkfs -t ext3 /dev/md0
   6) 사용하고자할 디렉토리 생성
     [root@linux245 root]# mkdir /data
   7) 마운트
     [root@linux245 root]# mount -t ext3 /dev/md0 /data
   8) 확인
    ㄱ. mount 확인
       [root@linux245 root]# mount
       /dev/hda6 on / type ext3 (rw)
       none on /proc type proc (rw)
       usbdevfs on /proc/bus/usb type usbdevfs (rw)
       /dev/hda1 on /boot type ext3 (rw)
       none on /dev/pts type devpts (rw,gid=5,mode=620)
       /dev/hda5 on /home type ext3 (rw)
       none on /dev/shm type tmpfs (rw)
       /dev/hda2 on /usr type ext3 (rw)
       /dev/hda3 on /var type ext3 (rw)
       /dev/md0 on /data type ext3 (rw)            // 이 부분
    ㄴ. raid 상태확인
       [root@linux245 root]# lsraid -p
       [dev   9,   0] /dev/md0         F4E8064A.0479FB89.38521B8A.D8094A34 online
       [dev   3,   8] /dev/hda8        F4E8064A.0479FB89.38521B8A.D8094A34 good
       [dev   3,   9] /dev/hda9        F4E8064A.0479FB89.38521B8A.D8094A34 good
    ㄷ. 용량의 확인
       [root@linux245 root]# df -h
       Filesystem            Size  Used Avail Use% Mounted on
       /dev/hda6             981M  116M  816M  13% /
       /dev/hda1             487M   14M  448M   3% /boot
       /dev/hda5             2.9G   33M  2.8G   2% /home
       none                   62M     0   62M   0% /dev/shm
       /dev/hda2             9.7G  4.5G  4.8G  49% /usr
       /dev/hda3             2.9G  304M  2.5G  11% /var
       /dev/md0              1.7G   33M  1.6G   3% /data
        => 2개의 파티션으로 구성하였으므로 두 개의 파티션이 합쳐진 총 용량으로 표시된다.
   9) 참고: 부팅후에도 계속적으로 사용하려면 /etc/fstab에 등록시킨다.
     예) /dev/md0                /data                   ext3    defaults        0 0
   10) Raid 해제하기
    ㄱ. 파일시스템을 언마운트한다.
       umount /data
    ㄴ. raid를 중지시킨다.
       raidstop /dev/md0
    ㄷ. fdisk로 파티션을 삭제하거나 재설정한다.
(4) 관련명령어
   1) mkraid
    ㄱ. 설명: RAID 장치를 초기화하여 만들어주는 명령어이다.
    ㄴ. 사용법
       mkraid [option] 디바이스명
    ㄷ. option
       -f : 해당 장치를 강제로 초기화시킨다. 데이타가 있더라도 다 지우고 초기화시킨다.
    ㄹ. 사용예
       mkraid /dev/md0
        => /dev/md0 이라는 RAID Device를 생성한다.
   2) raidstart & raidstop
    ㄱ. 설명: RAID 장치를 작동시키는 명령어이다.
    ㄴ. 사용법
       raidstart 디바이스명
       raidstop 디바이스명
    ㄷ. 사용예
      a. raidstart /dev/md0
          => RAID 장치를 작동시킨다.
      b. raidstop /dev/md0
          => RAID 장치를 중지시킨다.
   3) lsraid
    ㄱ. 설명: RAID 장치의 리스트를 보여주는 명령어이다.
    ㄴ. 사용법
       lsraid option [디바이스명]
    ㄷ. option : 대문자옵션을 기본적으로 사용해야 하면 만약 생략하면 array기반이다.
       -A : Array 기반으로 리스트를 확인할 때 쓴다.
       -D : Disk 기반으로 리스트를 확인할 때 쓴다.
       -R : /etc/raidtab 기반으로 리스트를 확인할 때 쓴다.
       -p : RAID 장치를 찾아 출력해준다.
   ㄹ. 사용예
     a. [root@linux245 root]# lsraid -A -p
        [dev   9,   0] /dev/md0         F4E8064A.0479FB89.38521B8A.D8094A34 online
        [dev   3,   8] /dev/hda8        F4E8064A.0479FB89.38521B8A.D8094A34 good
        [dev   3,   9] /dev/hda9        F4E8064A.0479FB89.38521B8A.D8094A34 good
          => Array 기반으로 리스트를 보여준다. 디바이스명을 /dev/md0 라고 입력해도 되고 입력
            하지 않으면 기본 장치를 찾아 보여준다.
     b. [root@linux245 root]# lsraid -D -p
          => Disk 기반으로 리스트를 보여준다.
     c. [root@linux245 root]# lsraid -R -p
          => /etc/raidtab의 내용을 출력해준다.
   4) raidhotadd
    ㄱ. 설명: Software RAID Array에서 하나의 디스크가 실패했을 경우 이것을 다른 디스크로 대체
            시켜 주는 주는 명령이다.
    ㄴ. 사용법
       raidhotadd RAID장치 디스크장치
    ㄷ. 사용예
       raidhotadd /dev/md0 /dev/hda10
        => /dev/hda10 디스크를 /dev/md0 RAID Array로 만든다.
    ㄹ. 참고 : 이 명령은 raidstart 명령에 심볼릭링크이며, 이 명령을 사용하기 전에 해당 파일시
              스템을 언마운트하고 RAID 동작을 정지시킨 후에 해야 한다.
       예) umount /data
           raidstop /dev/md0
           raidhotadd /dev/md0 /dev/hda10
           raidstart /dev/md0
           mount -t ext3 /dev/md0 /data
(5) /etc/raidtab 주요항목분석
   1) raiddev /dev/mdx : RAID array 장치를 정의한다.
   2) rain-level     N : RAID level을 정의한다.
   3) nr-raid-disks  N : RAID 갯수를 정의한다.
   4) persistent-superblock 1 : 이 값은 커널에서 RAID가 쉽게 찾아질 수 있도록 하는 설정이다.
                               값은 0 또는 1이 설정될 수 있으며, 1을 보통 자동으로 시작하도록
                               하는 설정이다.
   5) chunk-size     N : 레이드에 기록되는 사이즈를 정한다. 보통 kilobytes 단위이며, 커널설정
                        에 따라 차이는 있지만 최대 4M이다. 일반적으로 4k ~ 128k 로 설정한다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 로그분석
로그분석은 시스템관리와 보안에 상당히 중요하다. 리눅스에서는 기본적으로 모든 행동이 기록이 되어
로그파일로 남는다.


2. 로그분석관련 파일
(1) /var/log 디렉토리 : 대부분의 로그관련 파일들이 위치하는 디렉토리이다.
(2) 주요파일
   1) /var/log/messages
    ㄱ. 설명: 시스템의 표준 에러관련 메시지가 기록되는 파일로 syslogd 라는 데몬에 의해 설정된
            사항들이 기록된다. 기본적으로 루트권한자만이 읽고 쓸 수 있다.
    ㄴ. 로그예
       [root@www root]# cat /var/log/messages
       -- 생략 --
       Feb  1 19:50:55 www  2월  1 19:50:55 su(pam_unix)[32176]: session closed for user root
        => (설명) 시스템로그는 4개의 부분으로 구성되어 있다.
                 1. 날짜 및 시간
                 2. 메시시가 발생한 호스트네임
                 3. 메시지를 발생한 내부 시스템이나 응용프로그램의 이름
                 4. 자체적으로 발생한 메시지, 보통 콜론(:)으로 구분된다.
   2) /var/log/dmesg : 시스템이 부팅할 때 출력되었던 메시지가 로그로 남겨진다. 보통 커널 부트
                      메시지 로그라고 한다.
   3) /var/log/secure : 모든 접속과 관련하여 언제 어디서 어떤 서비스를 사용했는지 기록한다.
                       보통 login, tcp_wrappers, xinetd 관련 로그들이 남는다.
   4) /var/log/xferlog : FTP 접속 관련작업을 기록한다. 보통 wu-ftpd에 의해 발생된 로그이다.
   5) /var/log/cron : cron데몬이 실행했던 작업을 기록한다.
   6) /var/log/maillog : sendmail의 메일관련 작업을 기록한다.
   7) /var/log/lastlog : telnet을 이용한 접속을 기록한다. 바이너리파일로 lastlog라는 명령으로
                        확인한다.
   8) /var/log/wtmp : 콘솔모드, telnet, ftp로 접속한 기록과 시스템을 재부팅한 기록, 접근지등을
                     기록한다. 역시 바이너리파일로 되어 있으며, last라는 명령으로 확인한다.
   9) /var/log/boot.log: 부팅시에 출력되는 모든 메시지를 기록한다. 부팅시의 에러등을 확인할 수
                        있다.
   10) /var/log/cron: 시스템의 정기적인 작업을 수행하는 cron관련 로그를 기록하는 파일이다.
   11) /var/log/sa : sysstat라는 패키지에 의해 기록되는 로그파일들이 위치하는 디렉토리이다.
(참고1) 'w'이라는 현재 로그인한 사용자들의 작업을 보여주는 명령이 있는데 이 명령은 utmp라는
       바이너리 파일의 기록을 보여준다. 이 파일의 위치는 /var/run/utmp이다.

3. 로그관련 데몬
(1) 로그데몬
   1) 설명: 시스템과 관련된 대부분의 로그는 syslogd가 하고 추가로 klogd라는 데몬이 있다.
    ㄱ. syslogd : 커널과 여러가지 시스템 프로그램들은 각종 에러와 경고 메시지, 기타 일반적인
                 메시지들을 출력한다. 이런 메시지들을 파일로 기록하는 데몬이다.
    ㄴ. klogd : 부팅후에 부팅과 관련된 메시지를 보려면 dmesg라는 명령을 친다. 이 명령은 실제
               /var/log/dmesg라는 파일의 정보를 가지고 오는 것이 아니라, 시스템에는 부팅과
               관련된 메시지를 포함하여 커널관련 메시지를 담는 약 8196bytes의 버퍼크기를 갖고
               메시지를 기록하는 데 이 메시지를 기록하는 데몬이 klogd이다.
(2) 관련파일
   1) /etc/rc.d/init.d/syslog : 실행과 관련된 스크립트파일로 실질적인 실행파일이다. syslogd와
                               klogd 데몬을 모두 실행시켜 준다.
   2) /etc/syslog.conf : syslog데몬의 환경설정파일이다.
   3) /etc/sysconfig/syslog : syslogd 와 klogd의 시작과 관련된 스크립트의 환경파일이다.

4. /etc/syslog.conf 파일분석
(1) 기본 구성형식
    facility.level                        action
(2) facility : 메시지를 발생시키는 프로그램의 유형을 나타낸다.
   * facility의 종류
     cron          : cron, at과 같은 프로그램이 발생한 메시지
     auth          : login과 같이 인증프로그램 유형이 발생한 메시지
     authprive     : 개인 인증을 요하는 프로그램 유형이 발생한 메시지
     daemon        : telnetd,ftpd등과 같이 daemon이 발생한 메시지
     kern          : 커널이 발생한 메시지
     lpr           : 프린트 유형의 프로그램이 발생한 메시지
     mail          : mail 시스템이 발생한 메시지
     mark          : syslogd에 의해 만들어지는 날짜유형
     news          : 유즈넷 뉴스 프로그램 유형이 발생한 메시지
     syslog        : syslog 프로그램이 유형이 발생한 메시지
     user          : 사용자 프로세스
     uucp          : UUCP 시스템이 발생한 메시지
     local0-local7 : 여분으로 남겨둔 유형
(참고2) facility 뒤에 .none을 붙이면 해당 facility를 제외하겠다는 의미이다. 예를 들어 mail.
       none은 메일 관련 메시지를 제외한다는 뜻이다.
(3) level : 위험의 정도를 가리키며 설정된 위험의 정도보다 높아야 메시지를 내보낸다. 레벨 앞에
            '='을 사용할 경우 해당 레벨의 위험도와 같은 경우를 의미한다.
    * level의 종류 (위험 레벨이 낮은 것부터 높은 순서로 나열)
      debug   : 프로그램을 디버깅할 때 발생하는 메시지
      info    : 통계, 기본정보 메시지
      notice  : 특별한 주의를 요하나 에러는 아닌 메시지
      warning : 주의를 요하는 경고 메시지
      err     : 에러가 발생하는 경우의 메시지
      crit    : 크게 급하지는 않지만 시스템에 문제가 생기는 단계의 메시지
      alert!   : 즉각적인 조정을 해야 하는 상황
      emerg   : 모든 사용자들에게 전달되어야 할 위험한 상황
(4) action : 메시지를 보낼 목적지나 행동 들에 관한 설정
    * 종류
     file : 해당 file에 내용을 추가
     @host : 지정된 호스트로 메시지를 보냄
     user  : 지정된 사용자의 스크린으로 메시지를 보냄
     *     : 현재 로그인되어 있는 모든 사용자의 스크린으로 메시지를 보냄
(5) 사용예
   1) *.=crit;kern.none                          /var/log/critical
     => 모든 facility가 발생하는 것중에서 crit레벨과 같은 수준의 메시지를 /var/log/critical이라
       는 파일로 저장하는데 커널에서 발생하는 메시지는 제외한다.
   2) *.emerg                                    *
     => 모든 emerg이상의 에러가 발생하면 모든 사용자에게 알려준다.
(참고3) /etc/syslog.conf 파일예
  # Log all kernel messages to the console.
  # Logging much else clutters up the screen.
  #kern.*                                                 /dev/console
 
  # Log anything (except mail) of level info or higher.
  # Don't log private authentication messages!
  *.info;mail.none;news.none;authpriv.none;cron.none              /var/log/messages
     => 모든 info메시지를 기록하되, mail,news,authpriv,cron은 제외
  # The authpriv file has restricted access.
  authpriv.*                                              /var/log/secure
   => 개인인증관련은 /var/log/secure에 기록
  # Log all the mail messages in one place.
  mail.*                                                  /var/log/maillog
   => 모든 메일관련 메시지는 /var/log/maillog에 기록

  # Log cron stuff
  cron.*                                                  /var/log/cron
   => cron관련 메시지는 /var/log/cron에 기록
  # Everybody gets emergency messages, plus log them on another
  # machine.
  *.emerg                                                 *
   => 모든 emerg이상의 에러가 발생하면 모든 사용자에게 알려줌
  # Save mail and news errors of level err and higher in a
  # special file.
  uucp,news.crit                                          /var/log/spooler
   => uucp, news의 crit정보기록은 /var/log/spooler에 기록
  # Save boot messages also to boot.log
  local7.*                                                /var/log/boot.log
   => 부트 메시지는 /var/log/boot.log에 기록
  #
  # INN
  #
  news.=crit                                        /var/log/news/news.crit
  news.=err                                         /var/log/news/news.err
  news.notice                                       /var/log/news/news.notice

5. 로그파일관리
(1) logrotate : /var/log 디렉토리안에 있는 많은 로그파일은 기존의 파일에 덧붙여지게 되므로
                크기는 계속 커지게 된다. 이를 방지하기 위해서 로그 파일을 조각으로 나눌 수
                있는데, 이런 작업을 하는 프로그램이 logrotate이다.
(2) /etc/logrotate.conf : logrotate의 설정 파일로 로그 파일을 조각으로 나눌 수 있다.
    * 기본 설정
     # see "man logrotate" for details
     # rotate log files weekly
     weekly        // 아래에 특별히 명시하지 않은 로그파일에 대해서는 일주일(weekly) 마다
                   //rotate한다.
     # keep 4 weeks worth of backlogs
     rotate 4     // 최대 4번까지 rotate를 허용한다. (logfile, logfile.1 ~ logfile.4까지의 로그
                  //파일이 생성된다.

     # send errors to root
     errors root  // 에러가 발생하면 root 사용자로 메일을 보낸다.

     # create new (empty) log files after rotating old ones
     create       // rotata한 후에 비어있는 로그파일을 생성한다.

     # uncomment this if you want your log files compressed
     #compress    // 로그파일을 압축하는 옵션이다. 기본값은 활성화되어 있지 않다. 용량문제가
                  //크게 되지 않는다면 압축을 하지 않는 것이 좋다.

     # RPM packages drop log rotation information into this directory
     include /etc/logrotate.d       // 대부분 RPM패키지로 설치되는 데몬들은 이 디렉토리에 로그
                                    //파일이 생성된다. 이 로그파일을 rotate시킬 수 있도록 하는
                                    //설정이다.
     # no packages own lastlog or wtmp -- we'll rotate them here 
     // 아래에 있는 로그파일(wtmp, lastlog)은 어떤 패키지에 의해서도 설정되지 않기 때문에 아래
     //에서 따로 설정한다. 다른 로그파일들은 /etc/logrotate.d내의 파일들에서 모두 설정하고 있
     //다.

     /var/log/wtmp {
         monthly
         create 0664 root utmp
         rotate 1
     }
     // 한달마다 rotate 하며 최대 1회까지만 rotate한다. 관련파일인 utmp파일을 생성한다.


     # system-specific logs may be configured here
     //시스템에 특별한 로그들은 여기에 적는다. 예를 들어lastlog에 대해 만들어 보면

     /var/log/lastlog {
     monthly
     rotate 3
     }
     // 한달마다 rotate하며 최대 3회까지 rotate한다.
(3) /etc/logrotate.d 디렉토리: 각종 응용프로그램의 로그관리를 위한 디렉토리이다. 이 디렉토리
                               내에 응용프로그램의 이름으로 파일이 설정되어 있다.
(4) 참고
    리눅스 서버에서 logrotate은 /etc/cron.daily 디렉토리에 cron작업으로 등록되어 있어 매일
   실행되도록 설정되어 있다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 백업에 대하여
백업은 자료를 보호하는 하나의 방법으로 시스템관리자가 최우선적으로 해야할 작업이다. 여러 개의
자료 복사본을 만들어 놓고 자료를 잃어버릴 경우를 대비하는 것이다. 백업을 실행하는 가장 안전한
방법은 테이프, 제거가능한 드라이브, 기록가능한 씨디 등 시스템과 떨어진 위치에 저장하는 것이다.


2. 자료가 손실되는 경우
(1) 하드웨어의 결함
(2) 소프트웨어의 버그
(3) 사람의 실수나 오동작
(4) 천재지변등의 자연재해

3. 백업전에 고려할 사항
(1) 백업 데이터 선택 여부 : 어떠한 데이터를 백업할 지를 결정해야 한다. 예를 들면 /home 디렉토
                            리만을 백업할 것인지, /var 디렉토리를 할 것인지 아니면 전체 백업을
                            할 것인지를 결정해야 한다.
(2) 백업 주기 : 얼마나 자주 백업할 것인지를 결정해야 한다. 또한 증분백업(Incremental Backup)
                을 할 것인지, 전체백업(Full Backup)를 할 것인지도 결정해야 한다. 증분백업이란
                말 그대로 백업할 대상중에서 추가된 부분만을 백업하는 것을 말하고 전체백업이란
                전체를 그대로 백업하는 것을 말한다. 실제로는 이 두가지 백업형태를 적절히 이용
                하는 것이 중요하다. 예를 들면 월요일부터 토요일까지는 추가된 부분만을 증분백
                업하고, 일요일날에는 전체백업을 실시한다. 또한 매월 1일에는 전체백업을 실시하
                여 한달의 데이터, 1주의 데이터 등의 단위로 백업이 가능하다.
(3) 매체(Media) 선택 여부: 어떠한 백업 매체를 사용할 것인지를 결정해야 한다. 이 매체 선택은
                           경제적인 면과 효율적인 면, 편리성 등을 고려하여 선택한다.
(4) 백업 방법: 어떠한 프로그램을 선택하냐는 것이다. 리눅스에서 사용가능한 백업방법으로는 tar,
               dd, dump, dpio 등이 있고, 이외에도 많은 백업 유틸리티들이 있다. 편리성과 안전성
               , 효율성 등을 고려하려 선택하도록 한다.

4. 백업의 미디어
(1) 개요: 백업할 경우 가장 중요하게 고려하는 것이 예비 매체의 선택이다. 비용, 신뢰성, 처리속
          도, 가용도를 생각해야 한다.
(2) 백업매체
   1) 플로피디스크: 매우 싸며 어느 정도 신뢰할 만하다. 하지만 별로 빠르지 못하고 매우 유동적
                   이다. 또한 대용량의 데이터 저장시에는 적당치 않다.
   2) 테이프: 다소 비싸고 충분히 신뢰할 만하다. 속도도 충분히 빠르다. 테이프의 크기에 따라
             편리하게 이용할 수 있다.
   3) MOD(Magnetic Optical Drive: 광자기 드라이브) : 대용량의 데이터를 랜덤하게 접근하고 한
                                                    부분만 빨리 복원할 수 있다. Giga급의 용량
                                                    을 가진다.
   4) DAT(Digital Audio Tape) : 카세트 테이브보다 더 작은 크기의 미디어로 Giga급 용량을 갖
                               는다.

5. 리눅스에서 지원가능한 백업장치
(1) /dev/cdrom: CD-ROM드라이브
(2) /dev/fd0: 플로피디스크
(3) /dev/ht0, /dev/nht0 : IDE 테이프 장치 (예를 들면 Iomega drives)
(4) /dev/nst0, /dev/st0 : DAT(Digital Audio Tape) 나 DDS(Digital Data Storage) 계열의 SCSI
                          테이프 장치
(5) /dev/nrft0, /dev/nftape, /dev/rft0, /dev/ftape : 플로피 테이프 장치 (예를 들면 QIC-80)

6. 백업툴의 선택

(1) 개요: 전통적인 유닉스툴들에는 tar, dd, cpio, dump등이 있다. tar와 cpio는 유사하고 둘 다
          테이프상에서 복원할 수 있고, 거의 모든 미디어를 사용할 수 있다.
(2) 백업툴
   1) tar: Unix와 리눅스시스템 모두에서 사용되는 유틸리티로 파일이나 디렉토리들을 하나의 파일
          로 묶어주는 역할을 한다. 사용이 쉽고 소수의 파일백업에 좋고, 원본파일을 남겨두므로
          안전하다. 전통적인 유닉스의 tar는 압축기능을 하는 옵션이 없지만, 리눅스의 GNU tar는
          압축도 지원한다.
   2) cpio: tar와 비슷한 유틸리티로 많은 양의 데이터에 대해서는 tar보다 빠르다. 장치파일이나
           네트워크 파일등의 특수 파일도 백업이 가능하고 백업본의 크기도 작고, 백업본에 손상된
           부분이 있더라도 손상된 부분을 제외하고 나머지 부분을 복구한다. 그러나, 증분백업기능
           을 지원하지 않는다.
   3) dump: ext2 나 ext3 파일시스템만 지원하고, 파일들을 백업하지않고 파일시스템 자체를 직접
           읽어내는 방법을 사용한다. 전체백업과 증분백업이 가능하다.
   4) dd : data dump의 약자로 파티션 전체의 백업등이 가능하다. 실제적으로는 백업보다는 다른 경
          우에 더욱 더 많이 쓰인다.
   5) 기타: amanda, Arkeia, Bru, Veritas(client), UniBACK, ArcServe 등

7. tar를 이용하여 백업하기
(1) 전체백업
   1) tar cvfp home.tar /home
       => /home 디렉토리를 퍼미션을 그대로 유지하면서 home.tar라는 파일로 묶는다.
   2) tar cf /dev/st0 /home
       => /home디렉토리를 SCSI 테이프장치인 /dev/st0에 백업한다.
   3) tar zcf /dev/st0 /home
       => /home디렉토리를 SCSI 테이프장치인 /dev/st0에 압축해서 백업한다.
   4) tar zxf /dev/st0
       => SCSI 테이프장치인 /dev/st0 에서 압축을 풀어 현재 디렉토리에 푼다.
   5) tar -g list -cvpf home.tar /home
       => -g는 증분백업(Increment backup)에 사용하는 옵션으로 /home 디렉토리를 퍼미션을 그대로
         유지하면서 home.tar로 묶는 것은 1번 예제와 같지만 list라는 백업시에 저장되는 파일이나
         디렉토리들을 목록화하는 파일을 생성한다. 처음시도할 경우에는 첫번째 예제와 같은 파일
         로 생성된다. 그러나 그 다음 시도시에는 list파일과 비교하여 추가된 것만 백업하므로 백
         업하여 생성되는 파일명을 같게 해서는 안된다.
(2) 증분백업
   1) tar -g list -cvpf home1.tar /home
       => 기존의 list파일을 내용을 보고 그 이후에 변경되거나 추가된 파일들을 home1.tar로 백업
         한다. list파일을 편집기로 열어보면 파일의 용량을 숫자로 관리한다. 이 값을 비교하여
         변화시에 증분백업을 시도한다. 따라서, 이 파일을 삭제되면 전체백업을 한다.

8. cpio를 이용하여 백업하기
(1) 설명: cpio는 Copy Input ot Output의 약자로 입력받은 것을 출력에 복사한다는 뜻이다. 보통
          find명령의 출력을 입력으로 받아 백업디바이스에 저장하는 역할을 한다.
(2) 사용법
   [find 명령 | ] cpio options ' > 또는 < ' 디바이스명
(3) options
   -o : 표준출력으로 보내어 사용한다. (--extract)
   -i : 표준입력으로 받을 때 사용한다. 즉, 백업한 자료를 불러올 때 사용한다.
   -v : 과정을 자세히 보여준다.
   -c : 데이터 형식을 ASCII형태로 한다.
   -d : 필요하면 디렉토리를 생성한다. (--make-directories)
   -B : 입출력 블록사이즈를 5120bytes로 한다. 기본 블록사이즈는 512bytes이다.
(4) 사용예
   1) find /home | cpio -ocv > /dev/nst0
      => /home 디렉토리의 내용을 SCSI 테이프장치인 /dev/nst0 장치에 백업한다.
   2) cpio -icdv < /dev/nst0
     => /dev/nst0에 백업된 데이터를 현재디렉토리에 복원한다. 필요하면 디렉토리도 생성한다.

9. dump를 이용하여 백업하기
(1) 설명: dump는 파일들이 아닌 파일시스템 전체를 백업한다. 보통 파티션단위로 백업할 때 사용
          하면 편리하다. dump는 0-9단계의 레벨을 가지고 증분 백업을 지원한다. 레벨 0이 전체
          백업이고 나머지 레벨들은 부분백업을 하게 된다. 백업시에 /etc/fstab파일을 참조하며
          백업된 데이터 복원은 restore명령을 사용한다.
(2) 사용법
   dump options 백업미디어 백업하고자하는 대상
(3) options
   -0~9 : 덤프의 레벨을 지정한다. 0은 전체백업이고, 나머지는 부분백업을 한다. 기본레벨은 9이
         다.
   -f 파일명 또는 디바이스명 : 백업할 미디어를 지정하거나 파일명을 적는다.
   -u : dump 를 통해 백업한 후에 /etc/dumpdates라는 파일에 작업에 대한 정보를 기록한다.
(4) 사용예
   1) dump -0f /dev/nst0 /home
       => /home 디렉토리 전체를 /dev/nst0 장치에 전체 백업한다.
   2) dump -0u -f /dev/nst0 /dev/hda7
       => /dev/hda7 파일시스템 전체를 /dev/nst0 장치에 전체 백업하며 그 작업 정보를 /etc/dumpd
         ates라는 파일에 기록한다.
   3) dump -0u -f home /home
       => /home 디렉토리 전체를 home이라는 이름으로 전체백업한다. 또한 그 작업정보를 /etc/dump
         dates 라는 파일에 기록한다.
   4) dump -4u -f /dev/nst0 /dev/hda7
       => level4 수준 또는 그 이하의 백업을 한 뒤에 바뀐 내용을 증분백업한다. 또한 그 작업정보
         를 /etc/dumpupdates에 기록한다.
(5) 복원: dump명령으로 백업한 경우에는 restore 명령을 이용하여 복원해야 한다.
   1) 사용법
     restore options 디바이스명 또는 백업파일명
   2) options
    -i : 대화식(interactive)으로 복구할 파일을 선택한 후에 복원이 가능하다.
    -f 디바이스명 또는 백업파일명 : 백업되어진 파일이나 장치를 지정한다.
    -r : 전체백업시에 사용한다. 이 옵션사용시에 파일시스템이 미리 생성되어 있어야 하고, 마운트
        도 되어 있어야 하며 해당 디렉토리안에서 작업해야 한다.
   3) 사용예
    ㄱ. restore -if /dev/st0
         => /dev/st0에 백업된 데이터를 하나씩 확인하면서 복원한다.
    ㄴ. restore -rf /dev/nst0
         => /dev/nst0에 백업된 데이터를 전체복원한다. 단 복원하고자 하는 파일시스템이 생성되어
           있어야 하며 마운트되어 있어야 하고 해당 디렉토리안에서 작업해야 한다.
            예) mke2fs /dev/sda1
                mount /dev/sda1 /mnt
                cd /mnt
    ㄷ. restore -if home
         => home이라는 이름으로 백업된 파일을 복구한다. 실행시키면 다음과 같이 프롬프트가 나타
           난다. 지원가능한 명령을 확인해야 한다.
           restore >                    // ? 나 help라고 입력하면 사용가능한 명령을 보여준다.
           restore > help
           Available commands are:
                   ls [arg] - list directory
                   cd arg - change directory
                   pwd - print current directory
                   add [arg] - add `arg' to list of files to be extracted
                   delete [arg] - delete `arg' from list of files to be extracted
                   extract - extract requested files
                   setmodes - set modes of requested directories
                   quit - immediately exit program
                   what - list dump header information
                   verbose - toggle verbose flag (useful with ``ls'')
                    prompt - toggle the prompt display
                    help or `?' - print this list
            If no `arg' is supplied, the current directory is used
           restore > ls                 // 백업된 내용을 보여준다.
           .:
            bluemountain/ minory/       nanajjang/    quota.user    zzang/
            lost+found/   mkk737/       posein/       xitem/
           restore > add quota.user     // 특정한 파일을 선택한다. add뒤에 파일명을 기입하지
                                          않으면 전부선택된다.
           restore > ls
           .:
            bluemountain/  minory/        nanajjang/    *quota.user     zzang/
            lost+found/    mkk737/        posein/        xitem/
           restore > extract
           You have not read any volumes yet.
           Unless you know which volume your file(s) are on you should start
           with the last volume and work towards the first.
           Specify next volume # (none if no more volumes): 1       // 볼륨넘버를 입력한다.
           set owner/mode for '.'? [yn] y                           // y라고 입력한다.

10. dd를 이용하여 백업하기

(1) 설명: 전체파티션 단위로 백업할 때 용이하다.
(2) 사용법: 특정파티션을 다른 하드디스크의 파티션으로 백업한다고 가정해보자. 만약 /dev/hda1
            을 /dev/hdb1으로 백업한다고 할 때, /dev/hdb1을 /dev/hda1과 같은 사이즈의 파티션으
            로 생성한다.
(3) 사용예
   1) dd if=/dev/hda1 of=/dev/hdb1 bs=1k
       => /dev/hda1을 /dev/hdb1으로 백업한다.
   2) dd if=/dev/hda of=/dev/hdb
       => /dev/hda를 /dev/hdb로 백업한다.

11. 백업의 종류와 복원
(1) 개요: 모든 것을 한번에 백업하는 풀백업(Full Backup)이 있고 부분 부분을 백업하는 부분 백업
          (Incremental Backup)이 있다.
(2) 풀백업
   1) 설명: tar를 이용하여 쉽게 할 수있다.
   2) 사용예
     ㄱ. tar cvf /dev/ftape /usr/src
        => /usr/src디렉토리를 /dev/ftape라는 테이프에 백업한다.
     ㄴ. tar -cMf /dev/fd0H1440 /usr/src
        => /usr/src디렉토리를 -M(Multi Volume)옵션으로 플로피에 연속 백업한다. 백업하기 전에
          플로피는 포맷을 해야 한다.
(3) 부분백업
   1) 설명: 특정한 날짜 이후로 바뀐 파일 부분만 백업한다.
   2) 사용예
     ㄱ. tar -c -v -N '15 June 2002' -f /dev/st0 /usr/src
        => /usr/src 에서 2002년 6월 15일 이후로 변경된 파일만을 DAT에 부분백업한다.
(4) 복원
   1) 설명: tar의 x옵션을 이용하여 복원한다.
   2) 사용예
     tar xvf /dev/fd0H1440

12. 백업의 대상
(1) 개요: 가능한 많은 백업을 하는 것이 좋다. 그러나 쉽게 재설치가 가능한 프로그램은 백업을 원
         하지 않을 수도 있다. 또한 시스템상의 이유로 백업을 원치않는 데이터도 있을 것이다. 예
         를 들면 커널이 항상 자동으로 생성하는 데이터들은 백업할 필요가 없다. 백업을 해야할지
         하지 말아야 할지 잘 구분이 안되는 것이 /var디렉토리 이하의 파일들이다. 무엇이 중요한
         가를 고려하여 백업해야 한다.
(2) 백업해야할 대상 : 보통 /home과 /etc(이 디렉토리는 설정파일들이 들어있는 디렉토리이다. 경
                      우에 따라서는 시스템의 다른 위치에도 설정파일이 있을 수도 있으니 잘 찾아
                      백업을 해야함)는 꼭 해야한다. 아울어 어떤 프로그램의 소스를 /usr/local
                      밑에 설치하였다면 이 디렉토리도 백업대상으로 고려해야 한다.

13. 압축백업
(1) 개요: 백업은 많은 공간을 요구하게 되는데 그것은 많은 경제적인 비용을 초래할 수 있다. 이러
          한 비용적 부담의 대처방법으로 압축을 들 수 있다. 압축백업은 문제점을 발생시킬 수도
          있다. 자연적으로 어떤 환경때문에 만약 하나의 비트가 잘못 되었다면 모든 나머지 데이터
          가 사용 못하게 될 수 있다. 어떤 백업프로그램은 에러를 교정해주지만 많은 수의 에러는
          어찌할 수 없는 경우가 많다. 백업은 안전해야 되므로 그리 좋은 생각만은 아니다.
(2) 사용예
   tar zcvf etc_backup.tar.gz /etc
    => /etc디렉토리를 압축하여 etc_backup.tar.gz파일을 만든다.

14. 테이프 관련 유틸리티- mt
(1) 설명: mt는 테이프(Magnetic Tape)의 작동을 제어하는 유틸리티이다.
(2) 사용법
   mt [option] command
(3) option
   -h : 사용가능한 command를 보여준다.
   -v : mt의 버전을 보여준다. (--version)
   -f 디바이스명: 제어하고자하는 디바이스명을 지정한다.
(4) 주요 commnad
    status : 테이프의 상태를 보여준다.
    fsf 파일수: 테이프를 지정한 파일 수 만큼 앞으로 이동시킨다.
    rewind : 테이프를 처음으로 되감는다.
    bsf 파일수 : 테이프를 지정한 파일 수 만큼 되감는다.
    erase : 테이프의 내용을 지운다.
    offline : 테이프를 꺼낸다.
    rewoff : 테이프를 처음으로 되감은 뒤에 꺼낸다.
(5) 사용예
   1) mt -f /dev/st0 status
       => 테이프의 상태를 보여준다.
   2) mt -f /dev/st0 rewind
       => 테이프를 처음으로 되감는다.
   3) mt -f /dev/st0 fsf 50
       => 파일 수 50만큼 테이프를 앞으로 이동시킨다.
   4) mt -f /dev/st0 erase
       => 테이프의 내용을 지운다.
   5) mt -f /dev/st0 offline
       => 테이프를 꺼낸다.
   6) mt -f /dev/st0 rewoff
       => 테이프를 처음으로 되감은 뒤 꺼낸다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 가상메모리(Virtual Memory)
(1) 개요: 하드디스크의 일부를 마치 메모리처럼 사용할 수 있게 해주는 기술을 말한다. 이는 물리
          적 메모리의 한계를 어느 정도 극복할 수 있다. 이 기법은 하나의 프로그램이 실행될 때,
          프로그램의 전체가 메모리(RAM)에 올라와 실행되지 않고 필요한 부분만 을 불러와 실행하
          는 기법을 기본으로 한다.
(2) 기법: 커널은 실제 메모리(RAM)에 올라와 있는 메모리 블록들 중에 당장 쓰이지 않는 것을
          디스크에 저장한다. 이를 통해 사용가능한 메모리 영역을 늘린다. 만일 디스크에 저장되
          었던 메모리 블록이 다시 필요하게 되면 그것을 다시 실제 메모리안으로 올려지며, 대신
          다른 블록이 디스크로 내려가게 된다. 이런 과정이 일어나고 있다는 것을 사용자가 알 수
          없고, 그저 많은 양의 메모리가 있는 것처럼 보일 뿐이어서 점유하고 있는 메모리가 디스
          크에 있는 실제 메모리에 있는 지는 전혀 신경 쓸 필요가 없다. 그러나, 디스크를 읽고
          쓰는 시간은 RAM보다 훨씬 느리기 때분에 프로그램의 실행은 그만큼 더디게 된다. 이렇게
          가상메모리로 쓰이는 하드디스크의 영역을 스왑영역(Swap Space)라고 부른다.


2. 스왑
(1) 개요: 스왑영역은 보통 처음 설치시에 스왑파티션으로 설정을 꼭 하도록 되어 있다. 설치시의
          스왑파티션의 크기는 실제 RAM의 2배정도를 잡도록 권장한다. 이렇게 파티션으로 설정하는
          방법이 있고, 스왑 파일로 설정할 수 있다. 스왑 파일은 그 크기를 언제라도 자유롭게
          조절할 수 있지만 스왑파티션에 비해 속도는 느리다.
(2) 관련명령어
   1) mkswap
    ㄱ. 설명: 스왑파티션이나 스왑파일을 생성하는 명령이다.
    ㄴ. 사용법
       mkswap [option] 스왑파일 or 스왑파티션 [size]
    ㄷ. option
       -c : 스왑파티션생성시에 사용하는 옵션이다.
    ㄹ. 사용예
      a. mkswap /swap-file 10240
          => 10240K 사이즈의 /swap-file을 생성한다.
      b. mkswap -c /dev/hdb1
          => /dev/hdb1을 스왑파티션으로 설정한다.
   2) swapon
    ㄱ. 설명: 스왑파티션이나 스왑파일을 구동하는 명령이다.
    ㄴ. 사용법
        swapon [option] 스왑파일 or 스왑영역
    ㄷ. option
       -a : /etc/fstab파일에 있는 swap을 전부 활성화시킨다.
       -s : 스왑영역의 상태를 보여준다.
    ㄹ. 사용예
      a. swapon /dev/hdb1
      b. swapon /swap-file
      c. swapon -a
          => /etc/fstab파일에 설정되어 있는 swap 영역을 모두 활성화시킨다.
      d. [root@www /]# swapon -s
         Filename                        Type            Size    Used    Priority
         /dev/hda1                       partition       530104  0       -1
          => 현재 스왑의 상태를 보여준다.
   3) swapoff
     ㄱ. 설명: 스왑파티션이나 스왑파일의 구동을 중단시킨다.
     ㄴ. 사용법
        swapoff 스왑파일 or 스왑영역
     ㄷ. 사용예
        swapoff /swap-file
(3) 스왑 영역만들기
   1) 스왑파일생성하기
     ㄱ. dd명령을 실행하여 빈틈이 하나도 없는 스왑파일을 생성한다.
        [root@www /root]# dd if=/dev/zero of=/swap-file bs=1024 count=10240
        10240+0 records in
        10240+0 records out
         => (설명)
           /dev/zero: 빈틈이 없는 파일을 생성할 때 사용한다.
           /swap-file: 생성하고자할 스왑파일의 이름이다.
           bs=1024: 입출력단위의 크기를 지정한다. 보통 블록사이즈라고 부르며 단위는 바이트이
                   다. 현재설정은 1024byte, 즉 1KB이다.
           count=10240: 입출력 단위의 몇 배 크기의 파일을 만들 것인지를 지정한다. (즉 10240KB
                       임) count는 꼭 4의 배수로 지정해주는 것이 좋은데, 그 이유는 커널이 스왑
                       하는 메모리페이지(Memory Page)의 단위가 4KB이기 때문이다.
     ㄴ. 커널이 해당하는 파일을 가상메모리로 사용할 수 있도록 mkswap명령을 내린다.
        [root@www /root]# mkswap /swap-file 10240
        Setting up swapspace version 1, size = 10481664 bytes
     ㄷ. /swap-file의 권한을 root로 제한한다.
        [root@www /root]# chmod 600 /swap-file
     ㄹ. 스왑을 사용하도록 한다.
        [root@www /root]# swapon /swap-file
     ㅁ. 시스템 부팅시마다 자동으로 사용되도록 설정하려면 /etc/fstab에 등록을 한다.
        /swap-file               swap                    swap    defaults        0 0
   2) 스왑파티션만들기 : 새로운 하드디스크를 Primary Slave(/dev/hdb)에 장착했다고 첫번째 파티
                        션을 스왑파티션이라고 가정
     ㄱ. fdisk명령을 이용하여 스왑파티션을 생성한다.
        fdisk /dev/hdb
     ㄴ. mkswap명령을 이용하여 스왑파일시스템 생성
        mkswap -c /dev/hdb1
     ㄷ. 스왑영역 활성화
        swapon /dev/hdb1
     ㄹ. 부팅시마다 사용하기 위해 /etc/fstab에 등록한다.

3. 메모리관리
(1) 관련명령어
   1) free
     ㄱ. 설명: 현재 사용중인 메모리의 상태를 출력해 주는 명령이다.
     ㄴ. 사용법
        free [option]
     ㄷ. option
        -m : MB 단위로 보여준다.
        -k : KB 단위로 보여준다.
     ㄹ. 사용예
        a. [root@www /root]# free
                        total       used       free     shared    buffers     cached
           Mem:        513064     509532       3532          0      50480     348948
           -/+ buffers/cache:     110104     402960
           Swap:       265032        556     264476
        b. [root@www /root]# free -m
             total       used       free     shared    buffers     cached
           Mem:           501        498          2          0         45        353
           -/+ buffers/cache:         99        401
           Swap:          258          0        258
            => (설명)
              Mem: 실제적인 메모리의 상태를 보여준다. total은 전체메모리, used는 사용중인 메
                  모리양, free는 사용되지 않고 있는 메모리, share는 프로세스간 공유되고 있는
                  메모리, buffers와 cached는 현재 디스크의 버퍼및 캐쉬로 사용되는 메모리공간
                  을 뜻한다.
              -/+ buffers/cache: 물리적인 메모리에서 버퍼로 사용되는 부분을 제외한 값
              Swap: 스왑공간의 상태를 보여준다. used는 전체스왑의 크기, free는 사용중인 스왑,
                   free는 사용되지 않는 스왑을 뜻한다.
(2) 기타 : 메모리상태정보는 top명령으로 확인가능하며 또한 /proc/meminfo에서도 확인가능하다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. xinetd란?
  RedHat Linux7에서부터 제공되는 것으로 슈퍼 데몬인 inetd를 확장한 즉, eXetnd inetd를 데몬이다.
기존의 inetd는 슈퍼데몬인 inetd와 Tcp Wrapper와 관련있는 tcpd 두가지로 나뉘어 관리되었는데
xinetd는 이 두가지를 하나로 통합하여 사용한다.


2. xinetd의 역할
xinetd의 역할도 역시 기존의 inetd의 역할과 유사하다. 네트워크서비스에 대한 접근제어, login에
대한 접근제어 등을 한다.

3. xinet의 구성
(1) 환경설정파일 : /etc/xinetd.conf
(2) xinetd에서 제공하는 서비스를 모아두는 디렉토리 : /etc/xinetd.d
    => xinetd에서 제공하는 서비스는 모두 이 디렉토리안에 파일로 나열되어 있다. 해당서비스의
      설정은 해당파일에서 설정해야 한다.

4. /etc/xinetd.conf
(1) 개요: 자세한 설정은 man으로 확인하고 기본설정만 확인해보도록 하자.
(2)기본설정
   #
   # Simple configuration file for xinetd
   #
   # Some defaults, and include /etc/xinetd.d/

   defaults
   {
           instances               = 60
           log_type                = SYSLOG authpriv
           log_on_success          = HOST PID
           log_on_failure          = HOST RECORD
           cps                     = 25 30
   }

   includedir /etc/xinetd.d
(3)설명
   1)instances : 동시에 서비스할 수 있는 서버의 최대 개수를 지정한다. 만일 접속에 제한을 두지
               않으려면 UNLIMITED로 지정하면 된다.
   2)log_type : 어떠한 형태로 로그 기록을 저장할 것인가를 지정하는 속성으로 SYSLOG와 FILE 두
               형태로 사용가능하다.
    ㄱ. SYSLOG : 지정된 facility에서 syslog로 로그기록이 전달된다. 이 때 사용가능한 facility
                는 daemon, auth, authpriv, user, local0~7이 있으며, 가능한 레벨수준으로는
                emerg, alert!, crit, err, warnning, notice, info, debug등이 있다. 레벨수준이 지
                정되지 않았을 때는 info수준으로 지정된다.
      -사용예 : SYSLOG syslog_facility [syslog_level]
    ㄴ. FILE: 지정된 크기를 가진 파일명에 로그 기록이 저장된다. 파일크기는 soft limit와 hard
             limit 두 옵션을 선택적으로 사용하여 지정할 수 있는데, soft limit에서 지정된 크기
             의  파일에 로그가 기록되며, 이 값이 초과하게 되면 경고와 같은 수준의 메시지가 전
             달되며, hard limit 값이 초과할 경우에는 문제 있는 서비스에 대한 로그를 저장하지
             않고 이에 대한 정보만을 기록하게 된다.
      -사용예 : FILE soft_limit [hard_limit]
   3)log_on_success : 서버가 시작될 때와 끝날 때 기록될 것을 지정한다. 이 속성에는 5가지의 값
                     을 조합하여 설정할 수 있다.
    -속성값
     PID      : xinetd 프로세스 ID
     HOST     : 원격 호스트의 IP
     USERID   : 원격 사용자의 ID
     EXIT     : 서비스가 빠져 나갈 때의 상태
     DURATION : 서버 세션(session)지속 상태
   4)log_on_failure : 서버가 리소스 부족으로 시작될 수 없거나 설정 파일내의 규칙에 의한 접근이
                     거부되었을 때 기록될 값들을 지정하는 속성이다.
    -속성값
      HOST    : 원격의 호스트의 아이피주소
      USERID  : 원격 사용자 ID]
      ATTEMPT : 실패한 시도가 있을 경우
      RECORD  : 클라이언트에 대한 가능한 정보
   5) cps : 초당 요청받은 수에 대한 제한 설정이다.
    ㄱ. 기본구성
       cps           =  초당_요구수 초당요구수_이상_발생시_제한시간
    ㄴ. 사용예
       cps                     = 25 30
         => 초당 요구가 25개 이상될 경우에 30초동안 접속 연결을 중단한다.
   6)only_from: 특정서비스를 이용 가능한 원격호스트를 설정한다. 이 속성에 값이 주어지지 않으면
                모든 접속이 허용되지 않는다. 서버에 접속이 가능한 원격 호스트는 도메인이 아닌
                아이피주소로 지정한다. 이 때 설정되는 IP주소형태는 IP주소(192.168.0.1)나 또는
                네트워크 주소/넷마스크(192.168.0.24)형태로 지정가능하다.
   7)per_source : 똑같은 IP주소로 로컬서비스에 접속할 수 있는 최대 접속수를 지정해 준다. 무제
                 한 접근을 허용하려면 UNLIMITED로 설정한다.
   8)enable : enable속성은 실행 가능한 서비스의 목록을 표시할 수 있게 한다. 이 속성에서 나열된
             서비스명만 실행 가능하며 그렇지 않은 서비스들은 실행되지 않는다. 그러나, disable
             속성과 DISABLE플래그가 존재할 경우 이 속성은 무시된다.
   9)no_access: 서버 서비스를 이용하지 못하도록 서버에 접근하지 못하게 할 원격 호스트의 주소를
                지정해준다.
   10)disable: 서비스 값들이 실행되지 못하도록 지정한다. enable 속성과 같이 존재할 경우 enable
              속성이 무시되어 실행되지 않는다.
   11)includedir /etc/xinetd.d : 각각 해당 서비스에 대한 지정을 /etc/xinetd.conf에서 하지 않고
                                해당서비스마다 하나의 파일로 지정할 때 쓴다. 이 속성을 사용할
                                경우 xinetd.conf에서는 해당 service를 설정할 수 없다.

5. 해당 service section에서 사용되는 주요 속성과 속성값
   1)service telnet : service속성으로 설정하고자 하는 서비스의 이름을 지정해준다. 여기서 지정해
                      주는 서비스들은 /etc/services파일 리스트에 있어야 한다.
   2)disable=yes : 해당 서비스가 실행되지 못하도록 설정한다. 해당서비스를 하지 않거나 httpd와
                   같이 standalone상태로 데몬이 작동하는 경우에 속성값을 yes로 지정하고, teln
                   et이나 POP3처럼 항상 서비스가 작동하도록 하기위해서는 속성값을 no로 지정해야
                   한다.
   3)flags=REUSE
    ㄱ. 속성값
     a. REUSE : 서비스 소켓에 SO_REUSEADDR플래그를 설정하도록 한다.
     b. INTERCEPT : 패킷이나 허용된 접속을 가로채어 허가된 위치에서 접속하는지 인증하고자 할
                   때 사용한다.
     c. NORETRY : 프로세스가 새롭게 생기지 못할 경우 재시도하지 못하도록 한다.
     d. IDONLY : 원격호스트가 원격사용자를 인증할 때만 접속을 허용한다. 이 플래그는 접속기반
                서비스에 적용되며, USER log옵션을 사용하지 않을 경우 효과를 내지 못한다.
     e. NAMEINARGS : 서버가 작동될 때 서버내에 지정한 것과 같이 server_args내의 첫번째 인수가
                    arg[0]이 되도록 하는 플래그이다. 이 플래그는 서버내에 tcpd를 넣어 tcpd를
                    사용할 수 있게 하고, inetd처럼 server-args내에 서버이름을 넣을 수 있게 한
                    다.
     f. NODELAY : TCP서비스에 이 플래그를 설정하면 TCP_NODELAY플래그가 소켓에 설정된다. 이 플
                 래그는 TCP서비스에 한해서 적용된다.
     g. DISABLE : 서비스가 실행되지 않게 한다.
     h. KEEPALIVE : TCP서비스에 이 플래그가 설정되면 SO_KEEPALIVE소켓 플래그가 소켓에 설정된다.
                   이 플래그도 TCP서비스에 한해서 작용한다.
   4)protocol = tcp: 서비스가 사용한 프로토콜을 설정한다. 이 프로토콜은 /etc/protocols내에 있
                    어야 한다. 이 속성을 지정하지 않으면 서비스가 사용하는 기본 프로토콜을
                    사용한다.
   5)socket_type = stream
    ㄱ. 속성값
     a. stream : stream기반의 서비스
     b. dgram  : dgram기반의 서비스
     c. raw    : 아이피에 직접 접근을 요하는 서비스
     d. seqpacket : 신뢰성있는 연속적인 데이터그램 전송을 요구하는 서비스
   6)wait = no : 서비스가 단일 쓰레드(single thread)인지 다중쓰레도(multi-thread)를 결정하는
                플래그로 yes인 경우는 단일 쓰레드로 실행되어 오직 하나의 서비스만 작동하게 하
                며, no인 경우는 다중 쓰레드로 서버가 새로운 서비스 요청을 받아 들이게 된다.
   7)user = root : 서버 프로세스를 실행할 수 있는 사용자의 ID를 나타내는 것으로 슈퍼유저일 경
                  우에만 가능하다.
   8)server = /usr/sbin/in.telnetd : 해당서비스를 실행할 데몬프로그램을 지정한다.
   9)access time = 01:00-07:00 : 지정된 시간에서만 서비스를 이용할 수 있게 해준다.
   10)redirect = 192.168.1.10 23 : TCP서비스를 다른 호스트에게 이양하고자 할 때 사용한다. 즉
                                  192.168.1.1의 FTP서비스를 192.168.1.10호스트에게 FTP서비스를
                                  할 수 있도록 해주는 설정이다. 설정방법은 "IP_Address port"이
                                  다.
   11)port = 8080 : 서비스 포트를 명시해준다. 이 포트는 /etc/services파일 목록내의 서비스포트와
                   일치해야 한다.
   12)nice=10 : 서버의 예약우선권을 나타내는 속성으로 -20~19까지의 범위를 갖는다. -20은 가장
               빠른 우선권을 나타내며, 19는 가장 느린 우선권을 갖는다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. Daemon이란?
Daemon이란 사전적인 의미로는 보통 악마(demon)를 뜻하거나, 그리스신화의 Daemon처럼 수호신을
뜻한다. 유닉스(리눅스)에서는 악마처럼 앞에 나타나지 않고, 사용자가 모르게 뒤에서 시스템의 관
리를 위해 움직이는 프로그램을 말한다. 즉, 백그라운드로 실행되어 있다가 네트워크를 통해 클라이
언트의 여러가지 요청(Mail이나 FTP등처럼)에 서비스하기 위해 설치하는 서버프로그램이다. 윈도우NT
나 윈도우2000의 서비스와 같은 의미로 보통 램에 상주하며, 대표적인 것으로는 httpd, ftpd,inetd
등이 있다.


2. Daemon의 종류
(1) 설명: 데몬에는 sendmail이나 apache처럼 단독으로 실행되는 것이 있고, ftp, telnet, pop3등을
          한꺼번에 관리하는 inetd(커널 2.4버전인 경우에는 xinetd)같은 슈퍼데몬이 있다.
(2)단독으로 실행되는 데몬 : 웹서비스처럼 클라이언트의 서비스요청이 많은 경우에 유용하다. 항
                            상 램에 상주하므로 좀 더 빠른 서비스가 가능하나, 자원(메모리)의
                            낭비를 초래할 수 있다. 대표적인 것으로는 다음과 같은 것이 있다.
   1) httpd : World Wide Web 서비스를 제공하는 아파치 데몬이다. 웹서버로 사용하지 않는다면 부
             팅시간이 많이 걸리므로 사용하지 않는 것이 좋다.
   2) named : DNS서버를 사용할 경우 이 서버의 작동유무를 제어하는 데몬이다. 독립시스템일 경우
             사용하지 않는다.
   3) sendmail : E-mail을 주고 받을 때 사용되는 데몬이다.
   4) smb : 일명 삼바를 실행 시켜주는 데몬이다. 삼바는 유닉스와 윈도우의 파일 및 프린터를 공
           유하게 해주는 서비스이다.
   5) crond: 리눅스에 등록된 명령어들을 정기적으로 수행하는 데몬이다. 즉, 멀티태스킹으로 동작
            하는 리눅스에서 받은 메일의 스풀러 정리라든지 각종 명령어들을 실행하는 데몬이다.
            반드시 실행시킨다.
   6) gated : 라우팅데몬으로 리눅스에 라우팅 기능을 수행하고 싶으면 이 데몬이 떠 있어야 한다.
   7) netfs: 삼바, NFS, NCP등을 마운트하거나 언마운트할 때 필요한 데몬이다. NFS 데몬등을 실행
            하려면 해당 데몬을 실행하기 전에 미리 띄워야 한다.
   8) nfs : NFS(Nerwork File System)데몬을 띄우는 일을 한다. NFS는 TCP/IP를 이용하여 파일들을
          서로 공유할 수 있게 만든다. 리눅스에서 NFS서버를 운영할 때 쓴다.
   9) lpd : 프린터 데몬이다. lpr과 같은 명령어를 사용해 프린터를 사용하려면 이 데몬을 실행시
           켜야 한다.
   10) mcserv : mc(Midnight Commannd)라는 파일매니저 프로그램을 작동시키는 데몬이다.
   11) ircd : IRC(Internet Relay Chat)데몬이다. IRC란 인터넷 채팅을 할 때 쓰는 일종의 채팅프로
             그램이다.
   12) syslog : syslog는 시스템에 일어나는 여러가지를 기록해주는 데몬이다. 이 데몬은 반드시 실
               행하는 것이 좋다. 이 데몬이 있어야 시스템에 여러가지 사고가 발생시 기록을 추적
               하는 단서를 얻을 수가 있기 때문이다. 이 데몬에 관련된 환경파일은 /etc/syslog.co
               nf이다.
   13) squid : http, ftp, gopher 같은 프로토콜을 사용할 때 캐쉬의 속도를 높여주는 데몬이다.
   14) snmpd : SNMP(Simple Network Management Protocol)데몬이다. 네트워크의 상황을 모니터를 할
              때 사용된다.
   15) amd : automount의 약자로 호스트에서 그 서버의 파일을 읽을 때 자동으로 마운트하게 해 주
            는 데몬이다. 이 데몬은 네트워크 정보가 잘못 입력되었을 경우 부팅될 때 문제를 일으킬
            킬 수 있으므로 별다른 경우가 아니면 꺼 놓는 것이 좋다. 네트워크 설정이 정상적이거
            나 아예 사용하지 않는 경우라면 선택해도 무방하다.
   16) bootparamd : 리눅스 서버를 통해 연결된 Sun워크스테이션의 네트웍을 부팅할 때 사용했던 데
                   몬으로 리눅스에서 sun 네트워크를 부팅시킬 때 사용한다. BOOTP와 DHCP를 사용
                   하는 경우에는 켜 놓을 필요가 없다.
   17) portmap : 원격프로시저호출(RPC:Remote Procedure Call)연결을 제어해 주는 역할을 하며,
                NFS와 RPC를 사용하는 서비스를 제공하는 데몬이다. 네트워크상에서 클라이언트-
                서버개념이 적용되지 않는 시스템에서는 실행할 필요가 없는 데몬이지만 nfs, nis,
                amd 등 원격 프로시저 호출을 하는 프로그램을 사용할 경우에는 반드시 선택해야
                하는 데몬이다.
   18) routed : 자동IP라우터로 독립적인 시스템에서는 실행할 필요가 없는 데몬이다.
   19) atd : 백그라운드 작업을 해주거나 각종 예약 명령을 처리하는 작업을 한다. 기본적으로 선택
            되어 있으며, 특별한 경우가 아니면 선택한다.
   20) dhcp : 네트워크로 구성된 상태에서 리눅스 서버의 정보를 이용하여 부팅될 자신의 IP주소와
             네트워크 정보를 가질 수 있게 하는 데몬이다. 네트워크에서 서버로 사용되면 BOOTP와
             DHCP가운데 하나를 선택하는데, 정적IP를 부여한 네트워크 환경에서 선택한다. 네트워
             크가 구성되지 않는 일반PC에서는 선택할 필요가 없다.
   21) gpm : 리눅스로 부팅된 다음 텍스트 상태에서 마우스를 사용하여 영역을 선택하거나 복사를
            가능하게 해주는 데몬이다. 이 서비스는 PS/2마우스일경우 X-window와 충돌할 수도 있
            다. 만약 X-window를 실행시켰을 때 마우스가 움직이지 않으면 이 데몬을 끈다.
   22) kerneld : 운영체제의 핵심인 커널 기능을 동작시키는 데몬이다. 반드시 선택한다.
   23) keytable : 키보드의 정보를 설정하는 /usr/sbin/kbdconfig명령으로 키보드유형을 변환할 수
                 있도록 해주는 데몬이다.
   24) network : 네트워크 관련된 각종 정보를 설정을 활성화하는 데몬이다.
   25) sound : 리눅스의 부팅과 종료시 사운드의 믹서 설정을 복구하거나 저장하는 스크립트이다.
   26) ruserd : 네트워크 사용자를 추적할 수 있는 데몬으로 특정 사용자의 위치를 확인할 수 있다.
   27) rwhod : 원격 접속을 한 사용자들의 목록을 볼 수 있는 로그 정보를 가진 데몬이다.
   28) ypbind : NIS(Network Information Service) 즉, 네트워크에 알려진 모든 머신들에게 정보(In
               formation)을 제공해주는 서비스를 해주는 네트워크-클라이언트에 관련된 서버이다.
   29) yppasswd : NIS에 관련되는 것으로 클라이언트 사용자가 패스워드를 변경할 수 있도록 해주는
                 서버측의 데몬이다.
   30) ypserv : NIS를 총괄하는 서버이다. 데이터베이스나 프로세스들로 구성되어 있는 간단한 네트
               워크를 찾는 서버이다.
   31) apmd : 고급전원 관리기능(Advanced Power Management)을 해주는 데몬이다. 마더보드에서 APM
             을 지원한다면 이 데몬을 작동하도록 한다. doze, standby, suspend, nap, sleep, mode
             s 와 하드디스크 절전 등 바이오스에서 하는 것보다 더욱 더 뛰어난 기능을 발휘한다.
   32) pcmcia : 노트북이나 laptops 에서 사용하는 PCMCIA 관련 데몬이다.
(3)슈퍼데몬 inet에서 관리하는 데몬
   1) 설명: Inet는 Internet Superserver라 불리우며 자주 실행되지 않는 데몬들을 통들어 관리해
           슈퍼데몬이라고 부른다. 일반 데몬들처럼 프로세스가 항상 떠있지 않고, 클라이언트의
           요청이 있는 경우   에만 데몬을 실행시킨다. 응답시간은 좀 걸리지만 메모리가 절약된다.
           이 슈퍼데몬은 커널 2.2버전과 2.4버전이 차이가 있다. 커널 2.2버전 (리눅스 6.x 버전)
           에서는 inetd라는 이름을 사용하였으며, 전체적인 환경 설정은 /etc/inetd.conf에서 통합
           관리하였고, 슈퍼 데몬에 속하는 데몬들은 'TCP Wrapper'라는 프로그램에 의해 접근이
           제어되었다. 커널 2.4버전(리눅스 7.x버전이후)에서는 xinetd라는 이름의 슈퍼데몬이
           작동되고 환경설정은 /etc/xinetd.conf와 /etc/xinetd.d디렉토리의 각 서비스파일에서
           관리한다.
   2) 슈퍼데몬에서 관리하는 데몬
    ㄱ. telnet : telnet서비스를 제공하는 데몬
    ㄴ. ftp  : ftp(file transper protocol)서비스를 제공하는 데몬
    ㄷ. finger : 시스템에 현재 누가 로그인하고 있는지를 알려주고 그 밖에도 여러가지 유용한
                정보를 얻을 수 있게 해주는 데몬
    ㄹ. login : rlogin과 같은 명령어를 사용하여 신뢰하는 호스트에서 접속시 로그인할 수 있도록
              해주는 데몬. 보안상 위험하니 사용하지 않는 것이 좋다.
    ㅁ. auth : IDENT 프로토콜을 지원하는 서비스이다. 리눅스의 ident 데몬으로 접속해 현재 누가
              접속했는지에 대한 정보를 알려주는 데몬이다.
    ㅂ. shell : rsh와 같은 명령어를 사용해서 원격의 호스트에서 접속시 조건없이 쉘명령어를 실행
               시키는 데몬이다.
    ㅅ. tcpd : 호스트에서 telnet서비스를 요청하면 TCP Wrapper에서 in.telnetd 를 작동시킨다. 이
              과정만 보면 telnet서비스만 할 뿐 호스트에 대한 정보를 남기지 않는다. tcpd의 역할
              은 in.telnetd가 구동되기 전에 telnet서비스 접속에 대한 기록을 파일에 적는 역할을
              한다. 즉, tcpd가 TCP Wrapper 프로세스이다.

3.데몬의 실행과 중지
(1) 단독으로 실행되는 데몬
   1) 설명: 단독으로 실행되는 데몬들은 /etc/rc.d/init.d 디렉토리에 스크립트 파일을 가지고 실행
           /중지시키면 된다. 또는 service라는 스크립트를 사용해도 된다.
   2) 사용예 : httpd데몬의 중단과 실행
    ㄱ. [root@www root]# /etc/rc.d/init.d/httpd stop
         => httpd 데몬을 중지시킨다.
    ㄴ. [root@www root]# /etc/rc.d/init.d/httpd start
         => httpd 데몬을 작동시킨다.
    ㄷ. [root@www root]# service httpd restart
         => service 명령을 이용하여 httpd 데몬을 재작동시킨다.
(2)슈퍼데몬 inet에서 관리하는 데몬
   1) inet에서 관리하는 전체를 중지 또는 실행시키는 방법
    ㄱ. 커널 2.2 버전
       /etc/rc.d/init.d/inet stop
       /etc/rc.d/init.d/inet start
    ㄴ. 커널 2.4 버전
       /etc/rc.d/init.d/xinetd stop
       /etc/rc.d/init.d/xinetd start
    ㄷ. 참고: 위의 방법으로 inet을 중단시키면 inet데몬에 관련된 모든 데몬들이 작동을 하지 않는
             다. 그러므로, 한가지 데몬만을 중단한 경우에는 적합하지 않다.
   2) inet(또는 xinetd)에서 관리하는 데몬중 일부만 중지시키기
    ㄱ. 커널 2.2 버전: inet데몬에서 일부만 중단하려면 /etc/inetd.conf 파일에서 한다. 해당 서비
                      스 항목의 맨 앞에 주석처리('#')를 하면 해당 서비스에 해당하는 데몬이
                      작동하지 않는다.
    예) telnet서비스 중단하기
       #telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
        => (항목설명)
          - 서비스이름: /etc/services파일에 정의된 텔넷, ftp와 같은 특정 서비스들을 의미
          - 소켓타입: 서비스에 의해 사용된 연결의 타입을 기술. 보통 tcp서비스인 경우에는
                     'stream', udp서비스인 경우에는 'dgram'이 옴
          - 프로토콜: 네트워크 프로토콜 타입이 기술된다. 보통 'tcp'나 'udp'가 옴.
          - 대기상태: 하나의 서버프로세스가 한번에 여러 요청을 처리할 수 있는지를 나타냄. wait
                     이면 inetd가 서비스들에 대한 각각의 요청을 처리하기 위해 여러 프로세스가
                     생성되는 것을 방지하고 nowait라고 설정되어 있으면 각각의 요청을 위해 프로
                     세스를 생성
          - 사용자이름: 네트워크 서비스를 수행해야 할 로그인 이름
          - 서버프로그램: 네트워크 서비스를 활성화시키기 위해 수행해야 할 프로그램을 가리킴
          - 서버프로그램인자: 네트워크 서비스가 수행되기 시작할 때, 전달 되어야 할 인자와 설정
                             플래그들을 나열
    ㄴ. 커널 2.4 버전: /etc/xinetd.d디렉토리에 보면 xinetd에서 관리하는 데몬들의 파일이 생성
                     되어 있다. 만약 telnet이면 telnet이라는 파일의 항목에서 'disable = yes'
                     라고 설정하면 해당 데몬은 xinetd에서 실행하지 않는다. 또는 'chkconfig
                     telnet off' 하면 된다.

(3) 데몬관련명령어: ntsysv
   1) 설명: 부팅시 자동실행되는 데몬들을 쉽게 설정하기 위해서는 'ntsysv'를 이용하면 된다. 그럼
          데몬들의 목록이 나오는데 스페이스키로 선택해주면 부팅시마다 자동으로 데몬이 작동한다.
          이 명령도 어렵다면 'setup'을 하면 X-window설정등 여러 메뉴가 나오는데 여기는 'System
          Service'를 선택하면 된다. 물론 이 명령도 루트권한자만 가능하다.
   2) 사용예
    ㄱ. ntsysv
         => 현재 레벨의 자동으로 시작하는 서비스데몬을 지정할 수 있다.
    ㄴ. ntsysv --level 5
         => 레벨 5의 자동으로 시작하는 서비스데몬을 지정할 수 있다.

4. 데몬의 확인
(1) 개요: 리스트로 나열하여 확인할 수 있고, 트리형태로 그래픽하게도 확인할 수 있다.
(2) 관련명령어
   1) ps
    ㄱ. 설명: 리스트로 나열하여 보여준다.
    ㄴ. 사용예
       ps -aux
   2) pstree
    ㄱ. 설명: 이 명령은 현재 가동중인 데몬들을 tree구조 형태로 나타내 준다.
    ㄴ. 사용예
       pstree

출처 : 대전국제IT교육센터 정성재 강사

 

1. Disk Quota
(1) 설명: 사용자들의 계정 용량을 제한할 경우에 사용한다. 그룹단위로도 용량을 제한할 수 있으며
          웹호스팅 서비스를 하는 경우에 유용하다. 보통 블록단위의 용량제한과 inode의 갯수를 제
          한한다.
(2) 관련명령어
   1) quotacheck
     ㄱ. 설명: 디스크를 사용하고 있는 파일 시스템을 체크하여 quota기록파일(quota.user 또는
              quota.group)을  가장 최근의 상태로 업데이트 시키는 명령이다.
     ㄴ. 사용법
        quotacheck [option] 디렉토리명
     ㄷ. option
        -a : 모든 그룹과 사용자에 대한 quota를 체크한다.
        -m : 읽기 전용 모드 등의 이유로 마운트를 하지 못할 경우 강제로 체크할 때 사용한다.
        -f : 쿼터파일 초기생성시 잘 인식하지 못하는 경우 강제로 인식시킬 때 사용한다.
     ㄹ. 사용예
       a. [root@www /root]# quotacheck /home
           => 주의할점은 이 명령을 수행할 경우에는 파일의 손상의 위험이 있으므로 quotaoff상태
             에서 해야한다.
       b [root@www /root]# quotacheck -m /home
           => 강제로 /home을 체크한다.
   2) edquota
     ㄱ. 설명: 사용자에게 쿼타를 할당할때 사용한다.
     ㄴ. 사용법
        edquota [option]
     ㄷ. option
        -t : soft limit를 초과한 후부터 적용되는 시간제한을 설정하는 옵션이다.
        -p : quota를 다른 사용자에게도 동일한 설정으로 적용한다.
        -g : 그룹의 quota를 설정한다.
     ㄹ. 사용예
        a. [root@www /root]# edquota posein
            => posein이라는 사용자의 쿼터를 할당한다. 그러면 기본편집기(vi)가 실행되면서
              다음과 같이 나온다.
            Disk quotas for user posein (uid 500):
              Filesystem            blocks       soft       hard     inodes     soft     hard
              /dev/hda8             259556          0          0        248        0        0
             => (설명)
               Filesystem : Quota가 설정되어 있는 파티션을 나타낸다.
               Blocks : 현재 사용중인 용량을 나타낸다.
               soft : 보통의 경우에는 사용할 수 있는 최대 용량을 나타낸다. 유예기간(grace
                     period)이 설정되어 있는 경우에는 사용용량 초과에 대한 경고를 받는 경계선
                     으로 사용된다.
               hard : 유예기간이 설정되어 있는 경우에 작동하는 것으로 사용자가 사용할 수 있는
                     최대 용량을 의미한다.
               inodes : 현재 사용중인 inode를 나타낸다.
        b. [root@www /home]# edquota -t
             => 실행시키면 vi편집기가 실행되면서 다음과 같이 나타난다. 여기서 날짜를 변경하면
              된다.
              Grace period before enforcing soft limits for users:
              Time units may be: days, hours, minutes, or seconds
                Filesystem             Block grace period     Inode grace period
                /dev/hda8                     7days                  7days
                 => (설명)
                   Filesystme : Quota가 설정된 파일시스템을 나타낸다.
                   Block grace period : Block의 soft제한을 초과했을 경우의 유예기간이다.
                   Inode grace period : Inode의 soft제한을 초과했을 경우의 유예기간이다.
        c. [root@www /home]# edquota -p posein prehee
             => prehee이라는 사용자의 설정을 posein의 설정과 동일하게 만든다.
   3) quotaon
     ㄱ. 설명: quota를 시작하기 위해 실행하는 명령이다.
     ㄴ. 사용법
        quotaon 디렉토리명
     ㄷ. 사용예
        [root@www /root]# quotaon /home
   4) quotooff
     ㄱ. 설명: quota를 종료시킨다.
     ㄴ. 사용법
        quota 디렉토리명
     ㄷ. 사용예
        [root@www /root]# quotaoff /home
   5) repquota
     ㄱ. 설명: quota의 설정 상황을 보여준다.
     ㄴ. 사용법
        repquota [option] 디렉토리명
     ㄷ. option
        -a : quota설정이 되어 있는 모든 파티션의 quota상태를 보여준다. 이 옵션을 사용하면 디렉
            토리명을 지정할 필요는 없다.
        -g : 그룹에 대한 quota상태를 보여준다.
        -u : 사용자에 대한 quota상태를 보여준다.(기본값으로 설정되어 있음)
        -v : 모든 quota상태를 보여준다.
     ㄹ. 사용예
        a. [root@www /home]# repquota /home
           *** Report for user quotas on device /dev/hda6 (/home)
           Block grace time: 7 days; Inode grace time: 7 days
                                   Block limits                File limits
           User            used    soft    hard  grace    used  soft  hard  grace
           ----------------------------------------------------------------------
           root      --   19372       0       0            231     0     0
           nobody    --      28       0       0              6     0     0
           posein    --   11608   50000   55000            398     0     0
        b. [root@www /home]# repquota -g /home
            => 그룹단위로 쿼타상태를 보여준다.
   6) quota
     ㄱ. 설명: 자신의 쿼타 용량 상태를 보여준다.
     ㄴ. 사용법
        quota
     ㄷ. 사용예
        [posein@www posein]$ quota
        Disk quotas for user posein(500):
             Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
              /dev/hda6   11608   50000  55000             398       0      0
   7) convertquota
     ㄱ.설명: 쿼타설정과 관련된 quota.user, quota.group을 새로운 형태의 aquota.user, aquota.g
             roup파일 포맷으로 변경해준다. 레드햇 리눅스 2.4이상의 파일시스템에서 적용된다. 새
             로운 파일 포맷은 32bit uids/gids를 지원하며, root권한으로 quota를 설정해야 하며,
             bytes단위로 사용공간을 체크한다.
     ㄴ. 사용법
         convertquota [option] 디렉토리명
     ㄷ. options
       a. -u : 사용자 쿼타파일(quota.user)을 바꾼다. 기본값이다.
       b. -g : 그룹의 쿼타파일(quota.group)을 바꾼다.
     ㄹ. 사용예
       a. [root@www /]# convertquota /home
            => 사용자 쿼타파일인 qutoa.user를 aquota.user 파일로 전환한다.
       b. [root@www /]# convertquota -g /home
            => 그룹 쿼타파일인 qutoa.group를 aquota.group파일로 전환한다.
(3) 설정하기
   1) /etc/fstab 설정
     ㄱ. 설명: 만약 설정하려는 파티션이 /home이라면 보통 다음과 같이 설정되어 있다.
              /dev/hda6               /home                 ext2    defaults        1 2
              여기서 네번째필드에 usrquota라고 설정한다.
     ㄴ. 예
        /dev/hda6               /home                 ext2    defaults,usrquota   1 2
     ㄷ. 참고: /etc/fstab파일을 변경했을 경우에는 시스템을 재부팅하거나 다시 마운트해야 한다.
              mount -o remount /home
   2) quota.user 파일 생성
     ㄱ. 설명: 사용자의 쿼타정보를 가지고 있는 파일이 quota.user인데 이 파일을 생성해야 한다.
              보통 설치하고자 하는 파티션의 최상위에 만든다.
     ㄴ. 예
        [root@www /root]# touch /home/quota.user
        [root@www /root]# chmod 600 /home/quota.user
          => /home에 쿼터를 설정하려면 /home디렉토리에 만들며, root권한자만이 읽고 쓰기가
            가능하도록 설정한다.
   3) quotacheck 디렉토리
     ㄱ. 설명: 설정된 값을 읽어들여서 반영한다.
     ㄴ. 예
        [root@www /root]# quotacheck -mf /home
   4) convertquota 명령으로 aquota.user로 변환하기
     ㄱ. 설명: 예전에 사용하던 quota.user파일을 최신의 aquota.user파일로 convert해야 한다.
              convertquota명령은 커널 2.4이상의 시스템에서 적용된다.
     ㄴ. 예
        [root@www home]# convertquota -u /home
   5) 사용자에 대한 쿼터설정
     ㄱ. 설명: 제한하려는 용량을 설정한다. 옆에 나온 단위를 참조하여 값만 입력한다.
     ㄴ. 예
        [root@www /root]# edquota posein
   6) quota를 시작한다.
     [root@www /root]# quotaon /home
(4) 테스트
   1) 쿼터확인
     [root@www home]# repquota /home
     *** Report for user quotas on device /dev/hda8
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --      96       0       0              8     0     0
     nobody    --      32       0       0             10     0     0
     prehee    --      64    2000    3000             15     0     0
       => soft제한이 2M정도임을 알 수 있다.
   2) 용량을 초과한뒤의 쿼타확인
     [root@www home]# repquota  -a
     *** Report for user quotas on device /dev/hda8
     Block grace time: 7days; Inode grace time: 7days
                             Block limits                File limits
     User            used    soft    hard  grace    used  soft  hard  grace
     ----------------------------------------------------------------------
     root      --     112       0       0              9     0     0
     nobody    --      32       0       0             10     0     0
     prehee    +-    2916    2000    3000  6days      16     0     0
      => 앞쪽에 -- => +- 기호로 바뀌었다. 즉 Block limits의 soft한도가 넘었다는 뜻이다. grace
        에 6days라는 값이 표기되었다는 것은 6일동안은 soft한도를 넘어 사용을 해도 사용가능하다
        는 뜻이다. 하지만 6일 이후에는 soft한도내로 용량을 줄여야지만 새로운 데이터를 올릴 수
        있게 된다. 그러나 절대로 hard 한도는 넘을 수 없다. 이 한도를 넘게 되면 데이터를 저장할
        수 없다는 메시지가 출력된다.
(5) 그룹쿼타 설정하기
   1) /etc/fstab 설정
     ㄱ. 설명: 만약 설정하려는 파티션이 /home이라면 보통 다음과 같이 설정되어 있다.
              /dev/hda6               /home                 ext3    defaults        1 2
              여기서 네번째필드에 grpquota라고 설정한다.
     ㄴ. 예
        /dev/hda6               /home                 ext3    defaults,grpquota   1 2
     ㄷ. 참고: /etc/fstab파일을 변경했을 경우에는 시스템을 재부팅하거나 다시 마운트해야 한다.
              mount -o remount /home
   2) quota.group 파일 생성
     ㄱ. 설명: 그룹의 쿼타정보를 가지고 있는 파일이 quota.group인데 이 파일을 생성해야 한다.
              보통 설치하고자 하는 파티션의 최상위에 만든다.
     ㄴ. 예
        [root@www /root]# touch /home/quota.group
        [root@www /root]# chmod 600 /home/quota.group
          => /home에 쿼터를 설정하려면 /home디렉토리에 만들며, root권한자만이 읽고 쓰기가
            가능하도록 설정한다.
   3) quotacheck 디렉토리
     ㄱ. 설명: 설정된 값을 읽어들여서 반영한다.
     ㄴ. 예
        [root@www /root]# quotacheck -g -m /home
   4) convertquota 명령으로 aquota.group로 변환하기
     ㄱ. 설명: 예전에 사용하던 quota.group파일을 최신의 aquota.group파일로 convert해야 한다.
              convertquota명령은 커널 2.4이상의 시스템에서 적용된다.
     ㄴ. 예
        [root@www home]# convertquota -g /home
   5) 사용자에 대한 쿼터설정
     ㄱ. 설명: 제한하려는 용량을 설정한다. 옆에 나온 단위를 참조하여 값만 입력한다.
     ㄴ. 예
        [root@www /root]# edquota -g terran
   6) quota를 시작한다.
     [root@www /root]# quotaon /home
   7) quota의 확인
     [root@www /]# repquota -g /home


2. 스케줄링
(1) 개요: 스케줄링이란 특정한 시간에 특정한 작업을 행하게 하는 것이다. 보통 리눅스에는 cron
          과 at를 이용한다.
(2) at
   1) 설명: 지정한 시간에 원하는 명령을 실행될 수 있도록 해준다. atd데몬에 의하여 실행되고,
           지정한 작업은 큐(queue)에 저장되며 저장된 작업들은 /var/spool/at 디렉토리 아래
           파일로 저정된다. 보통 한번 실행되는 경우에 사용된다. 명령은 기본적으로 표준 입력
           장치를 통해받으며, 입력의 종료는 ctrl+d를 누른다.
   2) 사용법
     at [opion] 시간
   3) option
     -q queue : 작업의 대기 큐를 지정한다. 사용할 수 있는 큐는 a-z, A-Z까지이다. 지정하지
               않으면 기본큐로 a를 사용한다.
     -c job : 작업 리스트를 출력한다.
     -d : 작업을 삭제한다. (atrm과 같음)
     -l : 큐에 있는 작업들을 보여준다. root인 경우에는 모든 작업들의 목록을 보여준다.
         (atq와 같음)
     -m : 실행한 결과를 메일로 통보해 준다.
     시간 : 실행할 시간을 기록한다. 시간지정은 HHMM,HH:MM형태로 가능하고 am,pm으로 구분가능
           하다. 날짜의 경우는 MMDDYY, MM/DD/YY, MM.DD.YY형태로 나타낸다. 또한 now, tomorrow,
           noon같은 문자열도 사용가능하다.
     -f 파일명 : 표준입력이 아닌 지시된 파일에서 작업을 읽어온다.
   4) 사용예
     ㄱ. [posein@www posein]$ at 1:40am tomorrow
         warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
         at> ls -al > list.txt
         at>                                       // 중단하려면 여기에서 ctrl+d키를 누른다.
         job 3 at 2002-06-13 01:40
     ㄴ. [posein@www posein]$ at -l
         4       2002-06-12 01:48 a posein
           => 현재 예약된 작업의 리스트를 보여준다.
     ㄷ. [posein@www posein]$ at 7:00pm March 20
           => 3월20일 오후 7시에 작업을 예약한다
     ㄹ. [posein@www posein]$ at now+3hours
          => 3시간 후에 작업을 예약한다.
     ㅁ. [posein@www posein]$ at now + 5 minutes
          => 5분 뒤에 작업을 예약한다.
     ㅂ. [posein@www posein]$ at midnight + 10 minutes
          => 자정에서 10분뒤 즉, 00:10의 작업을 예약한다.
   5) 관련명령어
     ㄱ. atq
        a. 설명: 큐에 저장된 작업들을 보여주는 명령으로 at -l 실행결과와 같다. 작업번호와
                작업이 실행된 예정 시간, 작업이 저장되어 있는 큐를 보여준다.
        b. 사용법
          atq
        c. 사용예
          [posein@www posein]$ atq
          3       2002-06-12 01:40 a posein
     ㄴ. atrm
        a. 설명: 예약된 작업을 취소할 때 사용하는 명령으로 큐에서 해당 작업을 삭제한다. at -d
                를 사용하는 것과 같다.
        b. 사용법
          atrm 작업번호
        c. 사용예
          [posein@www posein]$ atrm 4
   6) at 사용자제한
     ㄱ. 설명: at데몬을 사용할 수 있는 사용자를 제한할 수 있다. /etc/at.allow파일과
              /etc/at.deny파일을 이용한다. /etc/at.allow파일에 등록하면 등록된 사용자만이
              사용가능하다. /etc/at.allow파일이 있다면 이 파일에 명단이 있는 사용자만이
              at명령을 사용할 수 있다. 이 파일이 없으면 /etc/at.deny파일을 찾는다. /etc/at.
              deny파일에 목록이 있는 사용자는 at를 사용할 수 없다. 두 파일 모두 찾지 못하면
              오로지 슈퍼 유저만이 사용가능하다. 또한 /etc/at.deny파일이 비어있으면 모든
              사용자가 at명령을 사용할 수 있다.
     ㄴ. 설정: 한 줄에 한 계정만 적는다.
        [root@www /root]# cat /etc/at.allow
        posein
        prehee
(3) cron
   1) 설명: 같은 작업을 주기적으로 반복할 수 있도록 해준다. 보통 /etc/rc.d/init.d/crond에
           의해 실행된다. 설정은 /usr/bin/crontab명령어를 사용한다.
   2) 관련명령어 및 파일
     ㄱ. crontab
        a. 설명: cron작업을 설정하는 명령어이다. 실행시키면 기본편집기인 vi가 실행된다.
        b. 사용법
          crontab [option] [파일명]
        c. option
          -l : 현재 crontab에 의해 설정된 내용을 출력한다.
          -e : crontab의 내용을 작성하거나 수정한다.
          -r : crontab의 내용을 삭제한다.
          -u : root권한자가 해당사용자의 crontab파일을 다룰때 사용한다.
        d. 사용예
          1. [root@www /root]# crontab -l
              no crontab for root
               => 작업의 목록을 보여준다.
          2. [posein@www posein]$ crontab -r
               => 등록된 작업을 삭제한다.
          3. [root@www /root]# crontab -e -u posein
              => posein이라는 사용자의 crontab을 작성하거나 수정한다.
          4. [posein@www posein]$ crontab aaa
              => aaa라는 파일을 crontab으로 사용한다. 이 경우에는 미리 aaa파일을 crontab의
                형식에 맞게 입력해놔야 한다.
        e. crontab의 작업형식 : 5개의 날짜 필드와 1개의 명령필드로 구성되어 있다.
          MM HH DD mm d command
          (설명)
            MM : 분(Minute)을 의미한다.(0~59까지 사용)
            HH : 시(Hour)를 의미한다.(0~23까지 사용)
            DD : 날짜(Day of Month)를 의미한다.(1~31까지 사용)
            mm : 달(Month)을 의미한다.(1~12까지 사용)
            d  : 요일(Day of Week)을 의미한다.(0~7까지 사용, 0과 7은 일요일을 나타냄)
            command : 실행할 작업을 명기한다.
          (참고)
            위 형식에서 시간을 나타내는 각 필드에서 와일드 카드 '*'를 사용할 수 있고 각각의
           요일을 구분할 때','를 사용하고, 연일을 나타낼 때는 '-'를 사용한다. 즉 월요일과
           수요일은 '1,3'으로 월요일부터 금요일까지는 '1-5'로 표시할 수 있다.
     ㄴ. /etc/crontab
        a. 설명: 시스템이 정기적인 작업이 수행될 수 있도록 기본적으로 설정되어 있는 파일이다.
        b. 설정예
          [root@www /etc]# cat /etc/crontab
          SHELL=/bin/bash
          PATH=/sbin:/bin:/usr/sbin:/usr/bin
          MAILTO=root
          HOME=/

          # run-parts
          01 * * * * root run-parts /etc/cron.hourly
          02 4 * * * root run-parts /etc/cron.daily
          22 4 * * 0 root run-parts /etc/cron.weekly
          42 4 1 * * root run-parts /etc/cron.monthly

          0-59/5 * * * * root /usr/bin/mrtg.sh /usr/lib/mrtg/mrtg.cfg
           => run-parts는 디렉토리 이하의 스크립트를 순차적으로 실행하는 명령어이다.
     ㄷ. /etc/cron.allow : at과 마찬가지로 사용자를 제한할 때 사용한다.
     ㄹ. /var/spool/cron 디렉토리 : 각각의 사용자가 등록한 crontab은 이 디렉토리아래에 각
                                   사용자의 계정이름으로 저장된다.
   3) 설정하기
     ㄱ. crontab -e 명령을 내린다.
     ㄴ. 해당형식에 맞게 입력한다.
        예) 0 12 * * 1-5 /home/posein/aaa
           => 월요일부터 금요일까지 /home/posein/aaa라는 스크립트를 실행시킨다.
     ㄷ. 설정예
        1) 0 12 1 1-12/2 * /home/posein/bbb
            => 1월부터 12월까지 2개월마다 /home/posein/bbb라는 스크립트를 실행시킨다.
        2) 0 10 * * 1 cat /root/notice | mail -s "Notice"
posein@mybestone.com
            => 월요일 오전 10시에 notice라는 문서의 내용을 메일로 발송한다. 

출처 : 대전국제IT교육센터 정성재 강사

 

1. 개요
인터넷이나 소규모 LAN을 이용한 네트워크를 통하여 리눅스를 설치할 수 있다. 이 경우 리눅스 설치
이미지가 있는 리눅스서버와 리눅스를 설치하는 클라이언트로 구분한다. 리눅스서버는 FTP, NFS서버
를 구축하여야 하며, 클라이언트가 접속할 수 있도록 설정해야 한다. 클라이언트에서는 네트워크
부팅 이미지로 만든 부팅디스크를 준비해야 한다.


2. 리눅스 네트워크서버 설정 -NFS 서버이용
(1) 서버에 설치를 위한 소스 복사
   1) 소스가 위치할 디렉토리 생성
     [root@www root]# mkdir /redhat80
   2) 생성한 디렉토리에 리눅스 설치파일을 복사한다. 보통 마운트하면 /mnt/cdrom/RedHat 디렉토리
     에 설치파일들이 들어있다. 여기에 있는 내용을 복사하면 된다.
     [root@www root]# mount -t iso9660 /dev/cdrom /mnt/cdrom
       => 물론 /etc/fstab에 의해 mount /mnt/cdrom 이라고만 해도 된다.
   3) 설치에 필요한 파일을 소스디렉토리에 복사한다.
     [root@www root]# cp -vr /mnt/cdrom/RedHat/ /redhat80
   4) 복사가 다 되었으면 마운트를 해제한다.
     [root@www root]# umount /mnt/cdrom
   5) 나머지 설치 CD-ROM도 위와 같은 방법으로 모두 복사한다.
(2) NFS서버로 구축하기
   1) /etc/exports 파일설정
    ㄱ. 기본설정법
       설치소스경로          클라이언트주소
    ㄴ. 설정예
       /redhat80      *
      => /redhat80 이라는 디렉토리에 모든 클라이언트의 접속을 허가하였다.
   2) NFS 서버를 작동한다.
    ㄱ. /etc/rc.d/init.d/portmap start    (보통 이 데몬은 기본적으로 작동한다.)
    ㄴ. /etc/rc.d/int.d/nfs start

3. 클라이언트 설정 - NFS 서버 이용
(1) 설치디스크 준비하기 : 여러 방법이 있지만 리눅스 서버에서 제작하는 것으로 한다.
   1) 레드햇 8.0의 1번 씨디를 준비해서 CD-ROM 드라이브에 넣는다.
   2) 마운트한다.
     mount -t iso9660 /dev/cdrom /mnt/cdrom
   3) 부팅에 필요한 이미지인 bootnet.img라는 파일이 있는 images디렉토리로 이동한다.
     cd /mnt/cdrom/images
   4) dd 명령으로 만든다.
     dd if=bootnet.img of=/dev/fd0
(2) 설치디스크로 부팅하여 설치한다.
   1) 부팅디스크를 넣고 부팅한다.
   2) 초기화면이 뜨고 'boot:'라는 프롬프트가 나오면 그냥 [Enter]키를 누른다.
   3) 사용할 언어를 선택한다.(기본 English 선택)
   4) 키보드를 선택한다.(기본 us 선택)
   5) 인스톨 방법을 선택한다. NFS image, FTP, HTTP 방법이 있으며 이중에서 NFS image를 고른다.
   6) 네트워크 장치를 선택한다. eth0이나 eth1 등 맞는 것을 선택한다.
   7) TCP/IP 네트워크 설정을 한다. 해당 IP, Netmask, Gateway값등을 설정한다.
   8) NFS 서버를 설정한다.
    ㄱ. NFS server name : 서버네임이나 IP주소를 적는다.
    ㄴ. Rea Hat directory : 설치소스의 경로를 적는다. 위의 예제대로 한다면 /redhat80 이라고
                           입력한다.
   9) 설치를 시작한다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 커널(kernel)의 개요
(1) 커널: 리눅스에서 커널은 시스템 자원을 소유하고 관리하는 역할을 담당한다. 보통 하드웨어,
          메모리, 프로세스 스케줄링을 담당하고 프로그램이 하드웨어 자원을 간접적으로 접근할
          수 있도록 해준다.
(2) 커널버전
   1) 기본구성
     메이저.마이너.패치레벨
   2) 설명
     ㄱ. 메이저릴리즈: 메이저 릴리즈는 커널에 매우 큰 변화가 생겼을 경우를 나타낸다.
     ㄴ. 마이너릴리즈: 마이너 릴리즈는 중요한 기능상의 변화가 생기거나 추가된 경우를 나타내며
                      이것들을 한꺼번에 모아서 메이저릴리즈로 발표된다. 또한 마이너릴리즈는
                      두 가지로 나뉜다.
        a. 짝수번호 릴리즈: 짝수번호인 커널은 안정버전이다. (예 2.0, 2.2, 2.4, 2.6)
        b. 홀수번호 릴리즈: 홀수번호인 커널은 개발버전이다. (예 2.1, 2.3, 2.5) 주로 커널 개발
                           자들이 이용한다. 마이너 릴리즈의 개발 목표가 이루어지고 테스트 결과
                           안정성이 입증되면 짝수번호인 마이너릴리즈가 만들어진다.
     ㄷ. 패치레벨: 버그가 수정되고 새로운 기능의 계획이 추가되면 커널의 패치 레벨이 증가한다.
                  일반적으로 최근 버그가 수정된 가장 최신 버전의 커널을 사용하는 것이 안정적
                  이다.
(3) 필요한 도구: 자신만의 커널을 만들기 위해 C 컴파일러(리눅스에서는 GNU C컴파일러인 gcc), 어
                 셈블러, 링커, make유틸리티 등의 개발도구가 필요하다. 리눅스 설치시 개발옵션을
                 선택하면 기본적으로 설치된다.

2. 사용자 커널 컴파일
(1) 커널설정
   1) 설명: 커널을 만드는 첫번째 단계는 설정이다. 커널에는 파일시스템, SCSI, 네트워크 등 선택
           옵션이 있다. 이러한 많은 옵션들은 직접 포함되거나 모듈로 만들어져 커널의 기능이 된
           다. 설정 과정 중 원하는 옵션을 선택하면 된다.
   2) 설정규칙
     y: 커널에 컴파일(yes)
     m: 모듈로 컴파일(module)
     n: 기능을 사용하지 않음(no)
   3) 환경설정의 저장: 설정된 환경은 보통 /usr/src/linux/.config에 기록된다.
(2) 환경설정도구
   1) make config: 가장 기초적인 자동 설정도구로 시스템의 터미널 종류에 상관없이 실행가능하다.
                  이 명령을 실행하면 콘솔이나 윈도우에 각 옵션에 대한 질문이 나타난다. 사용자
                  는 질문에 대해 각각 y,m,n으로 대답한다. 이 도구는 상당히 장황하고 모든 옵션
                  에 대해 답을 해야한다.
   2) make menuconfig: 화살표키와 다른 키를 이용해 커널을 설정할 수 있는 텍스트 모드의 윈도우
                      환경을 제공한다. 이 때 터미널에서 커서를 제어할 수 있는 커스(curses)라이
                      브러리가 필요하다.
   3) make xconfig: X윈도우 기반하에서 사용한다. 라디오버튼으로 선택하는 방식이다.

3. 커널소스구하기
(1) 개요: 리눅스 커널은 리눅스의 창시자인 리누스 토발즈와 앨랜 콕스(Alan Cox)에 의해 개발되어
          발표되고 있다. 토발즈가 발표하는 커널은 두 가지형태로 배포된다. 하나는 안정버전과
          테스트가 필요한 개발버전으로 나뉘어 있다. 앨랜 콕스의 커널은 토발즈의 커널보다 새로
          운 기능의 커널을 패치하는 형태로 제공된다.
(2) 커널소스파일의 예
    linux-2.4.21.tar.gz
     => (설명)
        2 : 커널의 주 버전
        4 : 홀수면 개발버전을 나타내고, 짝수면 안정버전을 나타낸다.
       21 : 패치된 횟수이다.
(3) 커널 소스 구하기
   1) 설명: 관련사이트는 ftp.kernel.org 이므로 여기서 최신의 커널을 구할 수 있다.
   2) 참고: 최신 커널 버전 알아보기
     ㄱ. 설명: finger명령을 이용하여 최신의 커널버전을 알아볼 수 있다.
     ㄴ. 사용예
        [posein@www posein]# finger @ftp.kernel.org
        The latest stable version of the Linux kernel is:           2.4.21
        The latest prepatch for the stable Linux kernel tree is:    2.4.22-pre9
        The latest snapshot for the stable Linux kernel tree is:    2.4.21-bk23
        The latest beta version of the Linux kernel is:             2.6.0-test2
        The latest 2.2 version of the Linux kernel is:              2.2.25
        The latest 2.0 version of the Linux kernel is:              2.0.39
        The latest prepatch for the 2.0 Linux kernel tree is:       2.0.40-rc6
        The latest -ac patch to the stable Linux kernels is:        2.4.22-pre6-ac1

4. 커널소스풀기
(1) /usr/src 디렉토리로 이동한다.
(2) 관련사이트에 접속한다.
    ftp ftp.kernel.org    
(3) ID와 패스워드를 입력: 각각 anonymous/anonymous 라고 입력하거나 ftp/ftp라고 입력한다.
(4) cd /pub/linux/kernel/v2.4 로 이동한다.
(5) get 명령어를 이용하여 다운받는다.
   예) get linux-2.4.21.tar.gz
(6) tar 명령을 이용하여 압축을 푼다.
    tar zxvf linux-2.4.21.tar.gz
(7) 압축을 푼 디렉토리로 이동한다.
    cd linux-2.4.21 (예전의 경우에는 linux라는 디렉토리로 생성되는 경우도 있었음)

5. 커널컴파일(Kernel Compile)순서
make mrproper => make menuconfig => make dep => make clean => make bzImage => make install =>
make modules => make modules_install

(참고) make mrproper
       커널 컴파일시 make mrproper명령을 새로운 커널 설정을 위한 것으로, 기존에 설정되어 있는
      커널 설정값을 모두 초기화하고, 컴파일되어 있던 오브젝트(object, .o확장자를 가진 파일,
      이를 커널에서 모듈이라고 함)파일을 제거하여 커널 상태를 새로운 커널 설정에 맞도록 초기
      화해 주는 명령이다. 이 명령은 커널 컴파일시에 매번 실행할 필요는 없다. 기존 커널 설정을
      모두 무시하고 다시 설정하고자 할 때나 새로운 의존성을 설정하고자 할 때 요구되므로, 기존
      설정에 새로운 기능을 추가하는 경우에는 이 명령을 실행하지 않아도 된다.

6. 커널환경설정
(1) 환경설정 명령의 종류
   1) make config : 기본 텍스트명령으로 각 옵션을 선택한다.
   2) make xconfig : X윈도우 환경하에서 설정하는 명령이다.
   3) make menuconfig : 가장 많이 쓰이는 방법으로 ncurses를 이용한다.
(2) 커널 옵션 설정 규칙
   1) 기본규칙: 'y' 또는 '*'는 커널에 적재되도록 하는 것이며, 'm'은 모듈로 해당 기능을 사용함
               을 의미하고, 'n'은 커널에 해당기능을 사용하지 않겠다는 뜻이다.
   2) 참고: 불필요한 설정들은 시스템 자원을 많이 소모함으로 가능한 선택하지 않고, 기본적인 것
           들만 커널에 포함시키고 나머지들은 모듈로 작동될 수 있도록 한다.
(3) Menu
   1) Code maturity level options (N)
     ㄱ. 설명: 커널 코드의 성숙도를 선택하는 부분으로 '*'을 선택하면 개발 단계의 기능들을 사용
              한다는 의미이며, 'n'은 커널에서 안정적인 기능들만 사용하겠다는 설정이다. 기본적
              으로 'n'으로 한다.
     ㄴ. 메뉴
        Prompt for develpment and/or incomplete code/drivers
   2) Loadable module support
     ㄱ. 설명: 커널에서 모듈을 사용할 수 있도록 선택해주는 부분이다.
     ㄴ. 메뉴항목
        Enable loadable module support (Y)
         => 동적 모듈 기능을 가능하게 해주는 기능으로 원하는 기능을 메모리에 올려놓고 필요없는
           기능은 메모리에서 빼내는 것을 가능하게 해준다. 꼭 선택하도록 한다.
        Set version information on all module symbols (N)
         => 커널이 바뀌어도 기존의 모듈을 사용하게 해준다. 특별한 경우가 아니면 필요없지만
           가지고 있는 하드웨어 드라이버가 별도의 모듈로 제공되는 경우에는 선택해야 한다.
        Kernel module loader (Y)
         => 모듈에 대해 커널이 항상 대비해 주도록 설정하는 것이다. insmod나 modprobe등의
           명령을 사용하지 않고, kerneld라는 데몬이 자동적으로 모듈이 어느 기능을 수행하지
           않으면 자동적으로 모듈을 메모리에서 제거하는 기능을 갖는다. 유용하므로 반드시 선택
           하도록 한다.
   3) Processor type and features
     ㄱ. 설명: 자신의 컴퓨터에 맞는 CPU를 선택하는 부분이다. 컴파일후 재부팅시 일어나는 Panic
              현상의 대부분이 이곳 설정에서 발생한다. 만약 정확히 모른다면 386을 선택해도
              된다.
     ㄴ. 메뉴항목
       (Pentium-III/Celeron(Coppermine)) Processor family
         => 자신의 시스템에 맞는 CPU를 선택한다.
       [*] PGE extensions (not for Cyrix/Transmeta)
         => Pentium-II 계열선택시에 나타나는 메뉴로 PGE 지원여부이다. Cyrix나 Transmeta CPU가
           아니면 선택한다.
       [*] Machine Check Exception
        => 시스템에 문제점이 발생시에 프로세서가 커널에서 통지하는 것을 허락하는 옵션이다.
          선택하도록 한다. (Y)
       Toshiba Laptop support (N)
         => 도시바 랩톱인 경우에 선택한다.
       Dell laptop support (N)
         => 델의 랩톱인 경우에 선택한다.
       /dev/cpu/microcode - Intel IA32 CPU microcode support (N)
         => 펜티엄 프로, 펜티엄 II,III,IV등 IA32인텔계열의 프로세스에서 마이크로코드를
           업데이트할 수 있게 해주는 옵션이다. 그러나 리눅스커널에서 포함되어 있지 않는
           실제 마이크로코드 바이너리 데이터를 가지고 있어야 한다. File systems 항목에서
           "/dev 파일시스템 지원"이라는 옵션과 함께 설정해야 한다.
       /dev/cpu/*/msr - Model-specific register support (N)
         => 특권을 가진 프로세스들이 x86 Model-Specific Register(MSRs)에 접근할 수 있도록
           해주는 장치로 /dev/cpu/0/msr부터 /dev/cpu/21/msr디바이스에 주 장치번호 202와
           부장치번호 0~31을 가진다. 주로 멀티프로세스 시스템에서 적용된다.
       /dev/cpu/*/cpuid - CPU information support (N)
         => /dev/cpu/0/cpuid부터 /dev/cpu/31/cpuid에서 주장치번호 202와 부장치번호 0~31을
           가지는 디바이스로 프로세스들이 특정 프로세서에 실행될 수 있도록 지시하는 x86
           CPUID에 접근할 수 있도록 해준다. 역시 이것도 멀티프로세스 시스템에서 사용한다.
       (off) High Memory Support
         => x86리눅스 기반 시스템에서 물리적인 메모리를 최대 64기가 바이트까지 사용할 수
           있는데, 32비트 계열의 인텔 프로세스에서는 메모리주소 공간이 4기가 바이트까지만
           지원되어 그 이상의 물리적인 메모리를 가지고 있더라고 커널에서 모든 메모리가 영구
           적으로 매핑되지 못한다. 이 때 영구적으로 매핑되지 않는 메모리를 상위메모리(High
           Memory)라고 부르는데, 이 상위 메모리를 설정하는 옵션이다. 사용중인 시스템의 램이
           1GB 이하인 경우에는 off로 설정하고, 1~4GB인 경우에는 "4GB"로 설정하고 그 이상인
           경우에는 "64GB"로 설정한다.
       Math emulation (N)
        => 386이나 486SX에서는 수학 코프로세서(Math coprocessor)를 가지고 있지 않는 시스템에서
          에뮬레이터기능이 요구될 때 선택하는 옵션이다. 펜티엄급 CPU에서는 이 옵션이 필요없다.
       MTRR (Memory Type Range Register) support (N)
        => 인텔 펜티엄 프로와 펜티엄 II시스템에 있는 MTRR을 지원하는 것으로 프로세스가 메모리
          영역에 접근할 수 있도록 제어해 주는 기능을 한다. 이를 선택하면 PCI또는 AGP VGA카드의
          성능이 향상되며, X서버에서도 이 기능을 사용하므로 선택하도록 한다. 참고로 DVD-ROM을
          사용하는 경우에는 필히 선택한다.
       Symmetric multi-processing support (N)
        => 두 개이상의 CPU를 사용할 경우 선택한다. 최대 16개의 CPU를 지원한다. 이 옵션을 선택
          한 경우에는 Character devices  --->< > Enhanced Real Time Clock Support도 선택해야
          하며 General setup  --->< >   Advanced Power Management BIOS support는 'n'로 해야
          된다.
       Multi-node NUMA system support (NEW) (N)
        => 선택하지 않는다.
       Unsynced TSC support (NEW) (N)
        => 선택하지 않는다.
   4) General setup
     ㄱ. 설명: 일반적인 설정을 한다.
     ㄴ. 메뉴
        Networking support (Y)
         => 리눅스에서 네트워킹을 사용하게 해주는 옵션이다. 네트워크가 연결되어 있지 않더라고
           반드시 선택한다.
        PCI support (Y)
         => PCI 주변기기를 위하여 꼭 선택한다.
       (Any)   PCI access mode
         => PCI주변기기를 탐색하는 방법으로 "Bios"를 선택하면 바이오스가 이용되고, "Direct"를
           선택하면 바이오스가 이용되지 않는다. "Any"를 선택하면 커널이 직접 탐색하고 실패하는
           경우에는 바이오스에 의해서 실행하도록 한다.
        [*] ISA bus support
         => 메인보드에 ISA 슬롯이 있는 경우에 선택한다.
        PCI device name database (Y)
         => 커널에는 알려진 모든 PCI장치명에 대한 데이터베이스가 있어서 /proc/pci, /proc/iopor
           ts 그리고 유사한 파일명으로 사용자들이 이해할 수 있는 정보를 제공해준다. 이러한 데
           이터베이스는 대략 80KB정도의 커널 이미지크기이지만, 부팅될 때마다 제거되기 때문에
           커널 메모리를 차지하지 않으므로 선택한다.
        EISA support (N)
         => EISA(Extended Industry Standard Architecture)버스를 지원하는 경우에 선택한다.
           이것은 IBM마이크로채널 버스를 대체하기 위해 개발된 것으로 현재는 거의 사용하지
           않는다.
        MCA support (N)
         => MCA(MicroChannel Architecture)는 IBM ps/2기종과 랩톱에서 지원되는 것으로 PCI 또는
           ISA와 유사하다. 현재 거의 사용되지 않는다.
        Support for hot-pluggable devices (Y)
         => 이 기능은 주로 랩톱 컴퓨터나 노트북에서 PCMCIA카드와 같이 시스템이 동작되는 상태
           에서 장치를 끼워 바로 작동되도록 하고자 할 때 사용되는 기능으로 일반 데스크탑에서
           는 USB장치를 사용할 경우 선택한다.
       PCMCIA/CardBus support (N)
        => 노트북이나 랩톱컴퓨터에서 사용되는 기능이다.
       PCI Hotplug Support  --->
       System V IPC (Y)
        => 프로세스 사이에서 동기화와 정보교환을 위한 라이브러리 함수와 시스템 콜 모음이다.
          리눅스에서는 도스용 프로그램을 에뮬레이터를 통해서 실행시킬수 있다. 선택하도록 한다.
       BSD Process Accounting (Y)
        => 프로세스가 존재할 때에 사용자가 커널 프로세스의 정보를 알 수 있도록 해주는 옵션
          이다. 선택하도록 한다.
       Sysctl support (Y)
        => 시스템을 재부팅하지 않고 시행중인 커널 매개 변수를 동적으로 변경한다. /proc파일시스
          템이 설치되어 있으면 편집가능한 sysctl요소 트리는 /proc/sys에 생성된다. 커널의 크기
          가 8kb 늘어난다.
       (ELF) Kernel core (/proc/kcore) format
         => 커널 코어이미지(core image)를 담고 있는 /proc/kcore파일의 포맷 형태로 ELF 또는
           a.out로 설정한 것인가를 선택하는 옵션이다. 이 옵션을 사용하기 위해서는
           File systems  --->[*] /proc file system support를 같이 선택해야 한다. 커널해커가
           아니라면 ELF로 설정한다.
          Kernel support for a.out binaries (N)
          Kernel support for ELF binaries (Y)                                
          Kernel support for MISC binaries (N)
           => a.out(Assembler.Output)는 초창기 유닉스에서 쓰이던 방법이다. 슬랙웨어 바이너리
             파일 형태인 ELF가 나오기 전의 바이너리로 요즘은 사용되지 않으므로 선택하지 말고
             ELF는 리눅스 바이너리 포맷의 표준이므로 반드시 선택해야 한다. MISC는 선택하지
             않는다.
       Power Management support (Y)
         => 전원 관리 기능설정부분으로 시스템을 끄거나 사용하지 않을 경우에 절전모드로 전환
           하여 소비를 줄여주는 기능으로 APM(Advanced Power Management) 또는 ACPI(Advanced
           Configuration and Power Interface)에 의해서 작동될 수 있는데 이 기능을 사용하기
           위해서는 Advanced Power Management BIOS support [M]과 [*]     Use real mode APM
           BIOS call to power off (NEW) (Y)와 같이 사용한다.
   5) Memory Technology Devices (MTD) : 임베디드 시스템에 사용되는 메모리 장치 특히 플래시
                                       장치에 관련된 기능과 모듈들을 선택하는 옵션이다.
                                       선택하지 않도록 한다. (N)
   6) Parallel port support : 로컬시스템에서 로컬프린터를 사용할 경우에 이 옵션을 'y'로 설정
                             하거나 'm'으로 설정한다. 이 때 PC-style hardware (NEW)도 모듈로
                             설정하도록 한다.(Y or N or M)
   7) Plug and Play configuration: PNP기능을 사용하기 위해서는 반드시 이 옵션을 선택한다. ISA
                                  카드를 사용하지 않는 경우에는 ISA Plug and Play support는
                                  선택하지 않는다. (Y)
   8) Block devices
     Normal PC floppy disk support (Y)
      => 플로피 드라이브 지원여부이다. 선택하도록 한다.
     XT hard disk support (N)
      => 286컴퓨터에 사용되던 XT하드 디스크를 지원하는 옵션이다. 요즘은 이런 방식의 하드디스크
        는 사용하지 않으므로 선택하지 않는다.
     Compaq SMART2 support (N)
     Compaq Smart Array 5xxx support (N)
      => 컴팩 장치를 사용할 때 선택한다.
     Mylex DAC960/DAC1100 PCI RAID Controller suppor (N)
      => 해당회사의 RAID 컨트롤러를 사용하지 않는다면 선택하지 않는다.
     Loopback device support (M)
      => 파일 속에 파일시스템을 만들어 마운트하여 사용하도록 해준다. 블록 디바이스처럼 사용할
        수 있도록 해주는 기능이다. 특정한 파일시스템 테스트 또는 CD-ROM 이미지 테스트 등에
        유용하게 사용된다. 이 옵션을 모듈로 선택한다.
     Network block device support (N)
      => 네트워크로 연결된 서버의 파일 시스템을 마운트하여 블록 디바이스처럼 사용하고자할 때
        사용하는 옵션으로 이 옵션을 사용하지 않아도 NFS서비스를 이용할 수 있으므로 이 옵션은
        선택하지 않도록 한다.
     RAM disk support (N)
      => RAM을 하드디스크처럼 사용하고자 할 때 사용하는 옵션이다. 선택하지 않아도 된다.
     [*] Per partition statistics in /proc/partitions (NEW) (Y)
      => 파티션 상태를 /proc/partitions 라는 파일에 기록한다. 선택하도록 한다.
   9) Multi-device support (RAID and LVM) (Y)
     ㄱ. 설명: RAID장치를 사용할 수 있도록 커널에서 지원하는 소프트웨어 RAID를 사용하거나 LVM
              기능을 사용하기 위해서는 이 옵션을 선택한다.
     ㄴ. 메뉴
        Multiple devices driver support (RAID and LVM)
        RAID support (Y)
         => 이 드라이버는 여러 개의 하드 디스크 파티션을 하나의 논리적인 블록 디바이스로 통합
           시켜주는 기능을 한다. 단순히 하나의 파티션을 다른 하나의 파티션에 추가하거나 여러
           하드디스크들을 RAID/1/4/5디바이스로 연결시켜 주어 하드디스크에 이상이 생겼을 경우
           대처하고자 할 때 사용한다.
         Linear (append) mode (Y)
         RAID-0 (striping) mode (Y)
         RAID-1 (mirroring) mode (Y)
         RAID-4/RAID-5 mode (Y)
         Multipath I/O support (Y)
        Logical volume manager (LVM) support (Y)
         => 여러 개의 하드디스크, 여러 개의 파티션, 다중장치 혹은 루프 디바이스까지 하나의
           볼륨 그룹으로 묶어주는 역할을 하는 것으로 일종의 가상디스크 개념이다. 볼륨그룹내
           에서 가상 파티션이라 할 수 있는 논리 볼륨을 생성할 수 있으며, 용량에 따라서 볼륨
           그룹, 논리 볼륨의 크기를 조절할 수 있다. 논리 볼륨은 /dev/VolumeGroup/Name/Logical
           Name명을 가진 블록디바이스로 접근된다.
   10) Networking options
     ㄱ. 설명: 네트워크관련된 부분을 상세히 설정한다.
     ㄴ. 메뉴
        Packet socket (Y)
         => tcpdump와 같이 커널에서 실행중인 중간 네트워크 프로토콜없이 네트워크 디바이스와
           직접 통신할 수 있게 해준다. 이 옵션은 선택하도록 한다.(Y)
        Packet socket: mmapped IO
         => 패킷 프로토콜 드라이버가 IO매카니즘을 이용하게 되어 보다 빠른 통신이 가능하게 해준
           다. 선택하지 않아도 된다.(N)
        Netlink device emulation (NEW)
         => 커널의 어떤부분 또는 모듈과 사용자 프로세스들 사이에 쌍방향통신이 가능하도록 해주는
           옵션이다. 꼭 선택하도록 한다.(Y)
        Network packet filtering (replaces ipchains)
         => 리눅스 박스를 통과하는 패킷들을 필터링하는 설정에 관련된 옵션이다. ipchains는 커널
           2.2에서 사용하던 필터링기법이고, 2.4커널에서는 iptables를 사용한다. 방화벽을 설정
           하거나 마스커레이드를 사용한다면 선택한다.(Y)
         *Network packet filtering debugging (NEW)
            => 필터링관련 오류분석하는데 있어서 유용한 메시지를 줄 수 있으므로 디버깅 정보를
              필요로 하는 경우에 선택한다.(N)
        Socket Filtering
         => 사용자 공간 필터를 소켓에 연결할 수 있도록 해주고, 패킷 통과를 허용하거나 거부할
           수 있도록 해준다. 기본적으로는 선택하지 않는다.(N)
        Unix domain sockets
         => 소켓들은 네트워크 접속이 이루어지게 하고 접근될 수 있도록 하는 표준 유닉스 메카니
           즘으로 X윈도우나 syslog와 같은 프로그램들은 이 소켓을 이용하므로 선택한다.(Y)
        TCP/IP networking
         => 꼭 선택해야 하는 옵션이다. X윈도우 구동이나 로컬호스트의 핑과도 관련이 있다.(Y)
          * IP: multicasting
           => 네트워크상의 여러 컴퓨터에 동시에 같은 자료를 전송할 수 있도록 하는데 필요한
             옵션이다. 주로 인터넷방송국과 같은 스트리밍서비스하는 MBONE에 접속하기 위해 필요
             한 옵션이다. 기본적으로 선택하지 않는다.(N)
          * IP: advanced router
           => 시스템이 네트워크 패킷들은 포워드해주거나 재분배하는 기능을 갖는 라우터로 사용
             시에 필요한 옵션이다. IP 포워딩이나 마스커레이드를 사용할 경우에는 선택해야 한다.
             (Y)
          * IP: kernel level autoconfiguration
           => 커널이 부팅될 때 아이피와 라우팅테이블을 자동으로 설정할 수 있도록 해준다. 디스
             크가 없는 리눅스 시스템이 네트워크로 부팅될 수 있도록 하기 위해서는 이 옵션을
             선택해야 한다. 그러나 네트워크 이더넷 부팅을 하지 않는다면 사용하지 않도록 한다.
             만일 이 옵션을 선택하는 경우에 커널 부팅시 네트워크 부팅 설정을 하기 위해 오랜
             시간 동안 멈추는 현상이 있다.(N)
          * IP: tunneling
           => 하나의 프로토콜안에 다른 프로토콜 자료를 캡슐화하여 서로 다른 프로토콜 사이에서
             전송하는 기능으로 이 옵션을 Mobile쪽에서 사용되므로 선택하지 않는다.(N)
          * IP: GRE tunnels over IP
           => GRE(Generic Routing Encapsulation)는 시스코 라우터 사용시 유용하며, 멀티캐스트
             및 IPV6를 지원하지만 일반적으로 선택하지 않는다.(N)
          * IP: multicast routing
           => 멀티캐스팅 서비스를 할 경우에만 선택한다. 일반적으로 선택하지 않는다.(N)
          * IP: TCP Explicit Congestion Notification support (N)
           => ECN(Explicit Congestion Notification)는 라우터로 하여금 네트워크 폭주시 클라이
             언트에게 통보하게 하여 버려지는 패킷들이 감소되어 네트워크 성능을 향상시켜 주는
             데 이 옵션은 커널에 ECN기능을 추가해 주고, 실행도중 ECN기능이 꺼지도록 하는
             sysctl(/proc/sys/net/ipv4/tcp_ecn)도 추가해 준다. 일반적으로 선택하지 않는다.(N)
          * IP: TCP syncookie support (disabled per default) (Y)
           => TCP/IP의 결점을 이용하여 서버에 접속할 수 없도록 하는 SYN ATTACK을 막기 위해서는
             이 옵션을 반드시 선택해야 한다. 이 옵션을 사용하기 위해서는 File systems  --->
            /proc file system support와 General setup  --->[*] Sysctl support를 꼭 선택해야
            한다. 그리고나서 시스템이 부팅된 후 echo 1>/proc/sys/net/ipv4/tcp_syscookies 를
            실행시켜야 한다.
        IP: Netfilter Configuration : 필터링관련 프로그램사용허부를 설정한다. 2.4커널에서
                                     사용하는 iptables, 2.2커널에서 사용하는 ipchains, 2.0
                                     커널에서 사용하는 ipfwadm에 관련된 설정을 한다.
         * Connection tracking (required for masq/NAT) (NEW) (M)
          => 접속추적기능(Connection tracking)은 어떠한 패킷들이 리눅스 머신을 통과했는지
            기록하여 어떻게 접속되는지를 알 수 있도록 해준다. 이 옵션은 마스커레이드나 다른
            네트워크 주소변환(Network Address Translation, NAT)에 이용되며, 또한 패킷 필터링
            을 향상시키는데 사용될 수 있다.
           - FTP protocol support (NEW) (M)
            => FTP서비스에 대한 접속 추적기능을 사용하고자 할 때 사용한다.
           - Amanda protocol support (NEW) (N)
            => Amanda라는 백업패키지를 사용하는 경우에만 선택한다.
           -  TFTP protocol support (NEW) (N)
            => TFTP 를 사용하는 경우에만 선택한다.
           - IRC protocol support (NEW) (N)
            => 인터넷 채팅인 IRC에 대해서 접속 추적기능을 사용하고자 할 때 사용한다.
         * IP tables support (required for filtering/masq/NAT) (NEW) (Y)
          => iptables를 이용하여 패킷필터링, 마스커레이딩, 포트포워딩등 NAT기능을 사용할 때
            사용하는 옵션이다. 선택하도록 한다.(Y)
          - limit match support (NEW) (M)
           => 방화벽 규칙의 일치율을 조절할 수 있도록 해주는 옵션으로 "LOG target support"와
             함께 유용하게 쓰이며 일부 무차별 공격(DoS attack)을 막는데 유용하다.
          - MAC address match support (NEW) (M)
           => 이더넷카드의 맥주소를 패킷의 이더넷 주소에 따라서 패킷들과 일치시켜주는 기능을
            한다.
          - Packet type match support (NEW) (M)
           => 패킷이 BROADCAST, MULTICAST 등 주어진 조건과 매칭되는 것을 찾아주는 옵션이다.
          - netfilter MARK match support (NEW) (M)
           => Mark타겟에 의해서 설정되는데, 패킷 내에 있는 'ntmakr'값에 따라서 패킷들이 일치
             하는 값에 따라서 일치하도록 해주는 옵션이다.
          - Multiple port match support (NEW) (M)
           => 일련의 출발지 포트 또는 목적지 포트에 따라서 TCP 내지 UDP패킷들을 일치하도록 해
             주는 기능으로 일반적으로 하나의 규칙으로 단일 포트 범위만 일치해 줄 수 있다.(M)
          - TOS match support (NEW) (N)
           => IP패킷의 서비스 필드 유형에 따라서 패킷들을 일치시켜 준다.
          - ECN match support (NEW) (N)
           => TCP 헤더 필드의 ECN과 패킷들을 일치시켜준다.
          - AH/ESP match support (NEW) (N)
           => AH/ESP 패킷들을 일치시켜 준다.
          - LENGTH match support (NEW) (N)
          - TTL match support (NEW) (N)
          - tcpmss match support (NEW) (N)
           => TCP SYN 패킷의 MSS값을 검사할 수 있도록 해주며, 그러한 접속에 있어서 최대 패킷의
             크기를 조절해 주는 'tcpms  s'일치성을 부여한다.
          - Helper match support (NEW) (N)
          - Connection state match support (NEW) (M)
           => 추적된 접속과 관계에 따라 패킷들이 일치하도록 해주는 옵션으로 패킷 분류에 있어서
             매우 강력한 도구이다.
          - Connection tracking match support (NEW) (M)
           => 일반적인 conntrack 일치하도록 해주는 옵션이다.
          - Packet filtering (NEW) (M)
           => 패킷 필터링을 사용하고자한다면 선택한다.
             * REJECT target support (NEW) (M)
              => 거부 필터링 규칙이 들어오는 패킷에 응답하여 ICMP에러 메시지가 말없이 없어지지
                않고 나타나도록 지시하고자 할 때 사용한다.
          - Full NAT (NEW) (M)
           => 마스커레이딩, 포트포워딩, 또는 다른 형태의 완전한 네트워크 주소 포트변환기능을
             허용한다. 이는 iptables에서 'nat'테이블로 조절된다.
             * MASQUERADE target support (NEW) (M)
              => 마스커레이딩 환경에서 사용한다.
             * REDIRECT target support (NEW) (M)
              => 외부에서 들어오는 패킷들을 내부의 인터페이스 주소로 리다이렉트시키고자 할 때
               사용한다. 특히 포트 포워딩을 하고자 할 때 사용한다.
             * NAT of local connections (READ HELP) (NEW)
              => 로컬에서 접속하는 NAT를 가능하게 해주는 옵션이다.
          - Packet mangling (NEW) (M)
           => iptables에 패킷이 어떻게 라우트되는가에 영향을 주는 다양한 패킷 변환에 이용되는
             'mangle'테이블에 부여한다.
             * TOS target support (NEW) (M)
              => 'TOS'타겟을 부여하여 라우팅이 이뤄지기 전에 아이피 패킷에 대한 서비스 필드
                유형을 바꾸는 'mangle'테이블 내에서 생성할 수 있도록 해준다.
             * MARK target support (NEW) (M)
              => 'MARK'타겟을 부여하여 'mangle'테이블 내에서 라우팅이 이뤄지기 전에 패킷과
                연관된 넷필터 마크 필드를 변경하는 규칙을 만들 수 있다.
          - LOG target support (NEW) (M)
           => iptables내에서 패킷 헤더를 syslog에 기록하도록 하는 규칙을 만들 수 있도록 'LOG'
             타겟을 제공한다.
          - TCPMSS target support (NEW) (M)
           => TCP SYN패킷의 MSS값을 바꿀 수 있도록 해주고, 그러한 접속시 최대 크기를 조절할 수
             있도록 해주는 'TCPMSS'타겟을 사용하고자 할 때 쓰는 옵션이다.
          - ARP tables support (NEW) (M)
           => ARP 테이블 지원여부이다.
         * ipchains (2.2-style) support (NEW) (Y)
          => 커널 2.2대에서 사용하는 방화벽툴인 ipchains를 사용할 때 선택한다.
         * ipfwadm (2.0-style) support (NEW) (N)
          => 커널 2.0대에서 사용하는 방화벽툴인 ipfwadm를 사용할 때 선택한다.
        802.1Q VLAN Support (N)
         => 802.1Q VLAN 사용할 대 설정한다.
        The IPX protocol (N)
         => 노벨 네트워크 프로토콜을 사용할 때 설정한다.
        Applet!alk protocol support (N)
         => 애플 컴퓨터를 위한 네트워크 프로토콜을 사용할 때 설정한다.
        DECnet Support (N)
         => DEC사에서 개발한 프로토콜을 사용할 때 설정한다.
        802.1d Ethernet Bridging (N)
         => 리눅스 박스에서 하나의 이더넷을 브릿지로 하여 이더넷 네트워크를 연결하고자 할 때
           사용하는 옵션으로 이 기능이 필요할 때만 선택하도록 한다.
        QoS and/or fair queueing (N)
         => 패킷 스케줄에 따라 패킷을 제어할 때 사용되는 옵션으로 일반적으로 선택하지 않는다.
        Network testing   ---> (N)
         => Network 테스트관련 설정이다. 선택하지 않도록 한다.
   11) Telephony Support : 음성전화카드를 사용할 때만 선택한다. 보이스 모뎀과는 상관없으므로
                          선택하지 않는다. (N)
   12) ATA/IDE/MFM/RLL support
     Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (Y)
      => EIDE 하드디스크 및 CD-ROM등을 사용하기 위해서는 반드시 이 옵션을 선택해야 한다.
      * Use old disk-only driver on primary interface (N)
       => 선택이 필요없다.
      * Include IDE/ATA-2 DISK support (Y)
       => IDE 하드디스크 사용시 꼭 선택한다.
       - Use multi-mode by default : 멀티모드관련 부분으로 보통 아래와 같이 메시지가 나온다면
                                    꼭 선택해야 한다. (Y)
         hda: set_multimode: status=0x51 { DriveReady SeekComplete Error }
         hda: set_multimode: error=0x04 { DriveStatusError }
      * Auto-Geometry Resizing support (N)
       => HDD의 Geometry 조정 지원 여부를 지정한다.
      * PCMCIA IDE support (N)
       => PCMCIA 방식의 IDE를 사용할 경우 선택한다.
      * Include IDE/ATAPI CDROM support (Y)
       => EIDE CD-ROM을 사용할 경우 선택한다.
      * Include IDE/ATAPI TAPE support (N)
       => 백업테이프를 사용할 경우 선택한다.
      * Include IDE/ATAPI FLOPPY support (N)
       => IDE로 연결하여 사용하는 플로피 장치를 사용할 경우에 선택한다.
      * SCSI emulation support (M)
       => IDE CD-ROM과 같이 IDE주변기기를 SCSI장치처럼 사용할 수 있도록 에뮬레이트해주는 옵션
         으로 CD-RW을 사용한다면 설정해야 한다.
      * IDE Taskfile Access (N)
       => 선택하지 않는다.
      * CMD640 chipset bugfix/support (N)
       => CMD 640칩을 탑재한 마더보드를 사용할 경우 심각한 데이터를 상실시킬 수 있는 결함이
         있을 때 이러한 문제를 해결할 때 사용한다.
      * ISA-PNP EIDE support (N)
       => ISA타입 EIDE장치를 사용할 때 선택한다. 요즘은 잘 사용하지 않는다.
      PCI IDE chipset support
      * Generic PCI IDE chipset support (Y)
       => 마더보드의 IDE칩에 의해서 DMA기능을 사용하기 위해서는 이 기능을 선택한다. DMA33이상
         의 하드디스크를 사용하면 꼭 선택한다.
        - Sharing PCI IDE interrupts support
         => IDE칩이 다른 주변기기와 같은 IRQ를 사용할 수 있도록 허가할 때 사용하는 옵션이다.
           선택하도록 한다.(Y)
        - Generic PCI bus-master DMA support
         => DMA를 지원하는 하드디스크를 사용할 경우 선택하면 CPU의 부하를 줄일 수 있다.(Y)
        - Boot off-board chipsets first support
         => 마더보드에 내장되어 있는 IDE커넥터 외에 PCI카드 커넥터를 사용하는 경우 PCI카드의
           커넥터 인터페이스 ide0, ide1로 부여하는 옵션이다. ATA100 Controller Card등을 쓴다면
           이 옵션을 선택하고 그렇지 않은 경우에는 선택하지 않는다.(N)
        - Enable DMA only for disks
         => DMA 기능을 사용여부를 지정하는 옵션이다. (Y)
        - Pacific Digital ADMA-100 basic support (NEW) (N)
        - AEC62XX chipset support (N)
        - ALI M15x3 chipset suppor (N)
        - AMD Viper support (N)
        - CMD64X chipset support (N)
        - CY82C693 chipset support (N)
        - Cyrix CS5530 MediaGX chipset support (N)
        - HPT34X chipset support (N)
        - HPT366 chipset support (N)
        - Intel PIIXn chipsets support (N)
        - PIIXn Tuning support (N)
         => 인텔 칩셋 보드를 사용하는 경우에 선택한다. 보통 440BX, 440LX칩을 사용한 보드를
           지원하는 옵션이다.
        - NS87415 chipset support (N)
        - PROMISE PDC202{46|62|65|67} support (NEW) (N)
        - PROMISE PDC202{68|69|70|71|75|76|77} support (NEW) (N)
        - RZ1000 chipset bugfix/support (N)
        - SCx200 chipset support (NEW) (N)
        - ServerWorks OSB4/CSB5/CSB6 chipsets support (N)
        - SiS5513 chipset support (N)
        - SLC90E66 chipset support (N)
        - Tekram TRM290 chipset support (N)
        - VIA82CXXX chipset support (N)
      * Other IDE chipset support (N)
       => 그 외 기타 IDE관련 칩셋 지원이다. 해당 칩셋을 사용하는 보드라면 선택하도록 한다.
       - Generic 4 drives/port support (NEW) (N)
       - ALI M14xx support (NEW) (N)
       - DTC-2278 support (NEW) (N)
       - Holtek HT6560B support (NEW) (N)
       - QDI QD65xx support (NEW) (N)
       - UMC-8672 support (NEW) (N)
     Old hard disk (MFM/RLL/IDE) driver (NEW) (N)
      => 예전에 사용하던 MFM방식의 하드디스크를 장착했을 경우 사용한다. 현재는 거의 사용하지
        않으므로 선택할 필요가 없다.
     IGNORE word93 Validation BITS (N)
   13) SCSI support : 스카시장치를 사용하고자 하면 선택해야 한다. 또한 E-IDE CD-RW을 사용하기
                     위해서는  SCSI generic support를 사용해야 한다. 이 때 SCSI CD-ROM support
                     는 선택할 필요가 없다. (N)
   14) Fusion MPT device support : LSI 로직의 관련 장치를 사용할 때 선택한다. (N)
   15) I2O device support : Intelligent Input/Output(I20)은 전용 I/O프로세서를 가지고 있어 CPU
                           가 I/O처리를 잃지 않도록 해서 빠른 입출력 속도를 내고자 할 때 사용
                           한다. 이러한 아키텍쳐를 가진 인터페이스 어탭터 카드를 가지고 있는
                           경우에만 선택하도록 한다. (N)
   16) Network device support
      ㄱ. 설명: 네트워크장치를 선택하는 옵션이다. 맞는 장치를 선택하면 된다.
      ㄴ. 메뉴
         Ethernet (10 or 100Mbit) : 보통 사용하는 이더넷카드를 설정하는 옵션이다.
          * 정리: 일반적으로 사용하는 이더넷카드정리
           3COM cards : 유명한 3COM사의 네트워크카드이다.
           Other ISA cards : 예전에 사용하던 10MBPS용 이더넷카드를 선택할 수 있다. 예전의 ISA
                            랜카드를 사용하려면 NE2000/NE1000 support (NEW) 를 선택한다.
          * 참고: 하나로통신이나 한국통신의 ADSL 외장형모뎀을 사용하기 위해서는 PPP모듈에 대
                 해서 설정을 해주어야 한다. PPP(Point-to-Point Protocol) support항목에서 2가지
                 를 선택한다.
             PPP support for async serial ports (NEW)
             PPP support for sync tty ports (NEW)
   17) Amateur Radio support: 아마추어 햄통신을 할 경우에 선택한다. (N)
   18) IrDA (infrared) support: IrDA(무선 적외선 포트)장치가 있다면 선택한다. 이 기능을 사용
                               하려면 irmanager와 irattach와 같은 유틸리티가 필요하다. (N)
   19) ISDN subsystem: ISDN을 사용할 경우에만 선택한다. 현재는 거의 서비스를 하지 않고 있다.
   20) Old CD-ROM drivers (not SCSI, not IDE) : 2배속과 같은 구형의 CD-ROM을 사용할 때 선택
                                               한다. (N)
   21) Input core support: USB방식의 키보드와 마우스를 사용할 때 선택해야 한다. (Y or M)
   22) Character devices
      Virtual terminal: 리눅스에서 지원하는 가상 콘솔을 사용하기 위해서는 이 옵션을 선택해야
                       한다. CTRL+ALT+F1~F6키를 사용하는 콘솔이다.
       * Support for console on virtual terminal (Y)
        => 시스템콘솔은 모든 커널메시지와 경고메시지를 전달받고, 싱글 유저 모드로 로그인을
          할 수 있도록 해주는 디바이스로 이 옵션을 선택해 줌으로써 가상 콘솔을 "console=tty4"
          와 같은 명령을 사용하여 시스템 콘솔을 사용할 수 있다.
      Standard/generic (8250/16550 and compatible UARTs) serial support (N)
       => 시리얼포트에 장착된 디바이스(모뎀, 마우스)를 사용하고자 할 때 사용한다.
       * Support for console on serial port (N)
        => 시리얼 콘솔로 부팅할 경우처럼 시리얼포트를 시스템 콘솔로 사용할 수 있다.
      Non-standard serial port support (N)
       => 표준 시리얼포트가 아닌 멀티 포트를 지원할 때 사용한다.
      Unix98 PTY support (Y)
       => 가상 접속 터미널 디바이스의 /dev/pts파일 시스템 형태를 사용하고자할 때 사용하는 옵
         션으로 선택한다.
      (256) Maximum number of Unix98 PTYs in use (0-2048) (256)
       => 동시에 가상 터미널로 접속 가능한 디바이스 개수를 설정한다. 동시 접속자 수를 늘리려면
        값을 증가시키면 된다.
      I2C support (N)
       => I-Square-C라고 하면 많은 마이크로 컨트롤러에서 사용되는 느린 직렬버스 프로토콜로 필립
         스에서 개발된 것으로 하드웨어 센서 기능과 비디오지원시 이 기능을 필요로 한다.
      Mice (Y)
       => 시리얼 마우스가 아닌 PS/2마우스를 설정할 때 사용된다.
      Joysticks (N)
       => 조이스틱을 설정할 때 사용한다.
      QIC-02 tape support (N)
       => 비스카시 테입 드라이브를 가지고 있다면 선택한다.
      Watchdog Cards (N)
       => 시스템이 잠금 상태로 서비스를 제공할 수 없는 상태일 경우 시스템을 다시 시작할 수
        있도록 해주는 기능이다. 일반적으로 선택하지 않는다.
      Intel i8x0 Random Number Generator support (N)
       => 인텔 i8xx기반 마더보드에 있는 난수 발생기를 커널 차원에서 지원해주는 드라이버이다.
      /dev/nvram support (N)
       => 일반 PC바이오스라고 하고, 아타리에서는 NVRAM이라고 부르는데, 하드 디스크에 두기는
         위험한 데이터 또는 정전되었을 때 사라지면 안되는 데이터들을 저장하는데 사용된다.
      Enhanced Real Time Clock Support (Y)
       => PC에 내장된 실시간 클럭을 액세스 할 수 있도록 해주는 기능이다. 이러한 클럭정보는
         /proc/rtc파일을 통하여 볼 수 있으며, 멀티 프로세스를 사용하는 시스템이라면 이 옵션
         을 선택하도록 한다.
      Double Talk PC internal speech card support (N)
       => RC system사에 만든 음성합성장치인 Double Talk PC를 위한 기능이다.
      Ftape, the floppy tape device driver (N)
       => 플로피디스크 컨트롤러에 연결된 테이프 드라이브가 있다면 사용한다.
      /dev/agpgart (AGP Support) (M)
       => agpgart모듈은 3D 가속 비디오카드의 AGP기능을 사용할 수 있도록 해준다. 커널에 이
         모듈이 로딩되어 비디오 카드나 특수한 값을 전송하여 GART레지스터에 프로그래밍할 수
         있도록 해준다. AGP비디오 카드를 가지고 있어 이 기능을 사용하고자 한다면 모듈로 선
         택하고 자신의 마더보드에 있는 AGP지원 칩을 선택한다.
      Direct Rendering Manager (XFree86 DRI support)
       => XFree86 4.0이상부터 지원되는 DRI(Direct Rendering Infrastructure)를 커널에서 사용할
         수 있도록 해주는 기능이다. 이 모듈은 동기화 및 보안 그리고 DMA전송을 지원한다. 커널
         2.2대부터 지원해 즈는 비디오 카드 칩으로는 3DFX 부두계열, GMX200, ATI RAGE128, I810,
         MATROX의 G200/G400등이 있다.
   23) Multimedia devices: 멀티미디어관련 장치를 설정하는 부분이다. (N)
   24) File systems
     ㄱ. 설명: 파일시스템 여부를 설정하는 단계로 필요없는 파일시스템에 대해서는 설정하지
               않도록 한다.
     ㄴ. 메뉴
        Quota support (Y)
         => 사용자들에게 계정 용량을 제한하기 위하여 디스크 쿼타를 설정한다면 선택해야 한다.
        Kernel automounter support (N)
        Kernel automounter version 4 support (also supports v3) (Y)
         => 원격 호스트의 파일 시스템들은 유저들의 요구에 따라 자동으로 마운트해주는 기능으로
           NFS서버를 마운트하고자 한다면 선택해야 한다.
        Reiserfs support (Y)
         => 저널링 파일시스템(Journalling Filesystem)인 reiserfs파일시스템은 정전 또는 시스템
           장애로 인하여 생긴 파일시스템 문제를 리눅스 표준 파일 시스템인 ext2와 같이 시스템을
           체크하지 않고, 인덱스에 대한 로그를 기록하여 손상된 파일 시스템을 복구하는 파일시스
           템으로 이 파일시스템을 사용한다면 선택한다.
        DOS FAT fs support (Y)
         => 윈도우 95/98을 사용하여 이러한 운영체제의 파일 시스템을 리눅스에서 사용하고자 할
           때 필요한 옵션이다.
        Virtual memory file system support (former shm fs) (N)
         => 가상메모리에 있는 모든 파일들을 보존해주는 파일시스템을 지원하는 옵션이다. 이 기능
           을 사용하려면 /etc/fstab에 다음과 같이 설정해야 한다.
           tmpfs    /dev/shm    tmpfs    defaults   0 0
        Simple RAM-based file system support (N)
         => RAMfs는 램내에 있는 모든 파일들을 보존해주는 파일 시스템으로 읽고 쓰기가 가능한
           파일시스템이다. 이 기능을 사용한다면 /etc/fstab에 다음을 추가해야 한다.
           ramfs    /dev/ramfs    ramfs    defaults   0 0
        ISO 9660 CDROM file system support (Y)
         => CD-ROM을 마운트하기 위해서는 반드시 선택해야 한다.
          * Microsoft Joliet CDROM extensions
           => 마이크로소프트사의 CD-ROM형식이다.
        NTFS file system support (read only) (Y)
         => 리눅스와 Microsoft NT를 같이 사용한다면 선택해야 한다.
        /proc file system support (Y)
         => 커널과 프로세스 정보들을 가지는 /proc파일시스템 지원을 위한 옵션이다 .반드시 선택
          해야 한다.
        /dev/pts file system for Unix98 PTYs (Y)
         => 가상 터미널 포트로 /dev/pts를 사용할 수 있도록 해주는 옵션으로 반드시 선택해야
           한다.
        Second extended fs support (Y)
         => 리눅스 파일시스템인 ext2를 지원하는 옵션이므로 반드시 선택해야 한다.
        Network File Systems (Y)
         => 삼바와 NFS같은 네트워크 파일시스템을 지원하는 옵션이다.
         * NFS file system support (Y)
          => NFS 클라이언트로 사용하게 되면 필요하다.
         * NFS server support (Y)
          => NFS 서버로 사용시에 필요하다.
         * SMB file system support (to mount Windows shares etc.) (Y)
          => 삼바 윈도우 서버를 마운트할 때 필요하다. 삼바서버를 운영시에는 필요가 없다.
        Partition Types
          => 확장된 형태의 파티션 타입을 선택할 때 쓴다. 지정하지 않는다.
        Native Language Support
          => 추가로 사용할 언어를 지정할 때 쓴다.
            "Korean charset (CP949, EUC-KR) (NEW)" 찾아 선택하도록 한다.
   25) Console drivers
      ㄱ. 설명: 콘솔 드라이버에서 유용한 옵션으로 프레임버퍼(Frame Buffer)의 지원으로 커널
               부팅시 펭귄 그림을 화면 좌측 상단에 띄울 수 있고, 커널 메시지를 해상도에 따
               라 조절할 수 있도록 해준다.
      ㄴ. 메뉴
         VGA text console (Y)
         Video mode selection support (Y)
          => LILO에 "vga=옵션"을 설정하여 부팅시 VGA해상도를 선택할 수 있다.
            Color    640x480   800x600   1024x768   1280x1024   1600x1200
             8비트    0x301     0x303     0x305       0x317      0x31D
            16비트    0x311     0x314     0x317       0x31A      0x31E
            24비트    0x312     0x315     0x318       0x31B      0x31F
   26) Sound : 사운드 카드를 설정할 때 한다. (N)
   27) USB support
     ㄱ. 설명: UBS장치를 설정해 주는 옵션이다. 이 항목에서 USB마우스, USB키보드,스캐너,프린터
              화상카메라등을 설정할 수 있다.
     ㄴ. 메뉴
        Support for USB (Y)
         => 장치를 사용하려면 반드시 선택해야 한다.
        UHCI Alternate Driver (JE) support (Y)
         => 현재마더보드에서 사용하는 방식으로 꼭 선택해야 한다.
        Preliminary USB device filesystem (Y)
         => USB장치관련 파일시스템을 지원하도록 해준다 .선택하도록 한다.
        USB Human Interface Device (full HID) support (Y)
         => USB장치들을 커널에 탑재되도록 하거나 모듈화 해준다. 선택하도록 한다.
   28) Bluetooth support (N)
      => 블루투스를 사용하면 선택하도록 한다.
   29) Kernel hacking
      Kernel debugging (Y)
       => 커널 디버깅중에 시스템이 다운되었을 경우 Magic키를 사용하여 시스템을 제어할 수
         있도록 해준다. 선택하도록 한다. Magic키를 사용하는 방법은 sysRq+Alt+[명령키]를 조합
         하여 누른다. 대표적인 명령키로는 K는 현재의 가상 콘솔의 모든 프로그램을 죽이고자
         할 때 사용하며, B키는 하드디스크를 언마운트하지 않은 상태에서 바로 재부팅하고자 할 때
         사용한다. 그 외의 자세한 옵션은 /usr/src/linux/Documentation/sysrq.txt에 있다.
   30) Library routines (N)
      => zlib관련 루틴사용여부이다. 선택하지 않는다.
(4) 저장하고 빠져나오기: 커널옵션을 설정한 후에 EXIT버튼을 눌러 저장하고 빠져나온다.

7. 의존성검사 및 클리닝
(1) 커널 의존성 검사
   1) 설명: 커널의 이미지를 생성하기에 앞서 필요한 라이브러리나 헤더 파일 등이 시스템에 제대
           로 있는지의 의존성을 확인한다.
   2) 사용법
     make dep
(2) 크리닝
   1) 설명: 기존의 소스로 컴파일을 한번이라도 한 경우에 생겼을 오브젝트 파일이나 임시 파일,
           커널 이미지등의 잔여물을 없애기 위한 것으로 소스 파일이나 rpm파일을 새로 가져와서
           처음 할 경우에는 안 해도 별 상관없지만, 습관처럼 사용해도 된다.
   2) 사용법
     make clean

8. 커널이미지 만들기(컴파일단계)
(1) 설명: 컴파일 과정은 make bzImage명령을 실행하여 수행한다. 이 명령을 수행하게 되면 커널의
          이미지는 /usr/src/linux/arch/i386/boot디렉토리에 bzImage로 생성된다. 그러나 이렇게
          생성된 커널이미지는 /boot디렉토리로 자동 이동되지 않으므로 make install명령을 실행
          하여 /boot/vmlinuz-커널 버전파일로 복사하고, 바뀐 커널 이미지로 정보를 변경해야
          한다.
(2) 커널이미지의 종류
   1) make zImage: 커널의 이미지를 GNU zip형식으로 압축하여 만든다. 커널 사이즈가 크기않은
                  시절에 많이 사용하였다. 요즘에도 사용할 수 있지만 현재의 커널들이 상당히
                  많은 기능과 드라이버를 제공하기 때문에 이 컴파일 명령으로 만들어진 커널이
                  지는 크기가 너무 커져 커널에 올리기가 어렵다.
   2) make bzImage: 커널의 이미지를 압축률이 높은 .bz형식으로 압축하여 만든다. make zImage와
                   같지만, 큰 커널이미지를 만들 때 유용하다. 일반적으로 사용한다.
   3) make zlilo: 커널의 이미지를 만든 후에 LILO에 등록한다.
   4) make zdisk: 커널의 이미지를 만든 후에 플로피디스크에 복사
   5) make bzlilo: make bzImage와 lilo명령을 한번에 수행하는 결과를 보이게 된다. 따라서 make
                  bzImage에 의해서 생성된 커널이미지를 /boot디렉토리로 복사하고 바뀐 커널이미
                  지로 리로정보를 갱신하도록 lilo명령을 실행하도록 하는 일련의 컴파일명령이다.
(3) make install : 이 명령을 수행하기 위해서는 먼저 /sbin/installkernel파일이 존재해야 한다.
                   이 명령을 수행하면 커널이미지를 생성하고 생성한 이미지를 /boot디렉토리에
                   커널이미지를 복사하고, lilo명령을 수행하여 lilo정보를 변경하면 된다.
(4) 사용예
   make bzImage
   make install

9. 커널모듈 만들기(make modules)
(1) 설명: 커널 모듈은 make modules명령에 의해서 만들어지며 make modules_install명령에 의해
          /lib/modules/커널버전 디렉토리로 자동 복사하게 된다. 그리고 depmod -a 명령을 실행
          하여 컴파일된 모듈에게 의존성을 부여하게 된다. 이렇게 생긴 모듈은 커널에 적재되는
          것이 아니므로 커널에 적재하려면 modprobe 나 insmod명령으로 해당 모듈 드라이버를
          띄워야 한다.
(2) 사용예
   make modules
   make modules_install
   depmod -a

10. Boot Loader의 환경설정파일 편집
(1) lilo인 경우
   1) 설명: 커널 컴파일후에는 새로운 커널로 부트 로더 정보를 갱신해 주어야 하는데, 컴파일된
           커널 이미지의 경로를 /etc/lilo.conf에서 커널 이미지부분을 추가하거나 수정해야 한다.
   2) 사용예
     boot=/dev/hda
     map=/boot/map
     install=/boot/boot.b
     prompt
     timeout=50
     message=/boot/message
     lba32
     default=linux

     image=/boot/vmlinuz-2.4.2-3
       label=linux
       read-only
       root=/dev/hda7

     image=/boot/vmlinuz-2.4.18
       label=linux_new
       read-only
       root=/dev/hda7
        => 이렇게 새로운 커널 이미지를 리로설정파일에 추가하면 컴파일이 잘못되어 커널이미지에
          이상이 있어 부팅되지 못할 경우 기존의 커널이미지로 부팅하여 복구할 수 있도록 하기
          위해서이다.
(2) grub인 경우
   1) 설명: grub.conf에 커널이미지부분을 추가한다.
   2) 사용예
     default=0
     timeout=10
     splashimage=(hd0,0)/grub/splash.xpm.gz
     title Red Hat Linux (2.4.20-8)
             root (hd0,0)
             kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
             initrd /initrd-2.4.20-8.img

     title Red Hat Linux (2.4.21)
             root (hd0,0)
             kernel /vmlinuz-2.4.21
             initrd /initrd-2.4.21.img           // mkinitrd 명령으로 생성해야 한다.
(3) 참고: mkinitrd 명령을 통한 초기화 램디스크 이미지 생성
   1) 설명: 레드햇 8.0 버전부터는 본격적으로 ext3파일시스템을 사용한다. ext3 파일시스템에서는
           부팅시 필요한 모듈과 이미지를 초기화 램디스크 이미지로 부팅시에 부트로더가 읽어들이
           도록 되어 있다. 따라서 해당 이미지를 만들어 줘야 한다.
   2) 사용법
     mkinitrd /boot/initrd-커널버전.img 커널버전
   3) 사용예
     mkinitrd /boot/initrd-2.4.21.img 2.4.21

출처 : 대전국제IT교육센터 정성재 강사

 

1. 모듈(Module)이란?
모듈의 사전적인 의미는 프로그램이나 하드웨어 기능단위, 교환가능한 구성부분, 그리고, 우주선의
일부를 이루지만 독립적으로 행동할 수 있는 작은 소선을 뜻한다. 리눅스에서의 모듈은 우주선의 경
우와 비슷하다. 우주선의 모체는 커널이미지이고, 작은 소선이 커널 모듈이다. 커널 모듈이 필요할
때는 커널 이미지에 합류하고 필요하지 않을 때에는 커널에서 빠져 나와 모듈 형태로 존재하므로 시
스템의 메모리를 절약할 수 있다. 따라서, 보통 모듈이 로드되었다는 것은 커널 밖에 존재하던 해당
드라이버가 커널의 일부로 되었다는 뜻이다. 언로드하면 다시 커널과 별도로 존재한다.

2. 모듈관리
(1) 개요: 리눅스 시스템에서 시스템장치를 제어하는 코드는 컴파일되어 커널에 포함될 수 있다.
          그런데 커널은 대부분의 시스템장치에 대한 기능을 이미 내장하고 있으므로 모노리딕(mono
          lithic)이라 하며 커널이 자체에 모든 시스템 하드웨어를 관리한다는 의미이다. 모노리딕
          커널은 그다지 융통성이 뛰어나지 못해 시스템에 새로운 장치가 추가될 경우 커널을 새롭
          게 만들어야 할 필요가 있다. 또한 모노리딕 커널은 실제 시스템에 장착되지 않은 하드웨
          어 드라이버까지 포함하고 있으므로 지나치게 비대해질 가능성이 있다. 대신 대부분의
          사용자들은 모듈형(modular)커널을 사용하는데 이것은 커널이 필요한 경우에만 장치 드라
          이버를 적재하는 방식이다 모듈을 이용하면 드라이버를 업그레이드하는 편리한 방식을
          통해 시스템이 운영중에도 하드웨어 설정을 변경할 수 있다.
(2) 모듈파일
   1) 설명: 리눅스 커널 모듈은 C컴파일러로 만들어진 오브젝트(.o)이지만 실행파일(이 경우 커널
           실행파일)안에 링크되어 들어가지 않는다. 대부분의 모듈은 커널과 함께 컴파일되어
           배포된다. 모듈은 커널과 매우 밀접한 관계가 있으므로 여러 커널이 설치될 경우 각
           커널에 맞는 독립된 모듈의 집합이 설치된다. 이것은 모듈이 다른 버전 커널에 삽입을
           막아준다.
   2) 모듈의 위치: '모듈은 /lib/modules/커널버전' 디렉토리에 위치한다. 여기서 커널버전은
                  uname -r의 실행 결과 나오는 문자열이 된다. 또한 이 디렉토리의 하위디렉토리
                  로 아래와 같은 디렉토리가 생성되면서 관련 모듈들이 위치한다.
     ㄱ. block: RAID 제어기, IDE 테이프 드라이버와 같은 블록장치를 위한 모듈
     ㄴ. cdrom: 비표준 CD-ROM장치를 위한 장치 드라이버
     ㄷ. fs: MS도스와 같이 파일시스템을 위한 드라이버(msdos.o)
     ㄹ. ipv4: IP 매스커레이딩(masquerading)과 같이 IP처리에 관련된 모듈
     ㅁ. misc: 다른 분류에 속하지 않는 것으로 이 디렉토리의 최상위는 비어 있다.
     ㅂ. net: 네트워크 인터페이스 드라이버 모듈
     ㅅ. scsi: SCSI 컨트롤러 드라이버 모듈
     ㅇ. video: 비디오 어댑터을 위한 특별한 드라이버 모듈
    (참고) 2.4 커널버전인 경우에는 /lib/modules/2.4.2-3/kernel/drivers 에 위치한다.
(3) 모듈의 사용: 모듈이 로드되면 동작중인 커널에 동적으로 링크되어 사용한다. 대부분의 리눅스
                 커널 모듈은 자동으로 처리된다. 그러나 종종 필요한 모듈을 직접 처리해야 하는
                 경우도 있으며 스크립트에서도 모듈을 처리하는 부분을 볼수도 있다. 예를 들면
                 특정 드라이버에 문제가 있을 경우 새 버전의 드라이버 소스 코드를 구해 컴파일
                 한 후 새로운 모듈을 동작중인 커널에 넣을 필요가 있다. 이 경우에는 모듈관련
                 명령어를 사용해야 한다.

3. 모듈관련명령어
(1) lsmod
   1) 설명: 적재된 각각의 모듈명, 크기, 사용횟수 다른 참조 모듈 등의 정보를 출력한다. 이 명령
           의 실행결과는 /proc/modules파일의 내용과 같다.
   2) 사용법
     lsmod
   3) 사용예
     [root@www /root]# lsmod
     Module                  Size  Used by
     autofs                 11296   1  (autoclean)
     8139too                16512   1  (autoclean)
     3c59x                  25376   1  (autoclean)
     ipchains               39360   0  (unused)
     usb-uhci               20752   0  (unused)
     usbcore                49728   1  [usb-uhci]
(2) insmod
   1) 설명: 동작중인 커널에 모듈을 적재한다. 모듈은 자동으로 검색되고 삽입된다. 그러나 의존성
           이 있는 모듈인 경우에는 적재를 하지 못한다.
   2) 사용법
     insmod [option] 모듈
   3) option
     -s : 실행결과를 터미널 대신 syslog에 기록한다.
     -v : 메시지를 자세히 보여준다.
   4) 사용예
     [root@www scsi]# insmod ide-scsi.o
(3) modprobe
   1) 설명: insmod와 마찬가지로 modprobe도 모듈을 적재할 때 사용된다. 그러나 modprobe는 단일
           모듈, 의존성이 있는 여러 모듈, 특정 디렉토리의 모든 모듈들을 적재할 수 있다. -r
           옵션을 사용하면 모듈을 제거할 때에도 사용할 수 있다. 또한 모듈에 '기호=값'형식을
           이용하여 매개변수를 전달할 수 있다. 만일 모듈이 다른 모듈에 의존하고 있을 경우
           필요한 모듈을 먼저 적재한다. 이 명령어는 최상위 모듈디렉토리에 존재하는 modules.dep
           파일을 참고해 모듈간의 의존성을 해결한다.
   2) 사용법
     modprobe [option] 모듈 [기호=값]
   3) option
     -l : 사용가능한 모든 모듈을 보여준다.
     -r : rmmod와 같이 모듈을 제거한다. 여러 모듈을 한꺼번에 지정할 수 있다. 또한 의존성이
         걸려 있는 모듈들도 찾아 자동으로 제거한다.
     -c : 기본값과 /etc/modules.conf(배포판에 따라 /etc/conf.modules)에 정의된 지시자를 포함
         해 완전한 모듈설정을 보여준다.
   4) 사용예
     ㄱ. [root@www net]# modprobe -l
         /lib/modules/2.4.18/kernel/drivers/block/loop.o
         /lib/modules/2.4.18/kernel/drivers/md/lvm-mod.o
         /lib/modules/2.4.18/kernel/drivers/net/3c501.o
         /lib/modules/2.4.18/kernel/drivers/net/3c503.o
           => 사용가능한 모든 모듈을 보여준다.
     ㄴ. [root@www net]# modprobe ide-scsi
           => ide-scsi 라는 모듈을 올린다.
     ㄷ. [root@www net]# modprobe -r ide-scsi
           => ide-scsi라는 모듈을 제거한다.
     ㄹ. [root@www net]# modprobe -c
           => 모듈설정들을 보여준다.
(4) rmmod
   1) 설명: 모듈을 커널에서 제거하는 명령이다. 의존성이 있는 모듈은 제거하지 못한다.
   2) 사용법
     rmmod [option] 모듈
   3) option
     -a : 사용되지 않는 모든 모듈을 제거한다.
   4) 사용예
     [root@www /etc]# rmmod ide-scsi
(5) modinfo
   1) 설명: 모듈 오브젝트 파일의 모듈 정보를 보여준다. 어떤 모듈은 아무 정보도 없으며, 어떤
           모듈은 한 행 정도의 간단한 설명이 있고 몇몇은 비교적 상세하게 설명하고 있다.
   2) 사용법
     modinfo option 모듈_오브젝트_파일
   3) option
     -a : 모듈 제작자를 표시한다.
     -d : 모듈에 대한 설명을 보여준다.
     -p : 모듈이 지원하는 매개변수를 보여준다.
   4) 사용예
     ㄱ. [root@www net]# modinfo -d 3c59x.o
         3Com 3c59x/3c9xx ethernet driver LK1.1.16 19 July 2001
           => 모듈에 대한 설명을 보여준다.
     ㄴ. [root@www net]# modinfo -p 3c59x.o
           => 모듈이 지원하는 매개변수를 보여준다.

4. 모듈 사용하기
(1)모듈 올리기
    1) insmod 모듈이름
      예) insmod ne io=0x300 irq=3 (참고로 '*' 가 아니고 그냥 알파벳 'x'임.)
    2) modprobe 모듈이름
      예) modprobe ne
    *한꺼번에 할 경우
      modprobe ne io=0x300 irq=3
   (참고) insmod와 modprobe명령 모두 모듈을 적재하지만 insmod명령을 사용하면 의존성문제때문에
         모듈이 적재되지 않는 경우도 있고, 적재되더라도 정상적으로 동작하지 않을 수도 있다. 따
         라서, modprobe 명령을 이용하는 것이 좋다.
(2)모듈의 확인 : lsmod
    *사용예
     [root@house /root]# lsmod
     Module                  Size  Used by
     autofs                  9316   1  (autoclean)
     lockd                  31496   1  (autoclean)
     sunrpc                 53028   1  (autoclean) [lockd]
     ne                      6672   1  (autoclean)
     8390                    6076   0  (autoclean) [ne]
     eepro100               15924   1  (autoclean)
     aic7xxx               135768   2
   (설명) 위에서는 ne 라는 모듈과 다른 여러 모듈이 사용중임을 알 수 있다. 이 예에서는 ne(8390
         과 의존성이 있는 모듈)와 eepro100이 랜카드 모듈이고 두 개 모두 used항목이 1이기 때문
         에 현재 사용중임을 알 수 있다.
(3)모듈 내리기(삭제)
    rmmod 모듈이름
   (참고) 모듈이 현재 사용중이라면 모듈의 삭제가 안된다. 이 경우에는 ifconfig eth0 down등의 명
         령으로 이더넷카드 사용을 중지하고 rmmod명령을 사용해야 한다.
(4)모듈의 관련파일
    1) /boot/module-info : 모듈, 특히 랜카드관련 모듈에 대한 정보를 볼 수 있다. (배포판에 따라
                          또는 2.4대 커널에는 없을 수도 있음)
    2) /etc/modules.conf : 부팅과 동시에 로드되는 모듈들을 알 수 있다. 또한 modprobe과정없이
                          모듈을 올릴 수 있다.
       예) ne io=0x300 irq=3 인 경우
           alias eth1 ne      => alias [인터페이스이름] [모듈]
           options ne io=0x300 irq=3 => options [모듈] io=[설정한 주소] irq=[설정한 irq값]
     (참고) 2.2 커널버전에서는 /etc/conf.modules 이었음
    3) /usr/src/linux/Documentation/networking/net-modules.txt : 리눅스에서 사용가능한 이더넷
                                                                카드에 대한 정보를 담고있다.

5. 모듈관련 설정파일: /etc/modules.conf
(1) 설명: 경우에 따라 하드웨어 인터럽트나 DMA채널값 등의 모듈 인자를 조절해야 하는 경우가
          있다. 또한 모듈을 삽입하거나 제거를 위해 특별한 절차를 따라야 할 때도 있는데, 이
          러한 설정을 하는 파일이 /etc/modules.conf(또는 /etc/conf.modules)이다.
(2) 설정
   1) 주석: 공백행이나 #로 시작되는 행은 무시한다.
   2) keep: path지시자보다 앞서 나오면 기본 경로를 유지하고 지정된 경로를 추가한다.
   3) depfile=절대경로:
     ㄱ. 설명: 모듈 의존성 파일 modules.dep의 기본위치를 변경한다.
     ㄴ. 사용예
        depfile=/lib/modules/2.4.18/modules.dep
   4) path=경로: 이 지시자는 모듈을 검색할 디렉토리를 지정한다.
   5) options 모듈 옵션1=값1 옵션2=값2
     ㄱ. 설명: modules.conf나 modprobe명령행에서 options를 이용해 모듈에 특정한 값을 전달할 수
              있다. 명령행에서 지정한 값이 설정 파일의 값보다 우선 적용된다. 모듈은 .so확장자
              를 제외한 모듈명이다. 옵션은 '옵션=값'의 형식을 이용하며 이 값들은 모듈이 인식할
              수 있는 값이어야 하며 'modinfo -p'를 이용해 확인할 수 있다.
     ㄴ. 사용예
        option ne io=0x300 irq=3
   6) alias
     ㄱ. 설명: 앨리어스를 이용해 특정 모듈에 대한 일반 이름을 부여한다.
     ㄴ. 사용예
        alias eth0 3c59x
   7) pre-install 모듈명령
     ㄱ. 설명: 모듈을 적재하기 전에 지정된 셀 명령을 실행한다. 예를 들어 PCMCIA서비스는 pcmcia
              _core모듈보다 앞서 실행되어야 하는 데 이런 경우에 사용한다.
     ㄴ. 사용예
        pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
   8) install 모듈명령: 기본 모듈 적재 명령 대신 이곳에 지정된 명령을 사용한다.
   9) post-install: 모듈을 적재한 후 지정된 쉘 명령을 실행한다.
   10)pre-remove 모듈: 모듈을 제거 전에 지정 쉘 명령을 실행한다.
   11)remove 모듈: 기본 모듈 제거 명령 대신 이곳에 지정된 명령을 사용한다.
   12)post-remove 모듈: 모듈을 제거한 후 지정 쉘 명령을 실행한다.
(3) /etc/modules.conf의 예
    alias eth0 8139too
    alias eth1 ne    
    options ne io=0x300 irq=3

6. 모듈 의존성파일: modules.dep
(1) 설명: modprobe명령은 모듈 사이의 의존성을 파악해 자동으로 필요한 모듈을 먼저 적재할 수
          있다. 이를 위해 modprobe는 적재해야 할 모듈을 찾기 위해 /lib/modules/커널버전/module
          s.dep를 검색한다.
(2) modules.dep의 형식
   module_name.o: 의존성1 의존성2 .....
(3) modules.dep의 예
   /lib/modules/2.4.18/kernel/net/ipv4/netfilter/ip_conntrack_ftp.o:       /lib/modules/2.4.18
   /kernel/net/ipv4/netfilter/ip_conntrack.o
(4) 참고
    시스템에서 사용할 수 있는 모든 모듈은 modules.dep에 등록되어 있으며 .o확장자를 포함한 전체
   경로를 통해 참조한다. 다른 모듈이 필요로 하지 않은 모듈도 등록되어 있으며 의존성 부분은 비
   어 있다. modprobe에 의해 필요한 모든 모듈이 커널에 우선 적재되고 나면 원래 의도했던 모듈을
   적재한다.
(5) 관련명령어: depmod
    modprobe가 정상으로 동작하기 위해 modules.dep는 항상 적절하게 갱신되어야 한다. 만일 모듈
   간의 의존성이 변경되면서 modules.dep이 수정되지 않는다면 의존성을 가진 필요한 모듈을 찾지
   못해 modprobe가 동작하지 않는다. 따라서 modules.dep는 시스템이 부팅할 때마다 갱신된다.
   이 때 갱신해주는 명령이 'depmod -a'이다. 이러한 작업은 모듈간의 의존성이 변경되었을 경우에
   필요하다. 보통 /etc/rc.d/rc.sysinit파일에 등록되어 부팅시마다 수행한다.

(참고) 모듈로 설치하지 않고 커널 속에 집어넣기
1. 개요
   모듈로 설치하지 않고 커널이미지 안에 네트워크 모듈을 집어넣을 수 있다. 이 방법은 리눅스가
  모듈기능을 지원하기 전에 사용하던 방법으로 커널 컴파일시에 네트워크 카드를 선택하고 컴파일
  한 후에 /etc/lilo.conf에 랜카드 관련 항목을 입력하여 인식시킨다.
2. 방법
  (1) 커널 컴파일시에 네트워크카드를 인식시키고 컴파일한다.
  (2) /etc/lilo.conf파일에 다음과 같은 형식으로 내용을 적는다.
     append="ether=3, 0x300, eth0"
      => ehter는 이더넷을 가리키고, eth0에 IRQ는 3, IO주소는 0x300를 할당한다는 뜻이다.
  (3) /sbin/lilo를 실행하여 lilo.conf파일을 재반영시킨다.
  (4) 시스템을 재부팅하면 랜카드가 인식된다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 프린터데몬 및 관련파일
(1) lpd : Line Printer Daemon의 약자로 리눅스에서 프린트 서비스를 담당하는 데몬이다.
(2) lpr
   1) 설명: 데몬에게 프린트 작업을 요청하는 일을 하는 명령이다.
   2) 사용법
     lpr [option] 파일이름
   3) option
     -b : 배너(banner)나 헤더(header)를 출력하지 않는다.
     -F : 파일의 포맷을 설정한다.
     -K(또는 -#num) : 한 페이지당 몇장씩 출력할 것인지 출력할 문서의 장수를 지정한다.
     -m : 에러 메시지를 메일로 보낸다.
     -P 프린터이름 : 기본 설정된 프린터 이외에 사용할 프린터를 지정한다.
     -Q : 기본값으로 사용하는 큐 이외의 다른 큐를 설정한다.
     -R : 원격 프린트 작업을 보낼 때 원격 계정 이름을 구별하기 위해 사용된다.
     -s : 지정된 파일을 spool 디렉토리로 복사하는 대신 심볼릭링크를 한다.
     -T : 타이틀 페이지에 들어갈 타이틀을 설정한다.
     -w : 페이지의 폭을 정한다.
(3) /etc/printcap
   1) 설명 : 프린터 설정파일로 lpd가 구동할 때 참조하는 파일이다.
   2) 설정예
     hp:\
             :sh:\
             :ml=0:\
             :mx=0:\
             :sd=/var/spool/lpd/hp:\
             :lp=/dev/lp0:\
             :lpd_bounce=true:\
             :if=/usr/share/printconf/mf_wrapper:
      => (설명)
        프린터 설정항목들은 ':'으로 구분되며, 원래는 한 줄로 적어야 하는데, 여러 줄에 걸쳐
       입력되므로 '\'가 붙었다.
        hp: 프린터의 이름을 정의한 것이다. printtool의 Name and Aliases항목에서 설정한다.
        sh: 표기페이지(burst page)를 인쇄하는 설정이다. 버스트페이지란 사용자, 프린트된 파일
           이름, 작업번호, 또는 기타 다른 정보를 인쇄하는 페이지이다.
        sd: spool directory의 약자. 일반적으로 'var/spool/lpd/프린터이름'으로 설정된다.
        mx: 이것은 프린터로 보내어질 파일의 최대크기를 정의한다. #0은 최대 파일 크기를 정의
           하지 않는다.
        lp: 프린트를 위한 장치이름이다.
        if: input filter의 약자. 어떤 파일이든지 프린터로 보내질 때, |(pipeline)을 통하여 if
           명령과 함께 프린트 큐(queue)에 저장된다.
2. 프린트관련 유틸리티
(1) lpq
   1) 설명: 프린트 큐에 있는 작업의 목록을 보여주는 명령이다. 프린터 데몬으로부터 필요한
           정보를 가져온다.
   2) 사용법
     lpq [option]
   3) option
     -P : 특정프린터를 지정한다.
     -a : /etc/printcap파일에 있는 모든 프린터들에 대한 정보를 보여준다.
     -s : 결과를 간략하게(short format) 보여준다.
     -l : 결과를 자세하게(long format) 보여준다.
(2) lprm
   1) 설명: 프린터 큐에 대기중인 작업을 삭제하는 명령으로 프린트를 취소하고 싶은 작업의 번호를
           입력한다. 작업번호를 명시하지 않을 경우, 프린트 요청한 마지막 작업을 삭제한다.
   2) 사용법
     lprm [option]
   3) option
     -P : 특정한 프린트 큐를 지정한다.
     -a : 프린트 큐에 있는 모든 작업을 삭제한다.
     -V : 작업의 진행상황을 보여준다.(verbose)
(3) lpc
   1) 설명: 라인 프린터컨트롤 프로그램으로 프린터나 프린트 큐를 제어한다.
   2) 사용법 : lpc 라고 입력하면 된다.
   3) 사용예
     [root@www /root]# lpc
     lpc>
       => 이 상태에서 커맨드를 입력하면 된다.
   4) command
     disable : 새로운 프린트작업을 못하게 한다.
     enable  : 프린트작업이 가능하게 한다.
     down    : 지정된 프린터를 사용할 수 없게 한다.
     up      : 모든 환경을 활성화시키고, 새로운 lpd데몬을 구동시킨다.
     status  : 지정된 프린터의 상태를 확인한다.
     quit    : lpc를 끝낸다. exit와 같다.

3. 파일의 인쇄
(1) 일반적인 파일 출력하기
    [root@www /root]# cat a.txt > /dev/lp
     => /dev/lp는 프린터에 대한 심볼릭 링크이다. 프린터 사용할 수 있는 권한자는 루트권한자나
       프린트데몬에 등록된 그룹의 사용자만이 직접 파일을 보내어 사용하는 것이 가능하다. 일반
       사용자는 lpr명령을 사용해야 한다.
(2) 포스트스크립트(Postscripts)파일 출력하기
   1) 설명 : 포스트 스크립트파일을 프린트할 때 가장 큰 문제는 사용하는 프린터와 드라이버가
            포스트 스크립트를 지원하느냐가 중요하다. 만약 지원하지 않으면 고스트스크립트(GS :
            Ghostscripts)를 이용할 수 있다. 이것은 포스트스크립트처리를 하여 포스트 스크립트
            프린터가 아닌 일반프린터가 이해할 수 있는 형식으로 바꾸어 주는 프로그램이다.
   2) 사용법
     ㄱ. gs 사용
        gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\ |lpr test.txt
     ㄴ. Ghostview : Ghostscript를 X-window에서 구현한 것으로 Postscript파일을 출력전에 살펴볼
                    수 있다.(ftp://prep.ai.mit.edu/pub/gnu)

4. 프린터의 설정
(1) 설명: x-window상에서 printtool이라는 명령으로 설정하면 손쉽게 할 수 있다.
(2) 설정하기
   1) printtool 실행
   2) New 선택
   3) Name and Aliases항목에서 Queue Name설정
   4) Queue Type에서 맞는 타입설정 : 로컬인 경우에는 기본값을 사용하면 된다.
   5) Printer Driver항목에서 맞는 모델선택
   6) APPLY를 선택한다.
(3) 확인: /etc/printcap 파일을 확인해본다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 기본적인 시스템 하드웨어 설정
(1) 바이오스 : PC에 설치된 펌웨어를 보통 기본 입출력 시스템(BIOS, Basic Input/Output System)
              또는 바이오스라 부르며 시스템이 시작된 후 운영체제가 시작될 때까지 각 장치를 점검
              한다. BIOS프로그램은 보통 ROM에 저장되어 있어 ROM-BIOS라고도 부른다. 시스템에
              따라 차이는 있지만 이 과정에는 시스템의 초기화, 메모리 및 기타장치 의 테스트,
              저장 장치에서 운영체제를 읽어들이는 것등이 포함된다. 또한 낮은 수준의 시스템
              설정 인터페이스를 제공하며 사용자로 하여금 부팅시에 이들을 설정할 수 있게 하며
              자원을 할당한다. 보통 디스크설정, 메모리 설정, 보드에서 제공하는 포트(시리얼/
              패러럴등), 시계, 부트 장치 등을 설정할 수 있다.
(2) 자원 할당 : 바이오스 설정 중에서 몇몇 세부 사항에는 인터럽트(IRQ), I/O주소, DMA(Direct
               Memory Access)채널 등의 시스템 자원이 포함되어 있다.
   1) 포트 : 리눅스에서는 표준 직렬(Serial), 병렬(Parrarel), 조이스틱포트 모두 지원한다. 또한
           이러한 포트들과 주변기기는 /dev디렉토리에서 파일로 관리된다. 직렬포트는 ttyS0,
           ttyS1..등의 이름으로 사용되어 /dev디렉토리에서는 /dev/ttyS0, /dev/ttyS1등으로
           존재하고 마찬가지로 패러럴포트는 lp0,lp1..의 이름으로 사용되어 /dev/lp0, /dev/lp1
           등으로 존재한다.
     ㄱ. 직렬포트 : CPU는 직렬포트로 들어온 데이터를 처리하기 위해서 그 데이터가 어디에서 온
                  것이며, 어떤 신호를 사용되어 CPU가 데이터를 처리하도록 요청하엿는가를 알고
                  있어야 하는데 그 정보를 나타내는 값이 I/O주소(I/O ports)와 IRQ(Interrupt
                  ReQuest)로 직렬 포트 장치들은 이 값들을 메모리에 저장해 두어야 한다. 일반
                  적인 ISA버스에는 IRQ0~IRQ15까지 총 16개의 IRQ가 있다.
     ㄴ. 직렬포트 IRQ와 주소
        포트    리눅스장치파일    IRQ           기능                  I/O주소
        COM1      /dev/ttyS0       4    마우스                         0x3f8
        COM2      /dev/ttyS1       3    플로터/외장모뎀                0x2f8
        COM3      /dev/ttyS2       4    사용안함(마우스와 충돌)        0x3e8
        COM4      /dev/ttyS3       3    내장모뎀                       0x2e8
   2) 인터럽트 : PC 마이크로 프로세서에게 전달되는 전기적 신호로 현재 작업을 잠시 멈추고 비동
               기적 이벤트(예를 들면 키보드 누름)에 반응하도록 한다. 최근의 PC장치들은 인터럽
               트를 공유할 수 있으나 구형 하드웨어는 다른 장치와 충돌하지 않도록 직접 고유값으
               로 지정해야 한다. 보통 IRQ(Interrupt ReQuest)라 부른다.
     ㄱ. IRQ 목록
       IRQ               기능
       IRQ0         System timer
       IRQ1         Keyboard controller
       IRQ2         공유
       IRQ3         COM2/COM4
       IRQ4         COM1/COM3
       IRQ5         LPT2/SOUND CARD
       IRQ6         Floppy Drive Controller
       IRQ7         LPT1 parallel Port
       IRQ8         Real-Time Clock(TTC)
       IRQ9         예비(주로 미디카드에서 사용)
       IRQ10        Lan Card
       IRQ11        SCSI Adapter
       IRQ12        PS/2 Mouse
       IRQ13        Coprocessor
       IRQ14        IDE Controller(Primary)
       IRQ15        IDE Controller(Secondary)
     ㄴ. 관련파일 : /proc/interrupts => 현재 사용중인 IRQ를 알 수 있다. 병렬포트에 대한 내용은
                                      없다.
       예)
       [posein@www posein]$ cat /proc/interrupts
                  CPU0
         0:   51736181          XT-PIC  timer
         1:          5          XT-PIC  keyboard
         2:          0          XT-PIC  cascade
         5:     260033          XT-PIC  usb-uhci, usb-uhci, usb-uhci, eth1
         8:          1          XT-PIC  rtc
        12:    2979673          XT-PIC  eth0
        14:     131256          XT-PIC  ide0
        15:          2          XT-PIC  ide1
       NMI:          0
       LOC:          0
       ERR:          0
   3) I/O주소 : 마이크로 프로세서의 메모리 맵(메모리 번지를 정의한 목록)에 위치하며 네트워크
               인터페이스와 같은 입출력 장치를 위해 예약되어 있다. 마이크로 프로세서는 메모리에
               데이터를 기록하는 방법과 동일하게 장치에 데이터를 기록할 수 있고, 이것은 장치
               인터 페이스를 간단하게 할 수 있다. 만일 여러 장치들이 우연히 동일한 I/O주소를
               공유하게 되면 시스템 충돌이 일어난다.
     ㄱ. 표준 I/O 주소
      060h + 064h        Keyboard Controller
      170h + 376h        Secondary IDE Controller
      1F0h + 3F6h        Primary IDE Controller
      220h               Sound Card
      300h               Lan Card
      330h               SCSI Adapter
      3F2h               Floppy Drive Controller
      3F8h               COM1
      2F8h               COM2
      3E8h               COM3
      2E8h               COM4
      378h               LPT1
      278h               LPT2
     ㄴ. 관련파일 : /proc/ioports => 현재 사용중인 I/O 주소에 대한 정보를 알 수 있다.
     ㄷ. 관련 명령 : setserial 명령어를 이용하여 직렬포트를 확인할 수 있다.
        [root@www /root]# setserial -g /dev/ttyS*
        /dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
        /dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
        .....
   4) DMA : 몇몇 장치들이 DMA채널을 이용해 메모리에 직접 작업하고 마이크로 프로세서는 다른
           작업할 수 있게 해준다. 만일 DMA가 없을 경우 모든 데이터는 장치들의 포트를 통해
           읽어서 메모리에 저장해야 되며 이 마이크로 프로세서에 의해 수행된다. DMA를 지원하는
           장치들은 마이크로 프로세서가 작업중일 때 메모리에 직접 접근해서 필요한 데이터를
           기록하게 된다. 이것을 결과적으로 성능을 향상시키는 역할을 한다.
     ㄱ. 관련파일 : /proc/dma => dma의 값을 알 수 있다.
(3) 1024 실린더 제한 : 대부분의 PC운영에서 바이오스는 마스터 부트 레코드(MBR)이라고 알려진
                      디스크의 시작부분에서 운영체제를 불러온다. 윈도우즈 운영체제 사용자들은
                      부트 레코드가 다른 곳에 설치되지 않으므로 MBR에 대해 별로 신경을 쓰지
                      않는다. 그러나 리눅스의 경우 사용자가 부트로더(LILO)를 MBR이나 루트
                      파티션에 설치할 수 있다. 이러한 유연성 때문에 종종 바이오스와 LILO가
                      부팅에 실패하는 경우가 생긴다. 이 문제는 바이오스가 우선 LILO를 메모리
                      로 로드한 뒤 실행해야 하지만 바이오스는 1024 실린더 이후의 디스크 영역
                      에는 접근할 수 없기 때문이다. 만일 바이오스가 전체 LILO를 읽을 수 없다면
                      부팅에 실패하게 된다. 또한 구 버전의 LILO는 비슷한 이유로 커널 이미지를
                      반드시 1024 실린더 안쪽에 위치시켜야만 한다.

2. SCSI와 NIC 장치 설정
(1) 네트워크 인터페이스 카드
   1) 네트워크 카드의 시대적 분류
    ㄱ. 점퍼시대 : 이 방식의 하드웨어는 점퍼 위치를 변경함으로써 설정할 수 있도록 만들었다. 이
                 러한 방식은 점퍼 설정에 필요한 관련문서를 참고해 PC를 열어 내부에 접근해야
                 한다.
    ㄴ. 비휘발성 메모리시대 : 이 방법도 여전히 수동으로 설정한다. 점퍼를 제거하고 비휘발성 메모
                          리에 저장하는 방식이다. 물리적으로 접근해야 하는 문제는 없어 졌지만
                          제조사에서 제공되는 프로그램을 이용해야 한다. 이러한 프로그램은
                          대부분 MS-DOS용으로 만들어져 리눅스에서 이 장치를 사용하기 위해서는
                          초기 설정을 위한 별도의 MS-DOS시스템이 필요하다.
    ㄷ. 현재 : 최근 PCI 버스 방식의 네트워크 카드들은 대부분 자동으로 설정된다. 운영체제가
             시작되기 전에 시스템 초기화 단계에서 설정한다. 이러한 자동화는 수동으로 설정하는
             불편함과 장치 충돌을 방지한다.
   2) /proc 파일시스템 이용
     운영중인 리눅스 시스템에 새로운 하드웨어를 추가할 경우 기존의 장치들이 사용하는 리소스를
    확인할 필요가 있는데 이러한 커널의 상태 정보는 /proc에 저장된다. interrupt, dma, ioports
    등의 파일들은 현재 사용중인 자원을 보여준다.
     예) 1. /proc/interrupts
         2. /proc/dma
         3. /proc/ioports

3. 기타관련명령어
(1) lspci
   1) 설명: 시스템에 사용되는 PCI관련 정보를 출력해주는 명령어이다.
   2) 사용법
     lspci [options]
   3) options
     -v : 정보를 자세히 출력해준다.
   4) 사용예
     [root@mybestone /root]# lspci
     00:00.0 Host bridge: VIA Technologies, Inc.: Unknown device 3128 (rev 01)
     00:01.0 PCI bridge: VIA Technologies, Inc. VT8633 [Apollo Pro266 AGP]
     00:08.0 VGA compatible controller: ATI Technologies Inc 3D Rage II+ 215GTB [Mach64 GTB] (rev 9a)
     00:0a.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (rev 10)
     00:0b.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139 (rev 10)
     00:11.0 ISA bridge: VIA Technologies, Inc. VT8233 PCI to ISA Bridge
     00:11.1 IDE interface: VIA Technologies, Inc. Bus Master IDE (rev 06)
     00:11.2 USB Controller: VIA Technologies, Inc. UHCI USB (rev 1b)
     00:11.3 USB Controller: VIA Technologies, Inc. UHCI USB (rev 1b)
     00:11.4 USB Controller: VIA Technologies, Inc. UHCI USB (rev 1b)
     00:11.5 Multimedia audio controller: VIA Technologies, Inc. AC97 Audio Controller (rev 30)

출처 : 대전국제 IT교육센터 정성재 강사

 

1. 리눅스와 하드웨어 개요
운영체제에서 하드웨어의 인식은 굉장히 중요하다. 사용자가 하드웨어에게 명령을 내리고자 한다면
운영체제에서 하드웨어를 인식해야 한다. 내부적으로는 커널이 하드웨어를 지원하고 인식해야 제어할
수 있다. 리눅스에서 하드웨어의 종류에 따른 여러 가지 특성을 분석해보자.

2. 하드웨어와 관계된 기본 자원
(1) 하드웨어 관련 로그
   1) 설명: 부팅이란 쉽게 설명하면 커널이 하드웨어를 인식하는 단계이다. 부팅을 시작하면 커널은
           부팅하면서 인식되는 하드웨어 정보를 화면에 보여주고, 또한 그 정보를 기록한다. 그
           정보가 기록되는 파일이 /var/log/dmesg이다.
   2) 확인: 로그정보의 확인은 로그 기록파일명과 같은 dmesg 명령을 이용한다. 이 명령을 내리면
           부팅시 발생된 로그를 확인할 수 있으며, 이 내용은 /var/log/dmesg라는 파일에서 가져
           온다.
(2) 하드웨어 자동인식 데몬 kudzu
   1) 설명: 리눅스에서도 윈도우처럼 자동으로 하드웨어를 인식하여 설치해주는 데몬이 있는데 이
           데몬이 kudzu이다. 새로운 하드웨어를 인식하고 설정하여 그 설정된 목록을 파일에 저장
           한다. 이 파일은 데이터베이스화하여 관리되고, 새로운 하드웨어 발견시 이 파일과 비교
           하여 기록에 없으면 새 하드웨어로 인식하여 데이터베이스를 갱신한다.
   2) 관련 파일 및 디렉토리
    ㄱ. /etc/sysconfig/hwconf: kudzu가 인식한 하드웨어를 설정하여 데이터베이스화하여 관리하는
                              파일이다. 이 파일에 현재 장착된 하드웨어의 정보가 담겨 있다.
    ㄴ. /usr/share/hwdata : kudzu가 인식할 수 있는 하드웨어의 목록파일이 들어 있는 디렉토리이
                           다.
(3) /proc 디렉토리: 관련 하드웨어에 대한 정보는 가상파일시스템의 일종인 /proc디렉토리에 위치
                    하게 된다. 이 디렉토리내의 파일을 통해 여러 하드웨어 정보를 알 수 있다.
(4) 관련 유틸리티 : hwbrowser
   X window 기반 그래픽 유틸리티인 hwbrowser는 현재 찾아낸 하드웨어의 정보를 보여주는 프로그램
  이다.

3. 각 하드웨어별 분석
(1) CPU
   현재 리눅스에서 지원되는 CPU의 종류를 살펴보면 Intel의 x86계열과 IA-64, Compaq Alpha, IBM
  S/390, PowerPC, Motorola 68k, SPARC 등을 지원한다. CPU 갯수로 보면 리눅스 커널 디자인상으로
  는 총 32개까지 지원이 가능하지만 x86계열은 8개까지 지원한다. 그러나, x86계열에서 실제적으로
  4개 이상은 사용하지 않는다.
(2) Memory
   리눅스는 i586인 경우에 기본으로 1GB의 메모리를 지원한다. i686/athlon을 사용하는 경우에는
  4GB까지 사용가능하다. 또한 인텔의 PAE(Physical Address Extensions)를 지원하는 CPU인 경우에는
  최대 64GB까지 지원한다.
(3) Block Device 와 Character Device
   1) 설명: 리눅스에서는 장치들을 파일화하여 관리한다. 이러한 파일들은 /dev디렉토리에 위치하게
           되고, 크게 Block Device와 Character Device로 분리하여 관리된다. 또한 블록디바이스나
           캐릭터 디바이스의 쉬운 접근을 위해 심볼릭링크(Symbolic Link)로 사용하기도 한다.
   2) Block Device
    ㄱ. 설명: Block 단위로 전송하는 장치들을 말하며, 흔히 Random한 접근이 가능한 장치를 일컫기
             도 한다. Floppy, IDE, SCSI, RAID 등이 이러한 장치에 속한다.
    ㄴ. 블록 디바이스 파일의 예
       [root@www dev]# ls -l /dev/fd0
       brw-rw----    1 root     floppy     2,   0  8월 31 08:31 /dev/fd0
        => 첫번째필드가 권한을 나타내는 부분에서 맨 앞쪽이 b로 표기됨을 알 수 있다. 또한 /dev
          디렉토리안에 있는 디바이스들은 두 개의 숫자로 이루어진 식별자값을 갖는데, 이 들 숫자
          를 각각 Major Number, Minor Number라 부른다. Major 번호는 노드번호와 동일하며, Minor
          번호는 의례적으로 첨자번호(예를 들면 fd다음에 붙는 숫자값)을 부여하게 된다.
   (참고) Major/Minor Number관련 정보는 /usr/src/linux-커널버전/Documentation/devices.txt
         파일에서 찾아볼 수 있다.
    ㄷ. Block Device의 종류
       hd[a-t] : IDE 하드디스크 드라이브
       sd[a-z] : SCSI 하드디스크 드라이브
       fd[0-7] : 표준 플로피 디스크 드라이브
       md[0-31] : 소프트웨어적 RAID 디스크
       loop[0-15] : loopback devices
       ram[0-19] : ramdisks
   3) Character Device
    ㄱ. 설명: Character단위로 전송하는 장치를 말하며, 흔히 순차적 접근만이 가능한 장치를 일컫
             는다.
    ㄴ. 캐릭터 디바이스 파일의 예
       [root@www dev]# ls -l /dev/tty1
       crw-------    1 root     root       4,   1  1월 21 19:58 /dev/tty1
        => 첫번째 필드의 맨 앞쪽이 c로 표기되어 있다.
    ㄷ. Character Device의 종류
      tty[0-31]  : 가상 콘솔장치
      ttyS[0-9]+ : Serial Ports
      lp[0-3]    : Parallel Ports
      null       : 휴지통같은 장치
      zero       : 무제한의 0값을 갖는 장치
      [u]random  : 랜덤한 정보를 갖는 장치
      fb[0-31]   : framebuffer 장치
   4) Symbolic Links
    ㄱ. 설명: 블록디바이스나 캐릭터디바이스의 접근을 쉽게 하기 위해 링크를 걸어둔 장치를
             말한다.
    ㄴ. 종류
      /dev/cdrom => /dev/hd[a-t], /dev/sd[a-z]+
      /dev/modem => /dev/ttyS[0-9]+
      /dev/pilot => /dev/ttyS[0-9]+
   5) 관련명령어: mknod, hdparm
(4) System Bus Support
   1) PCI 장치
    ㄱ. 설명: 리눅스는 PCI 버스관련 장치들도 지원한다. 대부분 커널에서 자동으로 인식한다.
    ㄴ. 관련명령어
       lspci
         => 현재 설치된 pci관련 장치의 정보를 보여준다.
    ㄷ. 관련디렉토리
       /proc/bus/pci
   2) ISA 장치
    ㄱ. 설명: PCI 이전에 사용하던 슬롯으로 현재는 거의 사용되지 않는다.
    ㄴ. 관련디렉토리
       /proc/isapnp
        => 찾아진 ISA 장치의 정보가 기록된다.
(5) Hotswappable Bus Support
   1) USB & IEEE 1394
    ㄱ. 명령어: /sbin/hotplug
         => USB나 IEEE 1394 관련 주변장치를 찾아 커널에게 알려주는 명령이다.
    ㄴ. 관련디렉토리: /proc/bus
        => 장치들의 정보는 /proc/bus의 하위디렉토리에 기록된다.
    ㄷ. /etc/hotplug
        => 관련장치들이 기록되는 환경설정디렉토리이다.
    ㄹ. USB 장치관련 파일
       /dev/usb
    ㅁ. 관련명령어
      a. /sbin/lsusb
          => 설치된 USB장치의 리스트를 보여주는 명령이다.
      b. /sbin/usbmodules
          => USB장치를 커널모듈로 등록시키는 명령이다.
    ㅂ. 관련문서 : "/usr/share/doc/hotplug-버전" 디렉토리나 커널소스의
                  /usr/src/linux-2.4/Documentation/usb 디렉토리에서 참고할 수 있다.
   2) PCMCIA
    ㄱ. /etc/sysconfig/pcmcia : 시스템에서 사용하는 PCMCIA 컨트롤러에 관한 내용이 설정된다.
    ㄴ. /sbin/cardmgr : Hotswap 이벤트를 모니터링하는 데몬이다.
    ㄷ. /sbin/cardctl : PCMCIA 카드를 제어하는 프로그램이다.
    ㄹ. /etc/pcmcia : PCMCIA 관련 환경파일들이 존재하는 디렉토리이다.
    ㅁ. /etc/init.d/pcmcia : 스크립트 데몬파일이다.
    ㅂ. 관련문서: man pcmcia 하거나 "/usr/share/doc/kernel-pcmcia-cs-버전" 디렉토리에서 참조
                 한다.
(6) Peripheral Device Ports
   1) Serial Ports
    ㄱ. /proc/tty/driver/serial
       => 현재 시리얼포트의 설정상태를 보여준다.
    ㄴ. /sbin/setserial
       => 시리얼포트의 정보를 보여주거나 설정하는 명령이다.
    ㄷ. /etc/rc.serial
       => 시스템부팅시에 시리얼포트를 사용하도록 해주는 스크립트이다.
    ㄹ. 관련 심볼릭링크
       /dev/modem
       /dev/pilot
    ㅁ. 관련문서
       /usr/src/linux-커널버전/Documentation/serial-console.txt
   2) Parallel Ports
     커널모듈형태로 지원되며 /etc/modules.conf에서 parport_lowlevel 이라는 이름으로 사용된다.
    x86계열 아키텍쳐에서는 패러럴포트는 parport_pc 라고 인식한다.
(7) Console and Graphics
   1) Console
    ㄱ. 설명: 리눅스는 기본적으로 SVGA 텍스트 콘솔을 지원한다. 커널 부트파라미터에서 'vga'라는
             값으로 조정한다.
    ㄴ. 관련명령어
       /usr/bin/setterm
   2) Frame Buffer
    ㄱ. 설명: 프레임버퍼란 화면에 나타날 영상정보를 일시적으로 저장하는 기억장치이다. 비디오카
             드의 중앙처리장치(CPU)로부터 도형을 표현하는 디스플레이 리스트를 받아 변환하여 프
             레임 버퍼에 기록한다. 프레임 버퍼의 각 기억 단위는 화면의 하나의 화소에 하나씩 대
             응하여 화면에 그대로 반영된다. 즉 화면의 각 점의 온(on)/오프(off)나 색깔을 비트맵
             으로 기억하고 있으며 이 기억 장치에 어떤 내용을 써넣으면 그것이 화면에 표시된다.
             이는 대개 시스템의 주기억 장치와는 별도로 분리되어 있으며, 특별한 기술을 사용하여
             속도를 빠르게 하기도 한다. 프레임버퍼를 이용하여 콘솔모드에서 한글쓰기 등이 가능
             하다.
    ㄴ. 리눅스와 프레임버퍼: 리눅스에서 프레임버퍼는 모드 그래픽하드웨어에 대해 지원되는 것은
                            아니고 일부 비디오카드에 대해서만 지원한다. fbset 이라는 프레임버
                            퍼를 관리하는 RPM패키지가 제공되며, /usr/sbin/fbset 이라는 명령과
                            /etc/fs.modes라는 환경설정파일을 이용한다.
    ㄷ. 관련문서
       /usr/src/linux-커널버전/Documentation/fb
       /usr/src/linux-커널버전/Documentation/svga.txt

4. 하드웨어관련 문서 찾아보기
(1) 레드햇리눅스 관련문서
   1) 사이트: http://www.redhat.com/support/hardware
   2) 설명 : 레드햇사에서 테스트한 하드웨어를 포함하여 레드햇리눅스와 호환되는 하드웨어목록과
            관련 정보를 얻을 수 있다.
(2) X-Window System관련 문서
   1) 사이트: http://www.xfree86.org
   2) 설명: X-window 지원하는 비디오카드 등의 하드웨어 정보를 알 수 있다.
(3) 기타관련문서
   1) 사이트: http://www.tldp.org
   2) 설명: The Linux Documentation Project의 약자로 하드웨어뿐만아니라 리눅스와 관련된 거의
           모든 문서를 찾을 수 있다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. 리눅스에서 IP 부여
(1) 명령어 이용하는 방법 : ifconfig, route 등의 명령어를 이용하여 IP를 부여한다.
   1) 사용예
     ifconfig eth0 192.168.0.5 netmask 255.255.255.0 broadcast 192.168.0.255
     route add -net 192.168.0.0 netmask 255.255.255.0 eth0
     route add default gw 192.168.0.1
   2) 장점 : /etc/sysconfig/network-scripts/ifcfg-eth0파일에서의 설정이 필요없다.
   3) 단점 : 재부팅시 재설정을 필요로 한다.
   4) 주의점: network 데몬을 재가동해서는 안된다. network데몬은 시스템의 /etc/sysconfig 디렉
            토리이하에 존재하는 네트워크 관련파일의 정보를 보고 설정한다.
   5) 보완책 : ifconfig, route같은 명령을 이용하여 IP를 부여하면 시스템을 재부팅했을 경우에는
              그 설정이 없어진다. 따라서, 명령어를 이용하여 지속적인 IP세팅을 하려면 부팅시
              마다 항상 참조하는 파일인 /etc/rc.d/rc.local파일안에 설정하면 된다.
(2) /etc/sysconfig/network-scripts/ifcfg-eth0파일을 이용 : 설정하고자 하는 IP를 다음과 같이
                                                           파일안에 넣는다.
   1) 설정예
     DEVICE=eth0
     BOOTPROTO=static
     BROADCAST=192.168.0.255
     IPADDR=192.168.0.5
     NETMASK=255.255.255.0
     NETWORK=192.168.0.0
     ONBOOT=yes
(3) netconfig를 이용 : 레드햇 리눅스 text모드에서 사용가능하다.
(4) linuxconf를 이용 : text모드, 웹브라우저(네스케이프)모드, X-window모드 세가지형태로 지원한
                      다. (레드햇 7.x버전이하만 가능하고 레드햇 8 버전에서는 지원하지 않는다.)
(5) netcfg, netconf를 이용 : X-window에서만 지원한다. (레드햇 7.x버전이하만 가능하고 레드햇 8
                             버전에서는 지원하지 않는다.)
(6) redhat-config-network: 레드햇리눅스 8에서 지원하는 명령으로 X-window 에서만 지원한다.
                           neat라고 입력해도 된다.

2. IP를 변경하기
(1) 명령어를 이용한 설정을 했을 경우
   1) 네트워크 인터페이스의 작동을 중단시킨다.
      ifdown eth0      또는   ifconfig eth0 down
   2) 역시 명령어를 이용하여 변경을 한다. 만약 /etc/rc.d/rc.local파일 안에 설정을 했을 경우에는
     그 파일안에서 설정을 변경한다.
   3) 네트워크 인터페이스를 재작동시킨다.
      ifup eth0        또는   ifconfig eth0 up
(2) /etc/sysconfig/network-scripts/ifcfg-eth0파일과 /etc/sysconfig/network파일을 이용했을
    경우 리눅스에서 네트워크카드(랜카드)는 ethx(여기서 x는 해당숫자임)로 관리한다. 만약 시스템
    에 랜카드가 하나라면 eth0 이다. IP를 변경하기 위해서 편집해야 할 파일은 다음의 두 가지
    파일이다.
   1) 관련파일
    ㄱ. /etc/sysconfig/network-scripts/ifcfg-eth0 : IP,Netmask,Broadcast값을 변경하기위한 파일
    ㄴ. /etc/sysconfig/network : Gateway값을 변경하기 위한 파일
       참고로 이더넷카드를 두 개 장착했을 경우 두번째 이더넷카드의 설정은 ifcfg-eth1번이다.
   2) 설정순서
    ㄱ. 네트워크 인터페이스의 작동을 중단시킨다.
       ifdown eth0             또는    ifconfig eth0 down
    ㄴ. /etc/sysconfig/network-scripts/ifcfg-eth0파일안에 다음과 같은 형식으로 IP를 적는다.
       (설정예)
      DEVICE=eth0
      BOOTPROTO=static
      BROADCAST=192.168.0.255
      IPADDR=192.168.0.5
      NETMASK=255.255.255.0
      NETWORK=192.168.0.0
      ONBOOT=yes
    ㄷ. 네트워크 인터페이스를 재작동시킨다.
       ifup eth0
    ㄹ. /etc/sysconfig/network파일안에 게이트웨이값을 부여한다.
       NETWORKING=yes
       HOSTNAME=www
       GATEWAY=192.168.0.1
    ㅁ. 재부팅하거나 네트워크 데몬을 재가동한다.
       /etc/rc.d/init.d/network stop 한 뒤 /etc/rc.d/init.d/network start
         또는
       /etc/rc.d/init.d/network restart
         또는
       service network restart

(참고1) 고정IP와 유동IP의 비교
1. /etc/sysconfig/network 파일: 게이트웨이 설정파일
  (1) 고정IP : 게이트웨이항목이 한 줄 더 있다.
     NETWORKING=yes
     HOSTNAME=www
     GATEWAY=192.168.0.1
  (2)유동IP
     NETWORKING=yes
     HOSTNAME=www

2. /etc/sysconfig/network-scripts/ifcfg-eth0 : 이더넷카드 설정파일
  (1) 고정IP
     DEVICE=eth0
     BOOTPROTO=static
     BROADCAST=192.168.0.255
     IPADDR=192.168.0.5
     NETMASK=255.255.255.0
     NETWORK=192.168.0.0
     ONBOOT=yes
  (2) 유동IP
     DEVICE=eth0
     BOOTPROTO=dhcp
     ONBOOT=yes

(참고2) 추천하는 /etc/sysconfig/network파일과 /etc/sysconfig/network-scripts/ifcfg-eth0
1. /etc/sysconfig/network
   NETWORKING=yes
   HOSTNAME=www
   GATEWAY=192.168.0.1               //유동아이피인 경우에는 생략한다.
   GATEWAYDEV=eth0                   //기본적으로 생략가능하다.
   FORWARD_IPV4=false                //ipchain등을 이용하여 방화벽이나 인터넷 공유시에는 true
                                       로 값을 지정해야 한다.
2. /etc/sysconfig/network-scripts/ifcfg-eth0
   DEVICE=eth0
   BOOTPROTO=static                 //유동아이피인 경우에는 'dhcp'가 된다.
   IPADDR=192.168.0.2               //부여받은 IP어드레스를 적으면 된다.
   NETMASK=255.255.255.0            //부여받은 넷마스크값을 적으면 된다.
   NETWORK=192.168.0.0              //보통 부여받은 아이피의 맨 끝자리가 0인 값이다.
   BROADCAST=192.168.0.255          //보통 부여받은 아이피의 맨 끝자리가 255인 값이다.
   ONBOOT=yes

3. IP를 추가로 부여하기
(1) 설명: 시스템에 이더넷카드(eth0)가 하나만 존재한다. 기존의 IP 이외에 남는 IP가 존재하여
          추가로 IP를 부여하고자 한다. 리눅스에서는 이러한 기능을 지원하는데 이러한 방법을
          Alias IP라고 한다.
(2) 방법 : 다음과 같이 세가지 방법이 있다.
   1) 명령어를 이용하는 방법: ifconfig 명령을 이용하는 방법이다. 이 방법을 사용해서 명령을
                             내렸을 경우 재부팅하면 설정값이 부여되지 않는다.
   2) 파일을 이용하는 방법: 가장 쉬운 방법으로 기존의 파일을 복사하여 설정하면 된다.
   3) netconfig 유틸리티를 이용하는 방법: 그래픽하게 지원하는 방법으로 이 설정을 하면 자동
                                         으로 해당파일이 생성된다.
(3) 사용예: 기존의 eth0에 추가로 203.xxx.xxx.76번을 부여해본다.
   1) 명령어를 이용하는 방법
     ifconfig eth0:0 203.xxx.xxx.76 netmask 255.255.255.0 broadcast 203.xxx.xxx.0
       => eth0:0 으로 추가로 부여할 IP를 지정하면 된다. 절대로 이 설정후에 network데몬을 재시
         작해서는 안된다. network데몬은 관련파일의 정보를 가져와 설정한다.
   2) 파일을 이용하는 방법
    ㄱ. cd /etc/sysconfig/network-scripts 로 이동한다.
    ㄴ. 기존의 이더넷카드 설정파일인 ifcfg-eth0을 ifcfg-eth0:0으로 복사한다.
    ㄷ. ifcfg-eth0:0의 설정내용을 변경한다.(/etc/sysconfig/network-scripts/ifcfg-eth0:0)
       DEVICE=eth0:0                  // 이 디바이스명을 잘 적어줘야 한다.
       BOOTPROTO=static
       BROADCAST=203.xxx.xxx.255
       IPADDR=203.xxx.xxx.76
       NETMASK=255.255.255.0
       NETWORK=203.xxx.xxx.0
       ONBOOT=yes
   3) netconfig 유틸리티 이용하기
     netconfig --device eth0:0 명령을 내린 뒤 설정한다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. /etc/modules.conf
(1) 설명: 네트워크 인터페이스카드 설정관련 파일이다. 이 파일에서 모듈화된 네트워크 디바이스를
          파일화시킨다.
(2) 예
   [root@www root]# cat /etc/modules.conf
   alias parport_lowlevel parport_pc
   alias eth0 8139too
   alias eth1 8139too
   alias sound-slot-0 via82cxxx_audio
   post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
   pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :
   alias usb-controller usb-uhci
    => Realtek 8139 이더넷카드를 eth0 으로 alias 시킨다.

2. /etc/sysconfig/network
(1) 설명: 전체 네트워크 설정과 관련된 항목들이 들어있는 파일이다. 게이트웨이주소, 호스트네임
          등이 기록된다.
(2) 주요항목
   1) NETWORKING = yes|no
       => 네트워킹 사용 유무를 지정한다.
   2) HOSTNAME = 호스트이름
       => 전체도메인이름을 지정을 기본으로 하나 임의로 지정해도 상관없다.
   3) GATEWAY = 게이트웨이 IP
       => 게이트웨이 IP를 지정한다.
   4) GATEWAYDEV=디바이스명
       => GATEWAY로 연결된 디바이스를 지정한다.
   5) FORWARD_IPV4=false/true 또는 yes/no
       => 이 시스템을 게이트웨이나 라우터를 사용할 때는 필요한 항목이다. 구체적으로 ipchains등
         을 이용하여 방화벽이나 인터넷 공유시에는 true나 yes로 값을 지정해야 한다.
   6) NISDOMAIN = NIS 도메인이름
       => NIS 도메인 이름을 지정한다. 또는 "DOMAINNAME= "이라고 해도 된다.
  (3) 사용예
     NETWORKING=yes       // 네트워크를 작동시킨다.
     HOSTNAME=www         // 호스트이름을 나타낸다. 이 곳의 호스트이름은 다음라인의 도메인이름
                           을 포함해야 한다.
     DOMAINNAME=          // NIS서비스 등을 받을 경우 네트워크의 도메인 이름을 나타낸다.
     GATEWAY=192.168.0.1  // 게이트웨이 주소를 나타내며 유동아이피인 경우에는 생략된다.
     GATEWAYDEV=eth0      // 기본 게이트웨이와 연결되어 있는 인터페이스를 지정한다. 생략가능
     FORWARD_IPV4=false   //  참고로 설정값은 true/false, yes/no

3. /etc/sysconfig/network-scripts 디렉토리
(1) 설명: 리눅스에서 네트워크 인터페이스환경설정과 관련된 파일들이 저장되는 디렉토리이다.
(2) 관련파일
   1) /etc/sysconfig/network-scripts/ifcfg-eth0 : 첫번째 이더넷카드의 설정파일이다.
   2) /etc/sysconfig/network-scripts/ifcfg-eth1 : 두번째 이더넷카드의 설정파일이다.
   3) /etc/sysconfig/network-scripts/ifcfg-eth0:0
       => 첫번째 이더넷카드에 추가로 IP주소를 부여할 때 설정하는파일이다.
   4) /etc/sysconfig/network-scripts/ifcfg-eth1-range0
    ㄱ. 설명: 여러 IP를 한번에 부여할 수 있다. 현재 이 파일은 두번째 랜카드에 특정 IP 대역을
             부여하기 위한 파일이다.
    ㄴ. 사용예
       [root@www network-scripts]# cat ifcfg-eth1-range0
       IPADDR_START=192.168.3.1
       IPADDR_END=192.168.3.254
       CLONENUM_START=0
        => eth1 이더넷카드에 192.168.3.1부터 192.168.3.254까지 부여하였다. C클래스 기준으로
          최대 256개를 부여할 수 있다.
(3) ifcfg-ethx의 주요설정
    DEVICE=디바이스명
     => 네트워크 인터페이스 장치명을 나타낸다.
    BOOTPROTO=none|static|dhcp
     => 프로토콜을 나타낸다. 고정아이피인 경우에는 static 유동아이피인 경우에는 'dhcp'가 된다.
    IPADDR=아이피주소
     => 부여받은 IP어드레스를 적으면 된다.
    NETMASK=넷마스크값
     => 부여받은 넷마스크값을 적으면 된다.
    NETWORK=네트워크주소
     => 부여받은 네트워크주소값을 적는다. 보통 부여받은 아이피의 맨 끝자리가 0인 값이다.
    BROADCAST=브로드캐스트주소
     => 부여받은 브로드캐스트값을 적는다. 보통 부여받은 아이피의 맨 끝자리가 255인 값이다.
    GATEWAY=게이트웨이주소
     => 이 파일에 게이트웨이값을 부여하면 /etc/sysconfig/network파일의 설정은 반영되지 않는다.
       가능하면 게이트웨이값 설정은 /etc/sysconfig/network파일에서 하도록 한다.
    USERCTL=yes|no
     => 일반적으로 네트워크인터페이스의 작동 유무 결정은 root만이 가능한데 일반사용자도 작동
       가능하게 해주는 설정이다.
    PEERDNS=yes|no
     => ppp0같은 모뎀을 사용하거나 dhcp를 사용하는 경우에는 이 값을 yes로 설정하는데 DNS서버
       관련파일인 /etc/resolv.conf파일에 설정내용을 자동으로 업데이트한다. 이 값을 no로 하면
       이 파일의 내용을 업데이트하지 않는다.
    ONBOOT=yes|no
     => 부팅시에 해당디바이스 활성화 유무를 결정한다.
(4) 설정예(ifcfg-ethx기준)
    DEVICE=eth0
    BOOTPROTO=static
    IPADDR=192.168.0.2
    NETMASK=255.255.255.0
    NETWORK=192.168.0.0
    BROADCAST=192.168.0.255
    ONBOOT=yes

4. /etc/host.conf
(1) 설명 : DNS 서비스를 제공할 때, 먼저 이 파일을 검사하여 파일의 설정에 따라 서비스한다.
(2) 주요내용
    [root@www root]# cat /etc/host.conf
    order hosts, bind
      => /etc/hosts파일을 먼저 검색 후, /etc/resolv.conf파일 내용을 참조한다.

5. /etc/hosts
(1) 설명: DNS 서버를 사용하기 이전에 사용하던 파일로 IP주소와 호스트이름을 매핑시켜 데이터베
          이스화해서 사용하는 파일이다. 로컬 네트워크상에서 접속을 쉽게하기 위해 등록해서 사용
          할 수 있다.
(2) 구성예 : 3개의 필드로 구성되어 있다.
    IP_Address         전체_도메인명  별칭
(3) 기본구성
   [root@www /root]# cat /etc/hosts
   127.0.0.1           localhost.localdomain localhost
    => 기본 3개의 필드로 구성되어 있다. 현재시스템을 접속할 때 그냥 localhost라고 해도 된다.
(4) 설정예
   203.247.40.252  www.mybestone.com      mybestone
    => 만약 위와 같아면 telnet 203.247.40.252 대신에 telnet mybestone으로 가능하다.

6. /etc/resolv.conf
(1) 설명: 사용하고자 하는 네임서버(DNS)를 설정하는 파일이다. 보통 자신이 속한 도메인을 관장
          하는 DNS서버를 첫번째로 등록하고, 그 외에 잘 알려진 곳의 서버를 등록한다. 3개까지
          설정가능하다.
(2) 설정예
   [root@www /root]# cat /etc/resolv.conf
   search linux.com
   nameserver 168.126.63.1
   nameserver 203.247.32.31
    => search는 기본을 검색하는 도메인을 지정할 때 사용하지만 사용하지 않아도 된다. nameserver
      에 사용하는 네임서버의 IP를 지정하면 된다.

7. /proc/sys/net/ipv4/ip_forward
(1) 설명: IP를 포워딩시킬 때 설정해야 하는 파일이다. 즉, ipchains나 iptables를 통한 인터넷공
          유, NAT(Network Address Translation) 등을 할 때 꼭 설정해야 하는 파일이다.
(2) 설정
   1) 기본값확인
     [root@www root]# cat /proc/sys/net/ipv4/ip_forward
     0
      => 즉 기본값은 IP 포워딩을 허용하지 않는다.
   2) IP 포워딩 허용하기
     [root@www root]# echo 1 > /proc/sys/net/ipv4/ip_forward
       => IP 포워딩을 허용한다.

8. 기타: /etc/rc.d/rc.local파일을 이용한 네트워크 설정
(1) 설명: 이 파일안에 네트워크 명령어로 설정할 경우에는 /etc/sysconfig/network-scripts/ifcfg
          -eth0 파일 설정이 별도로 필요하지 않다.
(2) 설정예: 랜카드 두 개를 장착했을 겨우
   ifconfig eth0 210.123.193.194 netmask 255.255.255.192
   route add -net 210.123.193.192 netmask 255.255.255.192 eth0
   route add default gw 210.123.193.193
   ifconfig eth1 192.168.0.1 netmask 255.255.255.0
   route add -net 192.168.0.0 netmask 255.255.255.0 eth1

9. 일반사용자와 네트워크 인터페이스
(1) 설명: 원칙적으로 네트워크 인터페이스는 루트사용자만 임의로 조작가능하다. 그러나 관련파일
          에서 설정을 하면 일반사용자도 네트워크 인터페이스를 임의로 다운시키거나 업시킬수
          있다.
(2) 설정
   1) 방법: ifcfg-ethx 파일에서 'USERCTL' 이라는 변수를 사용한다.
   2) 사용예
     [posein@www network-scripts]$ cat ifcfg-eth1
     DEVICE=eth1
     BOOTPROTO=static
     BROADCAST=192.168.0.255
     IPADDR=192.168.0.1
     NETMASK=255.255.255.0
     NETWORK=192.168.0.0
     ONBOOT=yes
     USERCTL=yes                // 사용자가 임의로 네트워크 인터페이스를 up/down시킬 수 있다.
   3) 사용명령1
    ㄱ. 설명: ifup/down 스크립트명령을 이용해야 한다.
    ㄴ. 사용법
       ifup 네트워크_인터페이스
       ifdown 네트워크_인터페이스
    ㄷ. 사용예
       [posein@www posein]$ /sbin/ifdown eth1
        => ifup/ifdown 명령은 /sbin디렉토리에 위치하고 있는데 일반사용자는 패스가 설정되어 있
          지 않으므로 절대경로로 입력해야 한다.
   4) 사용명령2
    ㄱ. 설명: usernetctl이라는 명령을 이용할 수도 있다.
    ㄴ. 사용법
       usernetctl 네트워크_인터페이스  [up | down]
    ㄷ. 사용예
       [posein@www posein]$ /usr/sbin/usernetctl eth1 down
        => eth1 인터페이스의 작동을 중지시켰다. 역시 일반사용자가 명령을 실행하려면 패스가 설
          정되어 있지 않으므로 절대경로로 입력해야 한다.

10. Route에 대하여
(1) 기본 Route 설정
   기본 라우트설정 즉 Gateway값을 부여할 수 있는 파일은 /etc/sysconfig/network파일과 /etc/sys
  config/network-scirpts/ifcfg-ethx에서 모두 가능하다. /etc/sysconfig/network파일이 전체 기본
  라우트 파일이고, /etc/sysconfig/network-scripts/ifcfg-ethx에 부여하면 해당 인터페이스의
  게이트값으로 설정된다.
(2) 정적 라우트에 대하여
   1) 설명: 리눅스 커널 2.2이상 버전에서는 자동으로 라우트를 생성해준다. 그러나 특정파일에
           정적 라우트(Static Route)를 정의할 수 있다.
   2) 관련파일 : /etc/sysconfig/static-routes
    ㄱ. 설명: 정적라우트를 정의할 때 사용한다.
    ㄴ. 파일 선언법
       <device> host|net <argument to route command>
    ㄷ. 사용예
      a. eth0 host 192.168.2.2 eth0
        => 호스트 192.168.2.2가 부여된 eth0 을 통하여 라우팅된다.
      b. any host 192.168.2.0 netmask 255.255.255.0 ppp0
        => 192.168.2.0 네트워크 호스트들 ppp0을 통하여 라우팅된다.

출처 : 대전국제IT교육센터 정성재 강사

 

1. telnet : 원격서버접속
(1) telnet이란?
    원격의 텔넷 서버에 접속하기 위한 시스템 기본 텔넷 클라이언트  프로그램이다.
(2) 사용법
    telnet [hostname or IP_Address ] (port)
     => 포트를 입력하지 않으면 기본적으로 23번 포트로 연결된다. 왜냐하면 텔넷의 기본포트가
       23번이기 때문이다. (참고로 ftp의 포트는 21번이고, 전체 포트의 확인은 /etc/services에서
       한다.)
(3) 사용예
   1) telnet 192.168.1.100
       => 192.168.1.100 서버로 텔넷서비스를 시도한다.
   2) telnet mybestone.com
       => mybestone.com 이라는 도메인으로 텔넷서비스를 시도한다.
(4) 관련파일
   1) /etc/hosts
    ㄱ. 설명: 인터넷을 이용하기 위해서는 DNS서버를 이용한다. 이 DNS서버보다 먼저 참조하는
              파일이 /etc/hosts파일이다. 이 파일에 해당 IP주소와 간단한 이름을 붙이면 그
              간단한 이름만으로도 텔넷접속이 가능하다. 즉 /etc/hosts 파일에는 주로 DNS를 거치
              지 않고 연결될 수 있는 컴퓨터의 리스트를 나열한다. 어떻게 보면 윈도우의 단축아이
              콘과 비슷하다.
    ㄴ. 사용예
       [root@www root]# cat /etc/hosts
       192.168.3.137      posein
        => telnet posein 이라고 입력하면 해당 IP주소(192.168.3.137)로 telnet 접속된다.
    ㄷ. 참고
       /etc/hosts파일을 열어보면 기본값으로 127.0.0.1 localhost.localdomain localhost라는 설정
      이 있는데 이것은 그냥 나눈다. 127.0.0.1은 자기 자신을 가리키는 내부 IP 주소대역이고
      localhost라는 것은 내부네트워크 테스트등에 유용하게 쓰인다.
   2) /etc/issue, /etc/issue.net
     사용자가 로그인 할 때 'login : ' 이라는 메시지를 보여주기 전에 출력되는 내용을 적는 파일
    이다. /etc/issue는 로컬에서 로그인할 때 보여주는 메시지이고, /etc/issue.net은 telnet을
    통해 네트웍으로 접근해 올 때 보여주는 파일이다.
   3) /etc/motd
     성공적으로 로그인되었을 때 접속된 사용자에게 메시지를 화면에 보여주는 파일이다. 이 파일에
    전달하고자하는 메시지의 내용을 적어넣으면 된다.

2. ftp
(1) 설명 : file transfer protocol의 약자로 원격의 FTP서버에 접속하여 파일을 전송하고 내려받도
           록 해주는 기본 클라이언트 프로그램이다.
(2) 사용법
    ftp [hostname or IP_Address]
(3) 사용예
    ftp 211.36.134.233
   (참고) ftp는 파일을 다운받거나 업할때 쓰이는 프로그램이다. 대부분의 사이트에서 ftp는 계정없
        이도 가능하도록 되어있다. 로그인시 ID와 password를 anonymous(익명이라는 뜻)로 입력하면
        된다. 물론 계정이 있는 경우에는 해당 ID와 패스워드를 입력하면 자신의 홈디렉토리로
        접속한다.
(4) ftp 명령어 : ftp접속후 help 또는 ? 라 입력하면 리스트를 볼 수 있다.
   ls  [dir_name]  : 디렉토리의 리스트를 보여준다. 'dir'명령과 동일하다.
   put [File_name] : 로컬 시스템에 있는 파일을 원격의 FTP서버로 전송한다. send [file_name]과
                    같다.
   get [file_name] : 원격의 ftp서버에 있는 파일을 자신의 로컬시스템으로 가져온다.
                    recv [file_name]과 같다.
   size [File_name] : 원격의 ftp서버에 있는 파일의 크기를 출력한다.
   mkdir [dir_name] : 원격의 ftp서버에 새로운 디렉토리를 생성한다.
   rmdir [dir_name] : 원격의 ftp서버에 있는 디렉토리를 제거한다.
   status : 현재의 상태를 출력한다.
   exit : 현재의 ftp서버에서 빠져 나온다. quit명령과 동일하다.
   mput [file1 file2 ..] : 로컬시스템에 있는 여러개의 파일을 동시에 보낼때 사용한다.
   cd [dir_name] : 디렉토리를 이동한다.
   rename [file1 file2] : 원격의 ftp서버에 있는 file1의 이름을 file2로 바꾼다.
   chmod : 원격의 ftp서버에 있는 파일이나 디렉토리의 퍼미션을 조정한다.
   delete [file_name] : 파일을 삭제한다.
   mdetete [file1 file2 ...] : 여러개의 파일을 동시에 삭제한다.
   close : 현재 연결을 끊는다.
   open IP주소 또는 호스트네임 : 새로운 서버로 연결을 시도한다.
   lcd [dir_name] : 로컬 호스트의 작업디렉토리를 변경한다. 윈도우계열에서는 지원되지 않는다.
(5) 기타명령어
   hash : 파일전송 및 다운시 진행상태를 '#'으로 나타낸다.
   bi : 바이너리모드로 파일을 전송하거나 다운받는다.

3.ping(Packet Internet Groper)
(1) 개요 : 네트워크 연결을 확인할 수 있는 명령어로 원격의 호스트(로컬 호스트 포함)와 서로
           연결이 되어 있는지의 확인여부와 패킷을 보내고 받는 시간이 출력되므로 어느 정도의
           네트워크 장애가 있는지 미루어 짐작할 수 있다.
(2) 사용법
   ping [option] IP_Address or Host_name
(3) option
   -c 개수 : 몇 개의 패킷을 보낼 것인지를 정한다. 이 옵션이 없으면 무한대로 보낸다. 멈추고자
            할 경우에는 [CTRL]+[C]를 누른다.
   -i 초   : 몇 초 간격으로 패킷을 보낼 것인지를 결정한다. 이 옵션이 없으면 기본값인 1초 간격
            으로 보낸다.
   -s 패킷크기 : 보내고자 하는 패킷 크기를 bytes 단위로 설정한다. 이 옵션이 없으면 기본값은
                56bytes이다. 즉 기본 56bytes와 ICMP 헤더데이터인 8bytes를 합쳐서 총 64bytes패
                킷을 원격지 호스트로 보낸다. 만일 1024bytes의 패킷을 보내려고 한다면 '-s 1016
                '으로 설정한다. 최대 값은 헤더데이터인 8bytes를 뺀 65,507bytes이다.
   -w 초 : 패킷을 보내고 몇 초 후에 실행을 멈출 것인지를 설정한다. 만약 -c 옵션과 동시에 사용
          했을 경우 둘 중 먼저 끝나는 값을 반영한다.
   -n : IP 주소만으로 체크한다. DNS서버가 다운되었거나 사용할 수 없을 때 쓴다.
(4) 참고
   1) 원리: ping은 ICMP echo packet을 보내어 상대방에게 응답 패킷을 받아 네트워크의 연결 상태
           를 체크한다. 응답시간, 유실된 패킷 등의 상태를 알 수 있다.
   2) ping에 응답하지 않기
    ㄱ. 설명: /proc/sys/net/ipv4/icmp_echo_ignore_all 의 파일을 vi편집기로 열어보면 0이라는 값
             으로 되어있다. 0값은 ping에 응답을 하고 1로 수정하면 ping에 응답하지 않는다.
    ㄴ. 사용예
       [root@mybestone /root]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
   3) 주의점: ping 명령어를 잘못 사용하면 원격지 호스트에 대한 공격(attack)이 될 수 있으므로
             주의해야 한다.
(5) 사용예
    [posein@www posein]$ ping -c 4 www.yahoo.com
    PING www.yahoo.akadns.net (66.218.71.86) from 210.123.193.194 : 56(84) bytes of data.
    64 bytes from w7.scd.yahoo.com (66.218.71.86): icmp_seq=0 ttl=55 time=167.032 msec
    64 bytes from w7.scd.yahoo.com (66.218.71.86): icmp_seq=1 ttl=55 time=359.955 msec
    64 bytes from w7.scd.yahoo.com (66.218.71.86): icmp_seq=2 ttl=55 time=129.962 msec
    64 bytes from w7.scd.yahoo.com (66.218.71.86): icmp_seq=3 ttl=55 time=169.950 msec
    --- www.yahoo.akadns.net ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max/mdev = 129.962/206.724/359.955/89.862 ms
     => ping은 ICMP 패킷에 64Bytes 메시지를 실어서 보낸다. icmp_seq는 패킷의 순서를 나타내고
       time은 밀리세컨드(1/1000초) 단위로 이 값은 적게 나올 수록 상대편과 가깝거나 네트워크
       부하가 적다는 것을 의미한다.
(6) 특징 : ping이 사용하는 프로토콜은 ICMP(Internet Control Message Protocol)이며, 결과값중
           TTL(Time To Live)은 패킷이 살아서 갈 수 있는 라우팅 최대값이다.

4.ifconfig
(1) 개요 : ifconfig는 interface config의 약자로 네트워크 인터페이스 관련 명령어로 설정하거나
           직접확인하는 명령어이다.
(2) 사용법
   ifconfig [interface] [address] [up/down] [option]
    => (설명)
      interface : NIC(Network Interface Card)를 말하며, 보통 랜(LAN)카드 또는 이더넷(Ethernet)
                 카드라 한다. 리눅스에서는 랜카드가 하나인 경우 eth0으로 설정되며, 만약 두개를
                 장착하면 두번째 랜카드는 eth1이 된다.
      address : 보통 IP가 부여된다.
      up/down : 네트워크를 활성화/비활성화 시킨다.
      option : netmask, broadcast등을 설정할 수 있다.
(3) 사용예
   1) ethernet카드에 부여된 IP확인
     ifconfig [인터페이스이름]
       => 현재 네트워크 인터페이스에 설정되어 있는 값을 알 수 있다. 만약 인터페이스 이름을
         입력하지 않으면 모든 인터페이스의 값을 출력한다. ifconfig -a 한것과 같다.
     예) ifconfig 
          => 현재 설정된 모든 이더넷카드의 IP설정을 보여준다.
         ifconfig eth0
          =>  첫번째 이더넷카드인 eth0의 IP설정을 보여준다.
   2) ethernet카드의 작동을 중지시키거나 활성화시킨다.
     ifconfig [인터페이스 이름] [up | down]
       => 특정 네트워크 인터페이스를 활성화(up)하거나 비활성화(down)시킨다.
     예) ifconfig eth0 down
           => eth0카드의 작동을 중지시킨다. ifdown eth0과 같다.
         ifconfig eth0 up
           => eth0카드의 작동을 활성화한다. ifup eth0과 같다.
   3) ethernet카드에 IP주소, 넷마스크값, 브로드캐스트값을 부여한다.
     ifconfig [인터페이스이름] [IP주소] [기타설정] [up | down] : 네트워크의 설정
     예) ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 up
          => 첫번째 랜카드인 eth0에 IP주소를 192.168.0.2를 부여하고 Netmask는 255.255.255.0
            Broadcast는 192.168.0.255를 부여하고 활성화시킨다.
         ifconfig eth0 192.168.0.2 up
          => 첫번째 랜카드인 eth0에 192.168.0.2를 부여하고 활성화시킨다. 보통 IP주소만 부여하
            면 Netmask등은 자동설정된다. 하지만 기본 클래스인 A,B,C 클래스가 아닌 다른 서브넷
            를 사용할 경우에는 꼭 부여해야 한다.
         ifconfig eth0 192.168.3.1 netmask 255.255.255.128 up
(4) ifconfig의 항목 설명
   1) Link encap : Ehternet => 장치에 사용중인 프로토콜이 Ethernet임을 나타낸다.
   2) Hwaddr : 이더넷 카드에 있는 고유 하드웨어 주소로, 48비트로 되어 있다. 보통 MAC(Media
              Address Control)주소라고도 한다.
   3) inet addr : IP주소를 나타낸다.
   4) Bcast : 브로드 캐스트 주소를 나타낸다.
   5) Mask : 넷마스크(Netmask)값을 나타낸다.
   6) UP : 인터페이스가 활성화되어 있음을 나타낸다.
   7) BROADCAST : 브로드 캐스트를 사용한다.
   8) RUNNING : 동작중임을 뜻한다.
   9) MULTICAST : 멀티 캐스트를 사용한다.
   10) MTU : Maximum Transmission Unit의 약자로 한번에 전송할 수 있는 최대 패킷의 크기를
            말한다.
   11) Metric : 라우팅할 때 참조되는 거리로 로컬인 경우 값이 1이 된다.
   12) RX/TX : 받은 패킷/전송한 패킷의 총 개수(packets), 그 중 에러가 발생한 패킷의 수는
              errors에, 그냥 버린 패킷의 수는 dropped, 손실된 패킷의 개수는 overruns에 표시
              된다.
   13) collisions : 충돌이 발생한 패킷의 수
   14) Interrupt : Ethernet 카드가 현재 사용중인 IRQ
   15) Base address : Ethernet 카드가 현재 사용중인 주소
(5) IP Alias 사용하기
   1) 설명: Ethernet카드에 IP를 하나만 부여하는 것이 아니라 여러 개의 IP를 부여할 수 있다. 이
           러한 기능을 IP Alias라고 한다. 첫번째 Ethernet카드에 추가로 IP를 부여할 경우에는
           eth0:0, eth0:1 등으로 표기하여 부여하면 된다.
   2) 방법
     [root@www root]# ifconfig eth0:0 203.247.xxx.xxx
(6) 참고
   1) ifconfig명령으로 설정한 것은 시스템을 재부팅하면 그 정보가 사라진다. 따라서, 지속적으로
     유지하려면 /etc/rc.d/rc.local파일에 위의 설정을 입력해 놓거나 /etc/sysconfig/network-scr
     ipts/ifcfg-eth0파일에 설정해 놓아야 한다.
   2) ifconfig 명령으로 스니핑상태를 알 수 있다.
    ㄱ. 정상적인 상태
       [root@www /root]# ifconfig eth0
       eth0      Link encap:Ethernet  HWaddr 00:C1:26:03:65:08
                 inet addr:203.247.40.252  Bcast:203.247.40.255  Mask:255.255.255.0
                 UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                 RX packets:250100 errors:2 dropped:0 overruns:0 frame:0
                 TX packets:7404 errors:0 dropped:0 overruns:0 carrier:0
                 collisions:394 txqueuelen:100
                 Interrupt:5 Base address:0xf000
    ㄴ. 스니핑상태
       [root@www /root]# ifconfig eth0
       eth0      Link encap:Ethernet  HWaddr 00:C1:26:03:65:08
                 inet addr:203.247.40.252  Bcast:203.247.40.255  Mask:255.255.255.0
                 UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1  // PROMISC상태
                 RX packets:250100 errors:2 dropped:0 overruns:0 frame:0
                 TX packets:7404 errors:0 dropped:0 overruns:0 carrier:0
                 collisions:394 txqueuelen:100
                 Interrupt:5 Base address:0xf000

5.라우팅과 route 명령어
(1) 라우팅의 개요
   TCP/IP 프로토콜에서는 패킷들이 어디서부터 어디로 보내져야 하는지 결정이 되어야 하는데 이
  경로를 결정하는 것이 라우팅이다. 이러한 경로를 적어놓은 것을 라우팅 테이블이라고 한다.
(2) 라우팅의 종류
   1) 정적라우팅(Static Routing): 라우팅 경로를 시스템 관리자가 직접 적어주는 방식으로 일반적
                                 으로 사용하는 방법이다.
   2) 동적라우팅(Dynamic Routing)
    ㄱ. 설명: 라우팅 경로를 수동으로 작성하는 것이 아니라 라우팅 프로토콜을 사용해서 경로를
             동적으로 변화시키는 방법이다. 이것은 주로 라우터와 라우터 사이에 사용된다. 리눅스
             시스템을 라우터로 사용하지 않는다면 동적라우팅을 설정할 필요는 없다.
    ㄴ. 동적라우팅을 사용하는 프로그램의 종류
       a. routed: RIP(Routing Information  Protocol)을 사용하는 동적 라우팅 데몬프로그램이다.
       b. gated: OSPF(Open Short Path First)프로토콜을 사용하는 동적 라우팅 데몬프로그램이다.
(3) 라우팅관련 명령어: route
   1) 설명: route 명령어는 현재 사용하고 있는 리눅스 시스템의 라우팅 테이블이 어떻게 구성되어
           있는지 알 수 있다. 또한, 라우팅 정보를 추가,삭제할 수 있다.
   2) 사용법
     route [add/del] [-destination] [netmask 넷마스트값] [gw 게이트웨이값] [[dev] [NIC]]
      => 설명
      add/del : 라우팅 테이블에 추가(add)하거나 삭제(del)한다.
      -destination : 호스트주소(-host), 네트워크 주소(-net), default를 지정한다.
      netmask : 넷마스크값을 지정한다. 일반적으로 ifconfig명령으로 가능하므로 생략한다.
      gw : 호스트가 사용할 게이트웨이주소를 지정한다.
(4) 사용예
   1) 라우팅 테이블 확인
     [root@mybestone ~]# route
     Kernel IP routing table
     Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
     192.168.1.0     *               255.255.255.0   U     0      0        0 eth1
     203.247.40.0    *               255.255.255.0   U     0      0        0 eth0
     127.0.0.0       *               255.0.0.0       U     0      0        0 lo
     default         203.247.40.1    0.0.0.0         UG    0      0        0 eth0
      => 현재 설정되어 있는 라우팅 테이블을 보여준다. netstat -r 명령과 같다.
        (항목설명)
          - Destination: 목적지 네트워크 주소를 나타낸다. default로 표시되는 것은 목적지 네트
                        워크로 등록되지 않은 다른 모든 네트워크 주소를 처리하는 곳이다. 네트워
                        크 주소는 IP주소할당법을 따른다. 시스템의 주소가 192.168.1.1이고 넷마
                        스크가 255.255.255.0이면 C클래스이므로 네트워크 주소는 192.168.1.0 이
                        된다.
          - Gateway: 목적지 주소로 보내기 위한 게이트웨이 주소를 가리킨다. 보통 목적지가 자신
                    의 네트워크 인터페이스와 직접 연결되어 있는 것이면 '*'로 표시되고 그러지
                    않으면 게이트웨이의 IP주소가 입력된다.
          - Genmask: 목적지의 네트워크 주소를 알아내기 위한 넷마스크이다. IP주소에 Netmask를
                    AND연산자로 계산하면 목적지의 네트워크 주소를 알 수 있다.
          - Flags: 목적지 네트워크와의 연결 상태를 보여준다. 상태로 표시되는 기호는 다음과 같
                  다.
            U: 인터페이스가 사용되고 있음을 나타낸다.
            G: 라우트가 게이트웨이로 사용되고 있음을 나타낸다.
            H: 오직 단독 호스트만이 라우트를 거쳐서 접근할 수 있다. 이러한 경우의 루프백 엔트
              리는 127.0.0.1이 된다.
            D: 테이블 엔트리가 설정된 경우, ICMP 리다이렉트 메시지로 운영된다.
            M: 테이블 엔트리가 설정된 경우, ICMP 리다이렉트 메시지에 의해 수정되고 있음을 나타
              낸다.
          - Metric: 목적지 네트워크와의 거리(Hop count)를 나타낸다. 직접 연결되어 있으면 0이고
                   라우터를 하나 거칠때마다 1씩 증가한다.
          - Ref/Use: 다른 라우터가 목적지로 가기 위해 참조한 횟수와 사용한 횟수를 나타낸다.
          - Iface: 목적지 네트워크와 연결된 인터페이스를 가리킨다.
   2) 라우팅 정보 삭제
     route del -net [IP_Address] netmask [netmask값] dev [Net_interface]
      예) route del -net 192.168.3.0 netmask 255.255.255.0
   3) 라우팅 정보 추가
     route add -net [IP_Address] netmask [netmask값] dev [Net_interface]
      예) route add -net 192.168.3.128 netmask 255.255.255.192 dev eth0
   4) 기본 게이트웨이 삭제
     route del default gw [IP_Address] dev [Net_interface]
      예) route del default gw 192.168.3.1
   5) 기본 게이트웨이 추가
     route add default gw [IP_Address] dev [Net_interface]
      예) route add default gw 192.168.3.254 eth0

(주의) route명령도 시스템이 재부팅되면 그 정보는 모두 사라진다. 따라서 /etc/sysconfig/network
       와 /etc/sysconfig/network-scripts/ifcfg-eth0 파일을 직접수정해야 한다.

6. netstat
(1) 개요 : 네트워크의 연결 상태를 확인하는 명령
(2) 사용법
    netstat [option] [address family options]
(3) option
   -a : 연결된 모든 소켓을 출력
   -n : 기호화된 호스트나 포트이름, 유저이름 대신에 숫자로 표시한다. 예를 들면 www은 80으로
       표기한다.
   -p : 소켓에 대한 PID/프로그램을 출력
   -r : 라우팅 테이블을 출력
   -i : 인터페이스 테이블을 출력
   -s : SNMP(Simple Network Managemanet Protocol)와 같은 네트워크 통계를 출력
   -c : 계속되는 리스트를 출력
   -t : tcp를 이용하여 접속한 리스트를 출력한다.
   -u : udp를 이용하여 접속한 리스트를 출력한다.
(4)address family options
   1) 형태 : --protocol (inet, unix, ipx, ax25등)
   2) 사용법
      netstat --inet
(5)사용예
   1) netstat -anp
      => 연결된 모든 소켓의 PID및 프로그램을 출력하되 호스트, 포트이름등을 숫자로 출력한다.
   2) netstat -r
      => 라우팅 테이블에 대한 정보를 출력한다. route 명령의 결과와 유사하다.
   3) netstat -t
      => tcp로 접속한 리스트를 출력한다.
   4) netstat -inet -p
      => 인터넷으로 접속한 상태를 보여주고 프로그램과 PID를 출력한다.
(6) netstat명령의 결과에서 state부분에 나타나는 연결상태
   LISTEN : 서버의 데몬이 떠서 접속 요청을 기다리는 상태
   SYS-SENT : 로컬의 클라이언트 어플리케이션이 원격 호스트에 연결을 요청한 상태
   SYN_RECEIVED : 서버의 원격 클라이언트로부터 접속 요구를 받아 클라이언트에게 응답을 하였지만,
                 아직 클라이언트에게 확인 메시지는 받지 않는 상태
   ESTABLISHED : 3Way-Handshaking이 완료된 후 서로 연결된 상태
   FIN-WAIT1, CLOSE-WAIT, FIN-WAIT2 : 서버에서 연결을 종료하기 위해 클라이언트에게 종결을 요청
                                     하고 회신을 받아 종료하는 과정의 상태
   CLOSING : 흔하지 않지만 주로 확인 메시지가 전송도중 분실된 상태
   TIME-WAIT : 연결은 종료되었지만 분실되었을지 모를 느린 세그멘트 위해 당분간 소켓을 열어놓은
              상태
   CLOSED : 완전히 종료된 상태

7. traceroute
(1) 개요 : 특정 호스트 또는 연결된 노드를 알아보는 명령어로 특히 라우팅에 어떤 장애가 있을
           경우 그 위치를 파악할 수 있다. 윈도우계열의 tracert 명령과 유사하다. 루트권한자만
           사용가능한 명령이다.
(2) 사용법
   traceroute [Host_name or IP_Address]
(3) 사용예
   [root@www root]# traceroute www.yahoo.co.kr
   traceroute to yahoo.co.kr (211.32.119.151), 30 hops max, 38 byte packets
    1  203.247.40.1 (203.247.40.1)  1.692 ms  1.688 ms  1.663 ms
    2  203.247.37.2 (203.247.37.2)  0.656 ms  0.493 ms  0.456 ms
    3  yahoo.co.kr (211.32.119.151)  0.593 ms  0.854 ms  0.592 ms
     => 각 3개의 TTL값을 전달하여 시간을 보여준다.
(4) 참고
   1) traceroute 동작원리
    ㄱ. 1.1.1.1에서 목적지 10.10.10.10에 대한 TTL=1인 ICMP echo request를 생성하고 전달한다.
    ㄴ. 첫번째 ip네트워크장비가 TTL을 1로 감소시키고 TTL=0이 되므로 TTL이 모자라 더이상 packet
       전달할 수 없다는 ICMP time exceed를 1.1.1.1에게 전달하여 delay를 알아낸다.
    ㄷ. 1.1.1.1에서는 TTL=2인 ICMP echo request를 보낸다. 목적지까지 가는 경로상의 두번째 장비
       가 ICMP time exceed를 발생시키고 1.1.1.1에서는 이것으로 두번째 장비까지의 delay를 알아
       낸다.
    ㄹ. 이 같은 방법을 연속적으로 하여 해당 목적지까지 계속 보낸다.
   2) traceroute time out : *
    ㄱ. 종종 목적지 중간경로에 있는 장비에서 timeout현상(*로 표기됨)이 발생하는데 이것이 sourc
       e와 destination간의 네트웍상태를 정확히 나타내는 것은 아니다.
    ㄴ. 몇몇 IP네트워크 장비에서 ICMP packet이 아닌 다른 일반적인 packet에 보다 많은 시간을
       할애하도록 설계된 경우가 있는데, 해당 IP네트워크장비가 매우 바쁠경우에 TTL=0인 packet에
       대해서 ICMP time exceed등을 생성하고 전달하는 작업을 하지 않는 경우가 많다.
    ㄷ. 다른 경우는 중간경로에 있는 IP네트워크 장비가 아예 ICMP echo reply 혹은 ICMP time exce
       ed를 발생하지 않는 경우인데 주로 이러한 장비들은 Firewall인 경우가 많다. 그러나 Firewal
       l이라고 해서 ICMP echo reply, ICMP time exceed를 생성하지 않는 것이 아니며, 관리자의 설
       정에 따라 좌우된다.
    ㄹ. *의 결과는 traceroute수행시 중간경로상의 timeout현상에 대해서는 무시해도 좋으며, 최종
       목적지와 ping상태가 좋은지를 파악하는 것이 보다 중요하다.

8. hostname
(1) 개요 : 호스트네임을 화면에 출력한다. 명령어는 /bin/hostname에 있다.
(2) 사용법
   1) hostname 출력
     hostname [option]
      *option
       -v : 호스트네임을 출력한다.
       -d : DNS 도메인 네임을 출력한다.
           예)eles.co.kr로 등록했으면 eles.co.kr로 값이 나타난다.
       -f : 완전한 호스트네임(FQDN)을 출력한다.
           예)www.eles.co.kr
       -a : 호스트 네임에 대한 Alias이름을 출력한다.
       -i : 호스트 네임에 대한 IP주소를 출력한다.
   2) hostname 바꾸기
    예) hostname new_hostname
(3) 사용예
   1) [posein@www posein]$ hostname
      www
   2) [posein@www posein]$ hostname -i
      203.247.xxx.xxx
(4) 참고
   1) 설명: hostname 명령어를 이용하여 hostname을 변경한 경우 재부팅을 하면 변경전의 값으로 돌
           아간다. 그러므로, 완전한 변경을 하려면 다음과 같은 절차를 거쳐야 한다.
   2) 방법
    ㄱ. /etc/sysconfig/network 파일에서 'HOSTNAME'이라는 항목의 값을 변경한다.
    ㄴ. /etc/rc.d/init.d/network restart하거나 재부팅한다.

9. host
(1) 개요 : 원격의 호스트에 대한 정보를 출력
(2) 사용법
   host [option] 호스트명
(3) option
   -a: -a: 원격호스트에 모든정보(A, MX, NS 등)를 보여준다.
   -v: 좀 더 자세히 출력한다.
(4) 사용예
   1) [root@www root]# host kr.yahoo.com
        => 기본 IP주소에 대한 정보를 보여준다.
   2) [root@www root]# host -a daum.net
        => 모든 정보를 보여준다.

10. nslookup
(1) 개요 : DNS를 조회하는 명령이다. 바로 값을 DNS서버를 조회할 수도 있고, 여러 도메인을
           조회할 경우에는 대화형으로 조회할 수도 있다.
(2) 사용법
   nslookup [option] [hostname]
(3) option
   -type=mx : mx설정관련 부분을 출력한다.
(4) 사용예
   1) nslookup => 현재서버의 DNS이름과 IP를 출력하고, '>'와 함께 대화형모드로 접속한다.
   2) nslookup yahoo.co.kr => 현재서버의 DNS이름과 IP출력과 함께 yahoo.co.kr의 사이트의 정보도
                            함께 출력한다.
   3) nslookup -type=mx yahoo.co.kr => yahoo.co.kr의 mx(메일설정관련)에 대한 정보도 출력한다.
   4) 대화형모드의 사용 : 아무 옵션이나 도메인 없이 그냥 nslookup이라는 명령만 내리면 '>'와
                         함께 대화형 모드로 접속한다. 여기에서는 여러 도메인의 정보를 조회할
                         경우에 편리하다. 조회후에는 exit를 치면 셀프롬프트상태로 빠져나온다.
    ㄱ. > server yahoo.co.kr => 대화형모드 접속후에는 'server'라는 입력한 후 도메인네임을 적
                                 어주면 정보가 나타난다.
    ㄴ. > set type=mx
        > mybestone.com
        Server:         203.247.40.252
        Address:        203.247.40.252#53

        mybestone.com   mail exchanger = 10 mybestone.com.
         => 특정도메인의 메일서버를 확인한다.
    ㄷ. > set type=ns
        > mybestone.com
        Server:         203.247.40.252
        Address:        203.247.40.252#53

        mybestone.com   nameserver = ns.mybestone.com.
         => 특정도메인의 네임서버를 확인한다.
    ㄹ. > exit
         => nslookup 대화형모드를 중단한다. 

11. dig
(1) 설명: 도메인명(FQDN:Fully Qualified Domain Name)으로 정보를 알아볼 수 있는 명령이다.
(2) 사용법
   dig 도메인명 [type]
    => [type] 에는 MX, A, ANY 등 DNS 서버설정에 사용하는 값을 지정할 수 있다.
(3) 사용예
   1) [posein@www posein]$ dig www.daum.net

      ; <<>> DiG 9.2.1 <<>> www.daum.net
      ;; global options:  printcmd
      ;; Got answer:
      ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47916
      ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 2, ADDITIONAL: 0

      ;; QUESTION SECTION:
      ;www.daum.net.                  IN      A

      ;; ANSWER SECTION:
      www.daum.net.           86400   IN      A       211.233.28.114
      www.daum.net.           86400   IN      A       211.233.28.115
      www.daum.net.           86400   IN      A       211.233.28.116
      www.daum.net.           86400   IN      A       211.32.117.21
      www.daum.net.           86400   IN      A       211.233.28.112
      www.daum.net.           86400   IN      A       211.233.28.113

      ;; AUTHORITY SECTION:
      daum.net.               86400   IN      NS      ns2.daum.net.
      daum.net.               86400   IN      NS      ns.daum.net.
  
      ;; Query time: 159 msec
      ;; SERVER: 203.247.40.252#53(203.247.40.252)
      ;; WHEN: Wed Jan 29 09:40:20 2003
      ;; MSG SIZE  rcvd: 161
   2) [posein@www posein]$ dig www.daum.net mx
        => 메일서버 세팅인 MX 설정관련 부분만 보여준다.

(참고) ARP(Address Resolution Protocol)
(1) 주소결정 프로토콜이라고 한다.
(2) 하드웨어주소(NIC 주소, MAC 주소라고도 함)를 IP주소(논리주소)와 연계시키기 위한 프로토콜.
(3) 48bit인 하드웨어 주소를 32bit인 IP주소와 매핑시킨다.
(4) 목적 호스트의 IP주소를 알고 있는데, 물리주소(MAC address)를 모르는 경우에 사용한다.

12. arp
(1) 개요 : ARP(Address Resolution Protocol)캐쉬를 설정하는 것으로 ARP캐쉬는 현재 접속되어
           있는 32비트 IP주소를 하드웨어주소(MAC address)로 바꾸어서 기억하는 곳이다. 이
           ARP캐쉬를 보면 현재 들어와 있는 호스트를 알아낼 수 있다.약 15분정도 쓰이지 않은
           MAC주소는 ARP캐쉬에서 제거된다.
(2) 사용법
   arp [option]
(3) option
   -a : ARP캐쉬에 기록되어 있는 것 중 특정한 호스트의 정보를 보여준다.
   -d : ARP캐쉬에서 해당 호스트를 제거한다.
   -n : 결과를 도메인 주소대신에 32bit IP주소로 출력한다.
(4) 사용예
   1) [root@www /root]# arp
      AddressHWtypeHWaddress    Flags Mask  Iface        Flags Mask            Iface
      cslee.hannam.ac.kr     ether   00:A0:C9:8E:8C:4C   C                     eth0
      192.168.0.3            ether   00:60:97:AA:FF:71   C                     eth1
      203.247.40.1           ether   00:E0:16:7C:63:8C   C                     eth0
   2) [root@www /root]# arp -n
      Address                 HWtype  HWaddress           Flags Mask            Iface
      203.247.40.164          ether   00:A0:C9:8E:8C:4C   C                     eth0
      192.168.0.3             ether   00:60:97:AA:FF:71   C                     eth1
      203.247.40.1            ether   00:E0:16:7C:63:8C   C                     eth0

13. 네트워크 설정관련 유틸리티
(1) 개요
  ifconfig, route, netstat, ping, traceroute 등은 리눅스를 포함한 모든 유닉스계열에서 공통적으
로 사용되는 명령어이다. linuxconf(레드햇리눅스 7.1 이전에 사용)는 리눅스에서만 실행되며,
netconfig는 레드햇리눅스에서 text(콘솔)모드에서 사용되고, netcfg와 netconf는 레드햇리눅스의
X-window에서 실행된다. 물론 netconf명령은 콘솔모드에서도 실행되지만 X-window만큼 원할하지 못
하다.
(2) 관련유틸리티
   1) netcofig
    ㄱ. 설명: 콘솔에서 손쉽게 IP주소, 넷마스크, 게이트웨이, 네임서버 주소를 입력할 수 있다.
             리눅스를 텍스트모드로 설치할 때 나타나는 설정유틸리티로 kudzu라는 데몬이 부팅시
             에 이용하는 유틸리티이기도 하다.
    ㄴ. 사용법
       netconfig [option] [Network_interface]
    ㄷ. option
       --device : 이더넷카드 디바이스명을 지정한다.
    ㄹ. 사용예
      a. [root@www root]# netconfig
          => 기본 eth0의 네트웍을 설정한다.
      b. [root@www root]# netconfig --device eth1
          => eth1의 네트웍을 설정한다.

   2) netconf : linuxconf에 포함되어 있는 모듈로 네트워크에 관련된 모든 설정을 할 수 있다.
               (레드햇 7.x버전이하만 가능하고 레드햇 8 버전 이후에서는 지원하지 않는다.)
   3) netcfg : X-window에서 지원하는 네트워크 유틸리티이다. 이 유틸리티를 사용하면
             /etc/sysconfig/network파일과 /etc/sysconfig/network-scripts/ifcfg-eth#파일에
             기록되고, 네임서버는 /etc/resolv.conf에 기록된다. (레드햇 7.x버전이하만 가능하고
             레드햇 8 이후버전에서는 지원하지 않는다.)
   4) redhat-config-network
    ㄱ. 설명: X-window인 GNOME 기반 네트워크 유틸리티로 레드햇 8 버전에서 지원한다. neat라고
             입력해도 된다.
    ㄴ. 사용법
       redhat-config-network
       neat
    ㄷ. 참고
       이 툴을 사용하면 /etc/sysconfig/networking이라는 디렉토리안에 설정과 관련된 디렉토리 및
      파일들이 생성된다. 또한 /etc/sysconfig/network-scripts 디렉토리안의 설정과 같은 파일들이
     /etc/sysconfig/networking/profiles 디렉토리안에 같이 생성된다.

14. 기타 네트워크관련 유틸리티
(1) mii-tool
   1) 설명: Media Independent Interface(MII) Tool의 약자로 보통 네트워크 인터페이스의 상태를
           체크하고 설정하는 유틸리티이다.
   2) 사용법
     mii-tool [option] [Network_interface]
   3) option
     -v : 상태정보를 더 자세히 보여준다. (--verbose)
     -r : 자동인식을 위해 재시작한다. (--restart)
     -F : 강제로 설정한다. (--force)
   4) 사용예
    ㄱ. [root@www root]# mii-tool
        eth0: autonegotiation failed, link ok
        eth1: negotiated 100baseTx-FD, link ok
         => 현재 설정된 이더넷카드의 정보를 보여준다.
    ㄴ. [root@www root]# mii-tool -v
        eth0: autonegotiation failed, link ok
          product info: vendor 00:00:00, model 0 rev 0
          basic mode:   autonegotiation enabled
          basic status: autonegotiation complete, link ok
          capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
          advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
        eth1: negotiated 100baseTx-FD, link ok
          product info: vendor 00:00:00, model 0 rev 0
          basic mode:   autonegotiation enabled
          basic status: autonegotiation complete, link ok
          capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
          advertising:  100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
          link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
           => 이더넷카드의 정보를 좀 더 자세히 보여준다.
    ㄷ. [root@www root]# mii-tool -v --force 100baseTx-FD eth1
          => 자동인식한 설정을 없애고, 강제적으로 설정을 한다.
    ㄹ. [root@www root]# mii-tool -r
          => 자동으로 인식하도록 한다.
(2) mtr
   1) 설명: 네트워크 진단 도구로 traceroute 명령과 유사하며 각각의 라우터에 패킷을 보내 확인
           한다.
   2) 사용법
     mtr 도메인명
   3) 사용예
     mtr www.yahoo.co.kr

우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2021/03   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
  1. 2012/12 (2)
  2. 2012/04 (3)
  3. 2012/03 (6)
  4. 2012/02 (6)
  5. 2012/01 (2)