RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

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

 

1. 소스를 이용한 프로그램제작과 설치
(1) 오픈소스 프로그램얻기
   1) 프로그램형태: 소스는 보통 tar압축파일형태로 되어 있다. 파일의 형태를 자세히 보면 보통
                   tar.gz이나 tgz로 되어 있다. 이 소스코드에는 원래 프로그램들이 계층적 디렉
                   토리 구조로 되어있고 .C언어로 만들어진 소스코드, 컴파일을 위한 Makefile,
                   그리고 각종 문서들이 포함되어 있다.
   2) 프로그램구하기: 소스프로그램은 GNU웹사이트를 이용해 엄청나게 다양한 소스를 얻을 수 있다.
                     아파치같은 웹서버용 프로그램은 http://www.apache.org에서 얻는 등 대부분
                     무료로 제공하고 있다.
   3) 소스프로그램 압축풀기
     ㄱ. 개요: tar명령의 zxvf옵션을 이용하여 푼다.
     ㄴ. 사용예
        tar zxvf apache_1.3.26.tar.gz
(2) 소스컴파일
   1) 개요: 소스를 풀었으면 컴파일을 할 수 있다. 컴파일을 하기 위해서는 configure스크립트,
           GNU C 컴파일러인 gcc, 의존성 검사기인 make등의 응용프로그램이 필요하다.
   2) configure : 해당소스프로그램의 환경설정을 하는 스크립트이다. 대규모 소스 코드 패키지들은
                 대부분 소스 코드의 최상위 디렉토리에 존재한다. 사용자는 이 스크립트를 수정하
                 거나 특별히 설정할 필요는 없다. 이 스크립트는 성공적인 컴파일을 하기 위해
                 필요한 컴파일러, 라이브러리,유틸리티, 기타 정보를 시스템에서 찾아낸다. 이 스
                 크립트는 이 정보를 이용해 사용자 시스템에 적당한 소프트웨어 패키지가 생성되도
                 록 Makefile을 만든다.
   3) make: 소프트웨어를 컴파일하는 유틸리티이다. make는 타겟과 의존성(dependencies)관계하에서
           작업하고 최종적으로 실행파일을 만든다.
   4) make install: 컴파일된 실행파일을 지정한 속성으로 지정된 디렉토리에 설치하도록 한다.

2. 공유라이브러리 관리
(1) 공유라이브러리의 개요
   리눅스 시스템에서 어떤 프로그램이 컴파일될 경우 디스크, 메모리, 기타 기능을 처리하는 시스템
  라이브러리 함수가 필요하게 된다. 예를 들어, 프로그램에서 printf()가 사용되었지만 프로그래머
  는 printf()의 소스코드를 제공하지 않고 이미 이런 함수들이 포함되어 있는 라이브러리를 대신
  이용하기 원할 것이다. 컴파일러가 printf()가 사용된 코드를 링크할 필요가 있을 경우 이것은 시
  스템 라이브러리에서 찾을 수 있고 실행 파일로 복사된다. 이러한 라이브러리를 이용해 만들어진
  실행 파일은 독립적으로 존재하며 실행할 때에 추가 코드가 필요하지 않으므로 '정적으로 링크
  되었다.(statically linked)'고 말한다. 정적으로 링크된 파일은 몇가지 단점이 있다. 우선 모든
  라이브러리 함수가 실행파일에 포함되어 있으므로 파일 크기가 비교적 크다. 또한 동일한 라이브러
  리가 포함된 여러 프로그램이 실행될 경우 메모리의 낭비가 생긴다. 이러한 문제를 없애기 위해
  많은 프로그램이 동적으로 링크된다. 이러한 프로그램은 동일한 루틴을 이용하지만 파일에 라이브
  러리 코드가 포함되어 있지 않고 대신 실행 시에만 링크가 된다. 이 동적 링크는 여러 프로그램이
  메모리에서 동일한 라이브러리를 이용할 수 있게 하고 파일의 크기도 작게한다. 동적으로 링크되는
  라이브러리는 많은 응용프로그램에 공유되며 이를 공유라이브러리(Shared libraries)라 부른다.
(2) 공유라이브러리의 특징
   1)의존성: 동적으로 링크된 프로그램은 적어도 하나 이상의 공유라이브러리가 필요하다. 만일
            필요한 라이브러리가 존재하지 않거나 찾을 수 없으면 프로그램은 실행되지 않는다.
            예를 들면, GNOME 그래픽환경에서 동작하는 응용프로그램을 실행하려고 할 때 관련된
            GTK+라이브러리가 설치되어 있지 않은 경우이다.
   2)링크: 동적으로 링크된 실행 파일은 실행시에 공유 오브젝트에 대한 동적 링커인 ld.so에 의해
          검사된다. 이 프로그램은 실행 파일을 점검하고 시스템의 공유 라이브러리에 대한 의존성
          문제를 해결한다. 만일 ld.so가 지정된 라이브러리를 찾지 못하면 파일은 실행되지 못한
          다.
(3) 관련명령어
   1) ldd
     ㄱ. 설명: 각 프로그램에서 필요한 공유라이브러리를 보여준다. 라이브러리명과 파일시스템에서
              의 위치를 보여준다.
     ㄴ. 사용법
        ldd 프로그램
     ㄷ. 사용예
        [posein@www posein]$ ldd /bin/bash
        libtermcap.so.2 => /lib/libtermcap.so.2 (0x4002e000)
        libdl.so.2 => /lib/libdl.so.2 (0x40032000)
        libc.so.6 => /lib/i686/libc.so.6 (0x40036000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
         => 네 개의 공유라이브러가 필요하다.
   2) ldconfig
     ㄱ. 설명: 기본 공유라이브러리의 위치인 /usr/lib, /lib와 /etc/ld.so.conf에 등록된 디렉토리
              , 그리고 지정된 위치를 추가해 ld.so캐시 파일을 갱신한다.
     ㄴ. 사용법
        ldconfig [option] [라이브러리_위치]
     ㄷ. option
        -p : 캐시를 새로생성하지 않고 현재 캐시 내용만 보여준다.
        -v : 실행시 진행 상황을 보여준다.
     ㄹ. 사용예
        a. [root@www /root]# ldconfig
            => 캐시를 다시 생성한다.
        b. [root@www /root]# ldconfig -p
            => 현재 라이브러리를 보여준다.

3. 데비안 패키지관리(Debian Package Managment)
(1) dpkg(Debian Package)
   1) 개요: 데비안 리눅스의 패키지를 관리하는 툴로 데비안 리눅스 환경에서 각종 패키지를 설치,
           삭제하고 관리한다.
   2) 우선순위: 데비안 패키지는 리눅스안에 포함되어 있어아 할 필요성과 패키지의 의존성을 기준
               으로 한 우선순위(Priority)가 있다.
    ㄱ. Required: 시스템이 올바르게 동작하기 위해 꼭 설치되어야 하는 패키지들
    ㄴ. Import!ant: 대부분의 유닉스계열 운영체제에서 볼 수 있는 패키지들
    ㄷ. Standard: 표준 데비안 GNU/리눅스 시스템을 구성하는 패지지들
    ㄹ. Optional: Tex, X Window 시스템
    ㅁ. Extra: 몇몇 개인들에게만 유용한 패키지들 (예. HAM radio등)
   3) 데비안 패키지파일의 구조
     package_1.0-2.deb
     => (설명) package: 패키지이름이 온다.
               1.0: 해당 패키지의 버전을 나타낸다. 보통 밑줄로 버전을 나타낸다.
               2: 패키지 릴리즈이다.
               deb: 데비안 패키지의 확장자이다.
   4) 설명: 데비안 패키지관리 명령인 dpkg는 주요 작업을 지정하는 액션과 액션 기능을 제어하는
           옵션이 없거나 하나 이상의 옵션으로 구성되어 있다.
   5) dpkg의 특징: 이 명령은 /var/lib/dpkg에 패키지 정보를 저장한다. 이 파일에는 다음과 같은
                  두가지 정보가 저장된다. 이 정보들은 사용자가 직접 수정할 필요는 없다.
    ㄱ. available: 사용가능한 패키지목록
    ㄴ. status: 어떤 패키지가 설치되었는지, 어떤 패키지가 삭제 표시되었는지 등의 패키지의 속
               성이다.
   6) 사용법
     dpkg command 파일
   7) command
    -i package_name: 해당 패키지를 설치한다.(--install) 구버전 파일을 백업하고 패키지를 풀어
                    새로운 파일을 설치하고 설정한다.
    -R package_directory: 주어진 디렉토리 내의 모든 패키지를 설치한다.(-i와 함께 사용)
    -l package_name: 해당 패키지의 각종 정보를 보여준다.
    -r package_name: 패키지를 제거한다.(--remove) 설정파일은 남긴다.
    -c package_name: 해당 패키지에 포함되어 있는 모든 파일 목록을 보여준다.
    -l : 설치된 모든 패키지 목록을 보여준다.
    --unpack package_file: 패키지로부터 파일을 추출
    --configure package_name: 정확한 패키지 설치를 위하여 묶이지 않는 패키지를 설정한다.dpkg가
                             conf file과 같은 설정파일을 운영할 것을 요구
    --pending: 추출된 모든 패키지 파일들이 설치완료
    --purge package_name: 패키지와 해당 패키지의 conf file도 제거
    -s or package_name: 상태 데이터베이스에서 패키지정보를 출력(--status)
    --force: --downgrade, --configure-any, --remove-reinstreq, --remove-essential등과 함께
            사용하는 강제옵션
    --downgrade: 설치하려는 패키지가 이미 설치되어 있는 패키지보다 이전 버전일 때도 설치한다.
    --configure-any: 해당 패키지와 의존성이 있는 다른 패키지가 파일이 추출되기만하고 구성되어
                    있지 않으면 그 패키지가지 구성한다.
    --remove-reinstreq: 패키지가 재설치하기로 status file에 표시되어 있다면 이 패키지를 제거한
                       다.
    --merge-avail package_name : 패키지에 대한 정보를 추가할 수 있다.
   8) 사용예
    ㄱ. dpkg -i /usr/debian/stable/binary-i386/admin/cron_3.0p11.deb
       => 시스템에 cron이라는 패키지가 설치된다.
    ㄴ. dpkg -i -R /usr/debian/stable/binary-i386/admin
       => admin 디렉토리 아래있는 모든 패키지가 설치된다.
    ㄷ. dpkg --unpack /usr/local/Debian/archive
       => 모든 패키지가 풀린다.
    ㄹ. dpkg --configure cron
       => 패키지에 알맞게 구성된 세부사항을 구성한다.
    ㅁ. dpkg --pending
       => --unpack과 --configure로 패키지를 풀고 구성한 뒤에 패키지를 조성하여 패키지 설치를
         완성한다.
    ㅂ. dpkg -r cron
       => 패키지를 제거하지만 conf file은 삭제되지 않는다.
    ㅅ. dpkg -r -a | --pending
       => status file에서 삭제 표시된 모든 패키지를 제거한다.
    ㅇ. dpkg --purge -a | --pending
       => status file에서 삭제 표시된 모든 패키지와 conf file을 제거한다.(status file은 dpkg
         와 dselect에 의해 유지된 파일의 모든 정보를 저장하고 있는 파일이다.)
    ㅈ. dpkg -s mc
       => 패키지 버전, 패키지 관리자, 패키지의 간단한 설명, conf file등 정보를 보여준다.
(2) dselect
   1) 설명: dpkg는 명령행(command-line)유틸리티로 사용방법이 쉽지 않아 curses메뉴 방식으로
           등장한 것이 dselect이다.
   2) 사용법
     dselect
(3) alien
   1) 설명: 데비안 패키지가 아닌 패키지를 변환하거나 설치한다.
   2) 사용법
     alien [option] 파일
   3) 사용예
    ㄱ. alien package.rpm
       => package.deb라는 파일을 생성한다.
    ㄴ. alien -i package.rpm
       => 데비안 시스템에 데비안 패키지가 아닌 패키지를 설치한다.
   4) 지원되는 패키지형식
    ㄱ. 레드햇의 .rpm
    ㄴ. 스탬피드(Stampede)의 .slp
    ㄷ. 슬랙웨어의 .tgz
    ㄹ. 일반 tar.gz

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

 

1. 개요
점점 X 윈도우에 대한 관심과 활용도가 높아지면서 다양한 툴들이 제공되고 있다. 버전이 올라가면
서 더욱 더 많은 툴들이 배포판에 기본으로 들어가고 있다. 예전에 어렵게 텍스트로 편집하던 것들이
이젠 편리한 도구로 제공되고 있다. 레드햇8.0 기준으로 편하게 사용할 수 있는 툴들에 대해 간단히
살펴본다.

2. 마우스(Mouse) 사용하기
(1) 개요: X 윈도우는 기본적으로 3버튼 마우스를 사용한다. 그러나 일반적으로는 2버튼 마우스를
          사용한다. 2버튼 마우스를 사용해서 3버튼 마우스의 기능을 하려면 에뮬레이트기능을 사용
          해야 한다. 에뮬레이트 기능을 설정하면 2개의 버튼을 동시 누르면 가운데 버튼의 역할을
          하게 된다. 최근 버전에서는 휠(Wheel)기능도 지원하지만 응용프로그램에 따라 휠기능이
          되지 않을 수도 있다.
(2) 설정: 레드햇 리눅스에서는 마우스 설정용 명령어로 mouseconfig 라는 명령을 제공한다. 물론
          setup 명령을 실행뒤에 Mouse Configuration이라는 메뉴를 선택해도 된다.
(3) 마우스 사용법
   1) 왼쪽버튼 : 영역설정할 때 쓴다.
   2) 가운데버튼: 복사된 글을 붙이기 할 때 쓴다.(2버튼 마우스에서는 2개의 버튼을 동시에 누름)
   3) 오른쪽버튼 : 설정된 영역을 복사할 때 쓴다.

3. 유용한 도구들
(1) GUI Terminals
   1) xterm : Xfree86에서 제공하는 것으로 최초의 X용 터미널이다.
   2) gnome-terminal : GNOME에서 제공하는 터미널로 환경설정이 쉽다.
   3) kconsole : KDE 표준 터미널이다.
(2) GUI Editor
   1) xemacs : X용 emasc 편집기
   2) gvim : vim의 그래픽버전이다.
   3) gedit : GNOME에서 제공하는 간단한 편집기이다.
   4) kwrite : KDE에서 제공하는 편집기이다.
(3) 시스템 도구(System Tools)
   1) 시스템 감시기(gnome-system-monitor) : 프로세스의 상태를 보여준다. top 명령에 기반을 두고
                                           있어서 메모리상태와 CPU상태를 보여주며, 추가로 프로
                                           세스를 종료시킬 수도 있다.
   2) nautilus : 그놈용 파일 매니저 및 웹브라우저이다.
   3) gftp : 그래픽한 ftp 클라이언트 프로그램이다. 로컬과 원격지가 세로로 나뉘어져 있으며, 북
            마크를 지원한다.
   4) gimp: GNU에서 제공하는 이미지 편집프로그램이다.
   5) xchat: IRC 용 클라이언트 프로그램이다.
   6) kdevelop: KDE용 환경설정 프로그램이다.
(4) 웹브라우저(Web Browser)
   1) mozilla: 표준 웹브라우저이다.
   2) galeon: GNOME에서 제공하는 웹브라우저로 mozilla를 기반으로 만든 브라우저이다.
   3) konqueror : KDE 용 파일 매니저 및 웹브라우저이다.
   4) lynx : 텍스트 모드용 브라우저이다.
   5) links : 약간 발전된 형태의 텍스트모드용 브라우저이다.
(5) 메일 클라이언트
   1) evolution: GNOME에서 제공하는 메일 클라이언트 프로그램으로 스케줄 및 연락처 관리기능을
                제공한다.
   2) balsa: GNOME에서 제공하는 메일 클라이언트 프로그램으로 프로그램이 간단하다.
   3) mozilla mail: mozilla 웹 브라우저에서 제공하는 메일 클라이언트 프로그램이다.
   4) kmail: KDE 메일클라이언트 프로그램이다.
(6) 오피스(Office)관련 응용프로그램
   1) koffice: KDE에서 제공하는 오피스 패키지이다. kword, kspread, kpresenter, kontour, kchart
              등이 있다.
   2) abiword: 워드프로그램으로 MS의 Word97과 호환된다.
   3) gnumeric: 엑셀과 유사한 스프레드시트 프로그램이다.
   4) Open Office: StarOffice 패키지의 Open Source 버전이다.
(7) 이미지 관련 응용프로그램
   1) display: ImageMagick 라는 패키지에 들어 있는 이미지 편집프로그램이다.
   2) convert: Image형태를 바꿀 수 있는 텍스트 프로그램이다.
   3) gqview: 이미지 뷰어 프로그램이다.
   4) eog(Eye of Gnome): '그놈의 눈'이라는 프로그램으로 이미지 뷰어 프로그램이다.
(8) 음악관련 응용프로그램
   1) xmms: 오디오 플레이어로 프러그인을 지원한다.
   2) gnome-volume-control: GNOME에서 제공하는 표준 오디오 믹서이다.
   3) gnome-cd: GNOME에서 제공하는 CD플레이어이다.

4. X 환경설정 프로그램
(1) 설명: 레드햇 8.0버전부터는 X 설정하는 명령이 바뀌었다. 예전에는 Xconfigurator라는 명령으
          로 설정하였지만 현재는 redhat-config-xfree86 이라는 프로그램으로 바뀌었다.
(2) redhat-config-xfree86 에서 지원하는 목록
   1) X configuration 관련 도구
   2) Video Card 설정
   3) 모니터 설정
   4) 해상도 설정
   5) 색상도 설정

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

 

1. X-window 의 탄생
X 윈도우 시스템은 DEC의 Athena프로젝트의 일환으로 MIT의 컴퓨터학과 연구실에서 처음으로 개발을
시작하였다. 1984년 최초 버전이 발표되었지만, 좀 더 구체적인 모습은 1986년 X10.4가 공개되면서
그 모습 갖추고 되었다. 1987년 가을경에 현재의 모습과 유사한 X11이 만들어졌다. X11이 공개된 후 수
많은 워크스테이션 업체에서 X 윈도우를 표준 윈도우 시스템으로 채택하기 시작했고, 기술개발과 배
포를 위해 여러 업체가 모여 X 컨소시엄(http://www.x.org)을 결성하여 관리하게 되었다. 그 후 X
컨소시엄이 오픈그룹 산하단체로 바뀌었지만 근본적인 변화는 없으며 비교적 자유로운 라이선스로
인해 무료 또는 저렴한 가격으로 누구나 사용할 수 있다. 이렇듯 X 컨소시엄의 규격에 부합한다면
누구든지 X 윈도우를 개발할 수 있기 때문에 다양한 상용 또는 공개 X 서버가 발표된 상태이다.

2. X-window 와 리눅스
리눅스용 X-window(X 또는 X11이라고 함)는 XFree86프로젝트에서 만들었다. 초기의 XFree86 프로젝
트는 인텔 x86기반 플랫폼으로 개발하였으나 현재는 매킨토시, 알파, 스팍 등으로도 확대 지원한다.
XFree86을 지원해주는 오픈 데스크탑으로는 Gnome과 KDE가 양대 산맥을 이루고 있고 그 외에도 많은
윈도우 매니저가 존재한다.

3. XFree86
Xfree86은 무료로 배포되는 X 윈도우 시스템으로 비영리단체인 xfree86프로젝트에 의해 개발되었다.
Xfree86은 인텔 x86계열 플랫폼으로 개발되었지만 지금은 다양한 플랫폼에서 운영된다. Xfree86의
공식사이트는 http://www.xfree86.org이다.

4. X-window의 구조
(1) 기본구조: X-window는 클라이언트/서버의 구조로 되어 있고 서로간의 통신을 위해 X protocol을
              사용한다. X server란 그래픽하게 보여주는 하나의 시스템을 말하고, X-client란
              X server위에 동작하는 일종의 응용프로그램을 말한다.
(2) X Protocol
   1) 설명: X 프로토콜은 운영체제에 독립적으로 동작하며 많은 플랫폼에 사용되고 있다. 또한
           X 프로토콜은 독립적으로 동작하나 TCP/IP기반위에서도 동작하기 때문에 특정 컴퓨터의
           어플리케이션을 네트워크로 연결된 다른 컴퓨터에서 사용할 수 있다.
   2) 작동: 한 시스템의 X clients 와 X server는 속도가 빠른 Unix domain socket을 이용한다. 이
           소켓은 /tmp/.X11-unix/X# 형태로 존재한다. 보통 #에는 0이 온다.

5. X-window 설정
(1) X-window를 설정하기 위해 알아야 할 사항
   1) 시스템의 비디오카드의 칩의 종류와 메모리 용량
   2) 모니터 모델과 최대 해상도, 수직/수평 재생율
(참고) 현재 공식적으로 Xfree86에서 지원하는 비디오카드의 리스트를 확인하려면
       http://www.xfree86.org/cardlist.html 를 참조한다.
(2) 비디오카드관련 유틸리티
   1) SuperProbe : xfree86에서 제공하는 유틸리티로 비디오카드에 대한 자세한 정보를 보여준다.
                  루트권한자만 가능하며 텍스트모드에서도 사용 가능하다.
                  보통 /usr/bin/X11/SuperProbe 에 위치한다.
   2) xvidtune : X윈도우상에서 비디오모드를 조정할 수 있는 유틸리티이다. 화면의 상/하/좌/우,
                높이와 폭의 조정, 수평/수직의 조절이 가능하다. 또한 /etc/X11/XF86config파일에
                서 해상도 부분에 직접입력하여 조정할 수도 있다.
(3) X윈도우 설정 유틸리티
   1) Xconfigurator 이용 : 텍스트 그래픽 인터페이스의 유틸리티로서 X-window을 자동 설정해준다.
                          레드햇 7.x 버전까지 지원된다.
   2) xf86cfg 이용 : GUI방식으로 이 명령은 XFree86 3.3.6버전에서는 XF86Setup명령으로 지원되었
                    다. 콘솔과 엑스윈도우상에서 실행되는 데, 반드시 /etc/X11/디렉토리에
                    XF86Config파일이 있어야 하며, 이 방법을 이용하려면 엑스윈도우가 구동되어야
                    한다. 엑스윈도우를 띄우기 위한 설정이라기 보다는 주변기기에 대한 더욱
                    자세한 설정을 위해 사용된다.
   3) xf86config 이용 : 텍스트 방식의 설정방법으로 엑스 윈도우 설정 섹션들을 일일이 수동으로
                       설정한다. 이 명령을 이용하려면 마우스의 종류, 모니터의 주파수, 그래픽
                       카드등 하드웨어에 대한 지식을 가지고 있어야 한다. 설정된 환경은
                       /etc/X11/XF86Config파일에 저장된다.
(4) 관련파일 : /etc/X11/XF86Config
   1) 설명 : xfree86의 주설정 파일이다. 관련 심볼릭링크파일로 /etc/X11R6/lib/X11/XF86Config가
            이 파일을 가리키고 있다.
   2) 파일의 구성 : 7개의 섹션으로 구성되어 있다.
     ㄱ. Files : 시스템의 중요한 파일이 있는 장소를 지정하는 섹션이다.
        a. RgbPath     "/usr/X11R6/lib/X11/rgb"
            => RGB 데이터베이스 이름과 위치를 지정한다.
        b. FontPath   "unix/:7100"
            => X폰트를 찾을 수 있는 장소를 지정한다. 현재는 'transport/hostname:port-number'로
              구성되어 있다. transport는 폰트서버에 연결하기 위해 사용하는 transport타입을
              나타낸다. 즉 유닉스 도메인 소켓을 나타내는 unix 또는 TCP/IP접속을 나타내는 tcp등
              이 올 수 있다. hostname에는 폰트서버를 운영하고 있는 시스템의 호스트이름을 나타
              낸다. 위의 예처럼 필드가 비어 있는 것은 로컬호스트가 폰트서버를 운영하고 있는
              경우이다. port-number는 폰트 서버가 사용할 포트의 번호를 나타낸다. 일반적으로
              7100번을 사용한다. 또한 폰트경로를 여러개 지정할 수 있다.
              'FontPath   /usr/X11R6/lib/X11/fonts/TrueType'과 같이 지정가능하다.
     ㄴ. ServerFlags : X서버의 몇가지 기능을 활성화하거나 비활성화시킨다.
        a. DontZap : X강제종료를 위한 Ctrl+Alt+Backspace 사용여부를 지정
        b. DontZoom : 해상도 전환을 위한 Ctrl+Alt+[+/-] 사용여부를 지정
     ㄷ. Keyboard : 키보드 종류와 프로토콜등 키보드의 기능과 관련된 정보를 지정한다.
     ㄹ. Pointer : 마우스 종류, 마우스가 연결된 포트등 마우스 관련 설정에 사용된다.
                  이중 Emulate3Buttons은 2버튼마우스에서 좌우 두버튼을 동시에 눌렀을 경우
                  3버튼 마우스의 가운데 버튼 역할을 하도록 한다.
     ㅁ. Monitor : 모니터와 해상도 설정에 관련된 부분이다.
     ㅂ. Graphics Device : X서버가 사용할 수 있는 비디오 카드를 설명한다.
     ㅅ. Screen : Monitor와 Device섹션에 있는 정보를 함께 불러오는데 사용된다.

6. X 폰트 서버(X Font Server:XFS)
(1) 설명: X폰트서버는 XFree86이 글꼴을 사용할 수 있도록 해주는 프로세스로 XFree86의 트루타입
          폰트서버이다. 시스템이 부팅될 때 구동되는 xfs는 X서버와는 독립적으로 동작한다.
(2) 관련파일 : /etc/X11/fs/config
    => xfs의 설정파일로 어떻게 동작할 지를 결정한다.
(3) 시스템 초기화 스크립트 : /etc/rc.d/init.d/xfs
   1) 설명: xfs를 구동시키거나 멈추는 역할을 한다.
   2) 사용예
     ㄱ. /etc/rc.d/init.d/xfs stop
     ㄴ. /etc/rc.d/init.d/xfs start

7. X-window 실행
(1) X-window 실행
   1) 콘솔모드(run level 3)에서 startx라고 입력한다.
   2) run level 5로 설정하여 X 디스플레이매니저(X Display Manager:XDM)를 사용하여 그래픽하게
     로그인하면서 실행할 수 있다.
(2) startx
   1) 설명: startx에는 X윈도우를 실행하는 최적화된 스크립트로 시스템환경을 초기화하고 시작하
           는데 필요한 여러 프로그램을 호출한다. 최종적으로는 xinit를 호출한다.
   2) 사용법
     startx [option]
   3) option
     -- : 명령행의 아규먼트를 xinit으로 넘겨준다.
   4) 사용예
     ㄱ. [root@www /root]# startx
          => 기본설정된 상태로 X윈도우를 실행시킨다.
     ㄴ. startx -- -bpp 8
          => 256 color mode로 실행시킨다.
     ㄷ. startx -- -bpp 32
          => true color mode로 실행시킨다.
   5) 실행관련 파일 : /etc/sysconfig/desktop
     ㄱ. 이 파일은 startx명령시에 구동해야할 윈도우 매니저값을 가지고 있는 파일이다.
     ㄴ. 만약 X-window 설정시 기본값을 KDE를 설정했을 경우 파일안의 값은 다음과 같다.
        DESKTOP="KDE" (참고로 그냥 KDE라고만 입력해도 된다. 또한 소문자로 써도 무방하다.)
     ㄷ. 기본 X-window 를 그놈(Gnome)으로 바꾸려면 다음과 같이 값을 바꾸면 된다.
        DESKTOP="GNOME"
(2) X-window 종료
    1) 일반적인 종료 : KDE나 GNOME의 패널(윈도우 하단 메뉴바)에 있는 시작 메뉴를 누른 뒤 로그아
                    웃 메뉴로 엑스 윈도우를 종료시킨다.
    2) 강제 종료 : X-window에 장애가 발생되어 정상적으로 로그아웃을 하지 못하는 경우에 사용하는
                 방법으로 CTRL+ALT+Back Space키를 동시에 누른다.

8. X-window실행과 디스플레이 매니저
(1) 개요: 실행레벨을 5로 지정했을 경우에는 그래픽하게 로그인하는 절차가 필요한 데 이러한 역할
          을 하는 것이 디스플레이 매니저(Display Manager)이다.
(2) 디스플레이 매니저 종류
   1) xdm(X Display Manager) : 전통적인 유닉스 시스템에서 사용하던 X 윈도우 디스플레이 매니저
                              로 runlevel 5로 지정했을 경우 실행된다.
   2) gdm(GNOME Display Manager) : GNOME실행과 관련하는 디스플레이 매니저
   3) kdm(KDE Display Manager) :  KDE실행과 관련하는 디스플레이 매니저
(3) xdm의 설정
   1) xdm(X Display Manager) : 시스템을 run level 5로 구동시켰을 경우, 자동으로 X를 실행되고
                              일반적으로 gdm 도 아니고 kdm도 아닌 경우에 사용한다.
   2) xdm 관련 디렉토리 : /usr/X11R6/lib/X11/xdm 디렉토리에 위치한다.
   3) xdm 관련 파일
     ㄱ. 환경설정파일: /usr/X11R6/lib/X11/xdm/xdm-config 또는 /etc/X11/xdm/xdm-config
          => 사용자들에게 보여지는 로그인 화면을 설정하는 파일이다.
     ㄴ. Xsetup_0 : X가 시작될 때 어떤 프로그램들이 구동되어야 하는지를 xdm에게 알려준다.
   4) xdm의 실행 : root권한자만 가능하며 콘솔모드에서는 다음과 같이 명령내려서 실행
     [root@www /root]# xdm --nodaemon &
(4) gdm의 설정
   1) 설명: GNOME 디스플레이 매니저로 xdm의 환경 설정을 많이 넘겨받아 사용한다.
   2) 관련 디렉토리와 파일
    ㄱ. 주 디렉토리: /etc/X11/gdm
    ㄴ. 환경설정파일: gdm.conf이다.

9. X-window 작업하기
(1) 명령행 옵션 : X-window상의 터미널창에서 명령 수행시 다음과 같은 옵션을 사용할 수 있다.
   1) -display : 어떤 X 서버를 사용할 것인가를 지정하는 옵션이다.
   2) -geometry : 초기 윈도의 위치와 사이즈를 세팅한다. 만약 음수의 값으로 수평,수직위치를 넣으
                 면 상대적으로 거꾸로 움직여진 위치에 놓여지게 된다.
     * 형식 : 윈도우의 폭*윈도우의 높이+/-수평위치+/-수직위치
   3) -font : 생성될 윈도우의 텍스트를 위해 쓰여질 폰트지정
   4) -fn : -font옵션과 같다. 폰트를 지정한다.
   5) -bg : 바탕색을 지정
   6) -fg : 윈도우의 전경색 또는 폰트색을 지정한다.
   7) -bd : border(테두리선)의 색상을 지정한다.
   8) -name : 어플리케이션에서 사용하능한 리소스의 이름을 설정한다. 같은 어플리케이션을 두 개
             실행시키고 그 두개를 구분할 경우에 유용하다.
   9) -title : 윈도우 매니저를 통해 각 윈도우의 상단에 표시하게끔 해주는 옵션이다.
   10) -iconic : 어플리케이션을 실행할 때 아이콘화 되어 실행시킨다.
   11) -xrm : 이미 정해진 리소스 이름에 따르는 값을 새롭게 설정해줄 수 있게 해 준다.

10. X-window 구동원리(1)
(1) 설명: run level 3인 상태에서 X-window의 구동은 startx에 의해 사용자의 클라이언트 리소스와
         서버 리스소를 찾으면서 시작된다.
(2) 구동순서
   1) 사용자의 홈디렉토리에서 .xinitrc파일을 찾아 각종 리소스들은 불러 들여 실행한다.
     (존재하지 않을 경우에는 /usr/X11R6/lib/X11/xinit/xinitrc, /etc/X11/xinit/xinitrc)
    
   2) 사용자의 홈디렉토리에서 .Xclients스크립트를 찾아 실행한다. (존재하지 않을 경우에는
    /etc/X11/xinit/Xclients파일을 실행)
   3) Xclients 스크립트에 의해 어떠한 데스크탑환경을 사용할 것인지 /etc/sysconfig/desktop파일
     을 참조한다.
(3) 각 스크립트의 역할
   1) startx: X 윈도우를 구동시키는 스크립트이다.
   2) ~/.xinitrc(또는 /usr/X11R6/lib/X11/xinit/xinitrc, /etc/X11/xinit/xinitrc)
    ㄱ. ~/.Xresources 나 /etc/X11/Xresources 안의 내용설정 실행
    ㄴ. keymap파일실행: 키맵이란 아키텍쳐별로 지원되는 키코드를 말한다.
       ~/.Xkmap(존재하지 않으면/etc/X11/Xkmap) 또는 ~/Xmodmap(존재하지 않으면 /etc/X11/Xmodmap)
    ㄷ. /etc/X11/xinit/xinitrc.d 라는 디렉토리안의 스크립트를 실행시킨다.
    ㄹ. ~/.Xclients 스크립트 호출한다.
   3) ~/.Xclients(또는 /etc/X11/xinit/Xclients)
    ㄱ. /etc/sysconfig/desktop 을 검사하여 GNOME인지 KDE인지를 확인하고 실행한다.
    ㄴ. 만약 어떠한 설정을 찾지못하면 다음과 같은 순서로 실행하는데 해당 윈도우매니저가 존재
       해야 한다.
       GNOME
       KDE
       RunWM
       twm
    ㄷ. 만약 Xclients가 존재하지 않고 twm 윈도우매니저가 설치되어있다면 윈도우98의 안전모드처
       럼 xclock, xterm, netscape같은 몇가지 응용프로그램과 twm이 작동된다.

11. X-window 구동원리(2)
(1) 설명: run level 5인 경우에는 /etc/inittab 파일설정에 의거하여 /etc/X11/prefdm 스크립트가
          실행된다.
(2) 구동순서
   1) /etc/X11/prefdm에 의거하여 해당 윈도우 디스플레이 매니저 실행한다.
   2) 로그인창이 뜨기전에 /etc/X11/xdm/Xsetup_0 스크립트 실행한다.
   3) 사용자를 인증하고 /etc/X11/xdm/Xsession 스크립트를 실행한다.
   4) 사용자가 로그아웃하면 새로운 로그인 창을 띄운다.
(3) 각 스크립트의 역할
   1) prefdm
    ㄱ. /etc/sysconfig/desktop 파일에 명기되어 있는 윈도우매니저를 실행시킨다.
    ㄴ. /etc/sysconfig/desktop 파일이 없는 경우에는 gdm, kdm, xdm 순으로 검색하여 실행시킨다.
   2) /etc/X11/xdm/Xsetup_0: /etc/X11/Xresources 스크립트를 실행하고 로그인관련 내용을 실행
                            한다.
   3) /etc/X11/xdm/Xsession
    ㄱ. startx 실행시의 /etc/X11/xinit/xinitrc 스크립트의 역할인 /etc/X11/xinit/xinitrc.d 디렉
       토리안의 스크립트를 실행한다.
    ㄴ. 사용자가 설정한 데스크탑 환경을 찾아 실행한다. 만약 찾지못하면 ~/.xsession 이나
       ~/.Xcients를 실행하고 이것도 실패하면 startx 시에 실행하는 /etc/X11/xinit/Xcilents 스크
       립트를 실행한다.

12. X-window의 데스크탑 변경하기
(1) 변경이 필요로 하는 경우 : 만약 일반사용자가 startx하면 보통 /etc/sysconfig/desktop이라는
                           파일에서 선언된 X-window가 구동된다. 만약 기본 설정이 KDE인데 한
                           사용자가 GNOME을 사용하려고 할 때 이용할 수 있다.
(2) /etc/bin/switchdesk 스크립트 : 데스트탑 환경이나 윈도우 매니저를 사용자가 선택적으로 사용
                                  할 수 있도록 해 주는 데스크탑 변환 파일이다.
    1) 사용법
      switchdesk 데스크탑이름
       => 변환가능한 데스크탑이름으로는 KDE, KDE2, GNOME, Enlightenmen, WindowsMaker, twm등
    2) 사용예
      [posein@www posein]$ switchdesk gnome
      Red Hat Linux switchdesk 3.9
      Copyright (C) 1999-2001 Red Hat, Inc
      Redistributable under the terms of the GNU General Public License
      Desktop now set up to run GNOME.
      For system defaults, remove /home/posein/.Xclients
    3) 관련파일 : swichdesk 스크립트를 사용하면 .Xclients파일과 .Xclients-default파일이 생성된
                다.
      -.Xclients : /etc/X11/xinit/Xclients를 참조하지 않고 개인사용자가 독자적인 X-window를
                  사용하도록 해주는 파일이다.
        *[posein@www posein]$ cat .Xclients
         #!/bin/bash

         # Created by Red Hat Desktop Switcher

         if [ -e "$HOME/.Xclients-$HOSTNAME$DISPLAY" ]; then
             exec $HOME/.Xclients-$HOSTNAME$DISPLAY
         else
             exec $HOME/.Xclients-default
         fi
      -.Xclients-default : 설정한 데스크탑이나 윈도우 매니저가 실행될 수 있도록 명령라인이 존재
                          하는 파일이다.
        *[posein@www posein]$ cat .Xclients-default
         # Created by Red Hat Desktop Switcher
         exec gnome-session
           => 참고로 KDE인 경우에는 'exec startkde'라고 표기된다.

13. 윈도우 매니저(Window Manager)
(1) 설명: 윈도우 매니저란 X서버와 사용자를 이어주는 인터페이스로 윈도우의 경계(border), 메뉴,
          아이콘, 버튼바, 툴바 등을 제공한다. 윈도우 매니저없이 X윈도우를 사용하는 일은 불가능
          하며 각 사용자들은 자신의 취향에 맞는 윈도우 매니저를 선택할 수 있다.
(2) 종류
   1) twm : 최초의 윈도우 매니저로 다른 윈도우 매니저의 모태이다.
   2) FVWM
    ㄱ. Robert Nation에 의해 개발되었고, Tom LaStrange의 유명한 TWM에서 비롯됨
    ㄴ. 메모리 사용을 최소화하도록 설계되었고, 3D입체 화면과 단순한 가상 데스크탑 지원
    ㄷ. 약간의 수정을 통해서 새로운 느낌의 윈도우 매니저로 기능을 향상시킬 수 있도록 설계됨
    ㄹ. 관련사이트는 http://www.fvwm.org이다.
   3) FVWM95
    ㄱ. FVWM의 2.X버전 소스를 기반으로 만들어짐
    ㄴ. 윈도우95랑 인터페이스가 유사
    ㄷ. 레드햇 5.1에서 채택됨.
   4) AMIWM(Amiga Window Manager)
    ㄱ. Amiga에서 사용한 하던 윈도우 매니저를 X11R6용으로 만듬
    ㄴ. 드래그 업다운할 수 있도록 멀티 스크린을 지원
   5) CTWM
    ㄱ. Claude Lecommnader에 의해 개발된 윈도우 매니저
    ㄴ. TWM을 개선하여 32개의 작업공간(Workspace)창을 제공
    ㄷ. 3D타이틀창과 경계선을 선택적으로 지원
   6) EPIWM
    ㄱ. GPL하의 School Project의 일환으로 만들어짐
    ㄴ. 작으면서 빠르고 설정이 용이
   7) DTWM(The CDE Window Manager)
    ㄱ. CDE(Common Desktop Environment)는 Hewlett-Packard, IBM, Sun Microsystems가 공동개발한
       유닉스용 상용 GUI를 사용하는 윈도우 매니저
    ㄴ. 현재 유닉스 워크스테이션에서 표준 운영체제환경으로 채택
   8) Sawfisk : Lisp 기반의 스크립트 언어를 사용하여 만들어짐 윈도우 매니저로 SawMill이라고
               불림
   9) BlackBox : 간단하면서 빠른 인터페이스를 제공하며, 다중 데스크탑 환경을 제공하는 윈도우
                매니저
   10) Enlightenment
     ㄱ. 맨드레이크 7.0에서 gnome과 함께 기본적으로 채택
     ㄴ. 아주 극단적이고, 세밀하며 여러 설정이 가능한 환경을 제공해 준다.
     ㄷ. 관련사이트는 http://www.enligntment.org 이다.
   11) Window Maker
     ㄱ. GNU 어플리케이션들을 부가적으로 통합할 수 있도록 지원하기 위해 만들어진 X11 윈도우
        매니저
     ㄴ. Alfredo K. Kojima에 의해 개발되었으며, 알짜리눅스 6.0에서 채택됨
     ㄷ. 애프터스텝과 넥스트스텝을 흉내낸 윈도우 매니저이다.
     ㄹ. 설정파일이 변경되면 자동적으로 메뉴가 재정의되므로 변경을 적용하기 위해 윈도우 메이커
        를 다시 실행하지 않아도 된다.
     ㅁ. 다국어를 지원하며 GNU 데스크탑을 지원하므로 GNOME프로젝트에 적합하다.
     ㅂ. 개인의 취향에 맞는 윈도우 매니저의 선택외에 윈도우 매니저와 어플리케이션, 전체적인
        사용자 인터페이스를 제공하는 또 다른 요소들 등으로 구성된 데스크탑 환경을 선택할 수
        있다.
     ㅅ. 관련사이트는 http://www.windowmaker.org이다.
   12) OLVWM(OpenLook Virtual Window Manager) : X 윈도우의 표준을 주도해 온 Open Look 라이브
                                               러리에서 제공하는 윈도우 매니저이다.
   13) Afterstep
      ㄱ. NEXTSTEP의 겉모습과 느낌을 에뮬레이팅하는데서 시작하였다
      ㄴ. NEXTSTEP인터페이스의 장점을 통합하고 좀 더 유용한 기능을 추가하는데 목적이 있다.
      ㄷ. 관련사이트는 http://www.afterstep.org 이다.
   14) KDE(K Desktop Enviroment)
      ㄱ. Microsoft의 윈도우와 구성, 사용법 등이 비슷하다.
      ㄴ. 단순한 윈도우 매니저 역할을 넘어 새로운 데스크탑 환경 구현을 목표로 하고 있다.
      ㄷ. QT라이브러리를 기반으로 한다.
      ㄹ. kwin이라는 윈도우 매니저를 가지고 있다.
   15) GNOME(GNU Network Object Model Environment)
      ㄱ. 시스템과 유기적인 통합을 목표로 한다.
      ㄴ. 다른 윈도우 매니저를 띄운 상태에서 실행할 수 있다.
      ㄷ. GTK+ 라이브러리를 사용한다.
      ㄹ. metacity라는 윈도우 매니저를 가지고 있다.
      ㅁ. 관련사이트는 http://www.gnome.org, http://www.gtk.org 이다.
   16) 기타 : ICEWM, Xfce 등

14. 클라이언트에서 X Server 프로그램 사용하기
(1) 개요 : X-window는 서버와 클라이언트에서 동시에 작동하는 네트워크 지향시스템이기 때문에,
          클라이언트 X-window시스템에서 서버의 X-window프로그램을 구동할 수 있다.
(2) 관련명령과 환경변수
    1) xhost : X server에 접속할 수 있는 클라이언트를 지정하거나 해제하는 명령
      ㄱ. 사용법
        xhost + 또는 - [IP 또는 도메인명]
      ㄴ. 사용예
       xhost + : X server에 모든 클라이언트의 접속을 허용함
       xhost - : X server에 모든 클라이언트의 접속을 해제함
       xhost + 192.168.0.5 : 192.168.0.5의 접속을 허용함
    2) DISPLAY : 환경변수로써 X server의 프로그램이 실행될 때 표시되는 클라이언트의 주소 지정
(3) 사용예
   1) 조건: A라는 시스템과 B라는 시스템이 있다. A라는 시스템에는 네스케이프과 없고 B라는 시스
           템에는 네스케이프라는 프로그램이 있다고 가정하자. A라는 시스템에서 네스케이프를
           사용하고자 한다.
   2) 조건: A시스템의 IP가 192.168.0.2, B시스템을 192.168.0.3 이라고 가정한다.
   3) 방법
    ㄱ. A시스템에서 B시스템의 프로그램이 실행되는 것이므로 A시스템에서 B시스템의 접근을 허가해
       야 한다.
       예) 1. 전체허가: 모든 호스트허가
             [root@A_host root]$ xhost +
             access control disabled, clients can connect from any host
           2. 부분허가: 특정 호스트만 허가
             [root@A_host root]$ xhost + 192.168.0.3
             192.168.0.3 being added to access control list

    ㄴ. B 시스템에서 실행되는 디스플레이의 방향을 A 호스트로 해야 한다.
       [root@B_host root] export DISPLAY=192.168.0.2:0.0
    ㄷ. B 시스템에서 다음과 같이 네스케이프를 실행해보자.
       [root@B_host root]$ netcape &
       [1] 11980
        => A시스템에서 네스케이프가 실행됨을 알 수 있다.
   4) 참고
    위의 조건에서 xhost + 로 허가한 A시스템과 A시스템으로 접근가능한 B시스템사이중 어느 시
   스템이 보안상 더 위험할지 생각해보자. 사실 A,B 시스템 모두 보안상 취약하다고 볼 수 있다.
   A시스템은 모든 X client에서 접근가능하므로 불필요한 프로그램으로 인해 작업을 방해받을 수
   있다. 또한 B시스템에서도 root 사용자로 로그인한 상태에서 아무생각없이 다음과 같이 전송했
   다고 하자.
    [root@B_host root]$ xterm &
   그러면 A시스템에서는 root권한이 있는 B시스템의 X터미널하나를 전송받게 된다. 이 경우 A시스템
   에서 "rm -rf /home" 과 같은 명령을 내리게 되면 B시스템의 /home디렉토리는 사라지게 된다.

15. 클라이언트에서 X Server 프로그램 사용하기(2)
(1) 개요: xhost로 사용하여 전체 클라이언트를 허가하거나 또는 IP주소, 호스트네임으로 허가한다
          고 하더라도 원치않는 불필요한 클라이언트 프로그램이 구동될 수 있다. 이 때 주어진 키
          값을 이용해서 접속하는 xauth를 이용하면 이 문제를 어느정도 해결할 수 있다.
(2) Xauthority
   1) 개요: X 윈도우에서는 xhost처럼 호스트기반 인증도 하지만 그 외에 사용자기반 인증도 한다.
           특정사용자가 X윈도우를 실행시키면 $HOME/.Xauthority라는 파일이 생성된다. 이 파일에
           는 MIT-MAGIC-COOKIEs 라는 키값을 가지고 있어 그 키값을 가지고 X서버로 접근하면 해당
           사용자로 인증하여 사용가능하도록 하고 있다.
   2) 관련명령어: xauth
    ㄱ. 설명: Xauthority파일관련 명령어로 ~/.Xauthority파일의 내용인 MIT-MAGIC-COOKIEs값을
             보여주거나 값을 변경할 수 있다.
    ㄴ. 사용법
       xauth 옵션
    ㄷ. 사용예
      a. [root@www root]# xauth list $DISPLAY
         zzang:0  MIT-MAGIC-COOKIE-1  e1076eee8a02769d81e87725c968dcf9
         www/unix:0  MIT-MAGIC-COOKIE-1  59b4c2fe30a68e02c70cbaa4001f5ddc
          => 현재 .Xauthority파일의 MIT-MAGIC-COOKIEs값을 보여준다.
      b. [root@www root]# xauth add $DISPLAY . e1076eee8a02769d81e87725c968dcf9
          => ~/.Xauthority 파일에 MIT-MAGIC-COOKIEs값을 추가한다.
(3) 사용예
   1) 조건: Xauthority를 이용하여 A 시스템(192.168.0.2)의 X 서버에 B 시스템(192.168.0.3)의
          클라이언트 프로그램이 실행되도록 한다.
   2) 방법
    ㄱ. A 시스템의 ~/.Xauthority파일의 MIT-MAGIC-COOKIEs값 확인
       [root@A_host root]# xauth list $DISPLAY
       A_host/unix:0  MIT-MAGIC-COOKIE-1  e1076eee8a02769d81e87725c968dcf9
    ㄴ. B 시스템의 X 윈도우 DISPLAY를 A 시스템으로 변경
       [root@B_host root]# export DISPLAY=192.168.0.2:0.0
    ㄷ. B 시스템의 ~/.Xauthority파일의 MIT-MAGIC-COOKIEs 키값을 입수하여 추가한다.
       [root@B_host root]# xauth add $DISPLAY . e1076eee8a02769d81e87725c968dcf9
    ㄹ. B 시스템에서 키값 확인
       [root@www root]# xauth list $DISPLAY
       A_host:0  MIT-MAGIC-COOKIE-1  e1076eee8a02769d81e87725c968dcf9
       B_host:0  MIT-MAGIC-COOKIE-1  59b4c2fe30a68e02c70cbaa4001f5ddc
        => 추가되었음을 알 수 있다. 경우에 따라 X윈도우 터미널에서는 바뀐 A 시스템의 키값만
         보일 수도 있다. 콘솔이나 외부에서 접속하여 확인하면 전부볼 수 있다.
    ㅁ. 클라이언트 프로그램 전송
      [root@B_host root]# xterm &
       => A 시스템에 B 시스템의 터미널창이 뜬다.

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

 

1. 설치 및 갱신모드
(1) 설명: 새로운 패키지를 설치할 때 사용된다. 설치 모드의 변형으로 업그레이드 모드도 들 수
          있다.
(2) 관련옵션
   -i : 새로운 패키지를 설치할 때 사용한다. 이전 버전의 같은 패키지에 대해 정보가 지워지지
       않으며 또한 이전 버전의 설정 파일도 백업하지 않는다. (--install)
   -U : 기존의 패키지를 새로운 버전의 패키지로 업그레이드할 때 사용한다. 이전 버전이 설치된
       경우에는 환경설정파일을 제외하고 새롭게 설치하는데 원래 설정은 .rpmsave에 기록한다.
       또한, 설치된 패키지가 없을 경우에도 새로운 버전을 설치할 수 있는데 이 경우에는 -i옵션과
       같다고 볼 수 있다. (--upgrade)
   -F : 이전 버전이 설치되어 있는 경우에만 설치한다.(--freshen)
   -v : 메시지를 자세히 보여준다.
   -h : '#'기호 표시해 준다.
   --force : 기존에 설치된 패키지와 그 파일을 강제로 다시 설치하도록 한다. 업그레이드의 경우
            설치하고자 하는 패키지가 설치되어있는 패키지보다 구버전인 경우에도 강제로 설치
            한다.
   --nodeps : 의존성 관계를 무시한다.
   -vv : 메시지를 아주 자세히 보여준다.
   --test : 실제로 파일에 기록하는 작업을 제외한 대부분을 테스트한다. 패키지를 실제 설치하기
           전에 제대로 설치되는지 테스트해 볼 경우에 사용한다. -v, -h옵션과는 함께 사용할 수
           없으며 -vv는 사용가능하다.
   --oldpackage : 구버전으로 다운그레이드할 때 사용한다.
   --percent : 설치할 때 퍼센트를 보여준다.
   --replacefiles: 설치되어있는 파일이 있는 경우 덮어쓰면서 다시 설치한다.
   --replacepkgs: 같은 패키지가 있어도 다시 설치한다.
   --ignorearch: 아키텍쳐를 무시하고 설치한다.
   --root: 기준이 되는 디렉토리를 설정한다.
   --exculdepath: 지정된경로에는 파일을 설치하는 않는다.
   --prefix: 지정된 경로에 패키지를 설치한다.
   --relocate OLDPATH=NEWPATH: 원래의 경로를 새로운 경로로 바꾸고 설치한다.
   --badreloc: --relocate와 같이 사용하는 옵션으로 OLDPATH에 대한 할당 정보를 제외하고 파일,
              경로 등에 대한 정보를 허가한다.
   --rebuilddb : 특정한 패키지 설치후에 rpm패키지로 검색했으나 나타나지 않을 때 rpm데이터베이
               스를 업데이트한다
(3) 정리
   -ivh : 새로운 패키지 설치
   -Uvh : 업그레이드하거나 새로운 패키지 설치
   -Fvh : 이전 버전의 패키지가 있는 경우에만 패키지 설치
(4) 사용예
   1) [root@www src]# rpm -Uvh --oldpackage  proftpd-1.2.2-3kr.i686.rpm
       => 설치하고자 하는 버전이 이미 설치되어 있는 버전보다 낮더라도 설치한다.
   2) [root@www src]# rpm -Uvh --percent  proftpd-1.2.2-3kr.i686.rpm
       => 설치할 때 퍼센트를 출력해준다.
   3) [root@www src]# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm
       => 이미 설치된 패키지만 업데이트한다.

2. 제거모드
(1) 설명 : 시스템에 설치된 패키지를 제거하기 위해 사용된다. rpm은 기본적으로 삭제대상 패키지에
           의존적인 다른 패키지가 없을 경우에만 삭제한다.
(2) 관련옵션
   -e : 설치된 패키지를 제거한다.
   --nodeps : 제거시 의존성을 무시한다.
   --test : 실제로 제거하지 않고 테스트한다. 역시 -v,-h옵션은 사용할 수 없으며, -vv옵션만 사용
           가능하다.
   --allmatches: 동일한 이름이 패키지가 중복설치되어 있는 경우 모두 제거한다.
(3) 사용예
   1) [root@www /root]# rpm -e --test xemacs
      error: removing these packages would break dependencies:
             xemacs = 21.1.14 is needed by xemacs-el-21.1.14-10
             xemacs = 21.1.14 is needed by xemacs-info-21.1.14-10
       => rpm패키지 제거 테스트다. 이 경우는 의존성때문에 제거할 수 없다. 만약 그래도 제거하려
         면 --nodeps를 붙여야 한다.
   2) [root@www /root]# rpm -e httpd --nodeps
       => httpd 패키지에 의존성이 있더라도 무조건 제거한다.
   3) [root@www /root]# rpm -e sendmail --allmatches
       => sendmail이 중복되어 설치되어 있는 경우 모두 지운다.

3. 질의모드
(1) 설명: 설치된 패키지와 각 패키지에 포함된 파일들을 'rpm -q'를 이용하여 질의(Query)할 수
          있다.
(2) 관련옵션
   -q : 질의시에 꼭 써야하는 옵션이다. 패키지를 찾으면 패키지이름과 버전만 표시한다.
   -i : 설치된 패키지의 정보를 보여준다. -p옵션과 사용하면 패키지 파일정보를 보여준다.
   -l : 패키지에 포함된 모든 파일을 보여준다. 역시 -p와 사용하려면 정확한 파일명을 적는다.
       (--list)
   -p 파일명: 패키지의 파일에 대한 정보를 보여준다. 이 옵션을 사용하려면 패키지파일의 정확한
             이름을 입력해야 한다.
   -a : 시스템에 설치된 모든 패키지목록을 보여준다. (--all)
       패키지명을 잘 모르는 경우에는 '| grep 패키지명'을 붙여 사용하면 유용하다.
   -f 파일명: 지정된 파일이 포함된 패키지를 출력한다.
   -c : 해당패키지의 설정파일이나 스크립트파일을 보여준다.
   -d : 해당패키지의 문서파일을 출력한다.
   -R : 어떤 패키지에 의존하고 있는지를 보여준다. (--requires)
   --changelog: 특정 패키지의 바뀐 내역을 최근부터 연대순으로 보여준다.
   --scripts: 인스톨 및 언인스톨관련 스크립트를 보여준다.
   --filesbypkg : rpm패키지가 많을 경우 목록으로 보이는 파일앞에 패키지명을 붙인다.
   --whatrequires: 해당패키지를 필요로하는 패키지를 보여준다.
   --whatprovides: 해당패키지가 제공하는 패키지를 보여준다.
   --requires: 해당패키지가 설치되거나 동작시에 필요한 패키지 목록을 보여준다.
   --queryformat: 질의의 결과를 원하는 형태로 출력할 때 쓴다. C언의 printf()함수의 동작방법과
                 비슷하다.
(3) 사용예
   1) [root@www spool]# rpm -q sendmail
      sendmail-8.12.5-7
        => 설치된 sendmail의 패키지이름과 버전을 보여준다.
   2) [root@www /root]# rpm -qi sendmail
        => sendmail의 패키지정보를 보여준다.
   3) [root@www /root]# rpm -qa
        => 현재 설치된 모든 패키지를 보여준다.
   4) [root@www /root]# rpm -qa |grep netscape
      netscape-communicator-4.77-1wl
      netscape-common-4.
      netscape-navigator-4.77-1wl
       => 네스케이프관련 패키지를 보여준다.
   5) [root@www /root]# rpm -ql sendmail
       => sendmail이 설치되어 있는 곳을 보여준다.
   6) [root@www /root]# rpm -qf /etc/lilo.conf
      file /etc/lilo.conf is not owned by any package
       => 모든 파일이 rpm패키지를 통해서 인스톨된 것은 아니다.
   7) [root@www /root]# rpm -qf /etc/sendmail.cf
      sendmail-8.11.3-1wl
       => 해당파일에 대한 관련패키지를 찾아준다.
   8) [root@www /root]# rpm -qc at
      /etc/at.deny
      /etc/rc.d/init.d/atd
   9) [root@www /root]# rpm -qd lilo
       => lilo관련 문서파일을 보여준다.
   10) [root@www /root]# rpm -qR sendmail
       => sendmail이 의존하고 있는 패키지를 보여준다.
   11) [root@www /root]# rpm -q --changelog sendmail
        => sendmail이 바뀐 내역을 최근부터 연대순으로 보여준다.
   12) [root@www root]# rpm -q --scripts sendmail
        => sendmail의 인스톨 및 언인스톨관련 스크립트를 보여준다.
   13) [root@www src]# rpm -qlp proftpd-1.2.7-3kr.i686.rpm
        => 패키지의 설치되는 파일을 보여준다.
   14) [root@www src]# rpm -qip proftpd-1.2.7-3kr.i686.rpm
       [root@www src]# rpm -qlp proftpd-1.2.7-3kr.i686.rpm
       /etc/logrotate.d/proftpd
       /etc/pam.d/ftp
         ..생략..
        => 패키지의 정보를 보여준다.
   15) [root@www src]# rpm -qp --filesbypkg *.rpm
       proftpd                   /etc/logrotate.d/proftpd
       proftpd                   /etc/pam.d/ftp
        ..생략..
        => 확인하고자하는 패키지파일이 많은 경우 각 파일앞에 패키지명을 덧붙여 보여준다.
   16) [root@www /root]# rpm -q --whatrequires httpd
        => httpd 를 필요로 하는 패키지를 보여준다.
   17) [root@www /root]# rpm -qa --queryformat "%10{size} %{name}\n"
        => 패키지를 일정한 형태로 출력한다.

4. 검증모드
(1) 설명: 설치된 패키지 파일들을 검증한다. 보통 보안상 침입자에 의해 실행파일들이 권한획득을
          위해 변조되는 경우가 있는데 이러한 것을 찾아낼 때 사용한다.
(2) 관련옵션
   -V : verify의 약자로 검증할때 쓰는 기본 옵션이다.
   -a : 모든 패키지를 검사한다.
(3) 사용예
   1) [root@www /root]# rpm -V bind
      SM5..UGT c /etc/rndc.conf
       => 환경파일은 변경될 수 있으므로 크게 신경안써도 된다.
   2) [root@www /root]# rpm -Va
       => 모든 패키지를 검사한다.
(4) RPM 검증코드
   5 : MD5체크섬을 변경
   S : 파일의크기를 변경
   L : 심볼릭 링크를 변경
   T : 파일의 수정일을 변경
   D : 장치파일을 변경
   U : 파일사용자/소유자가 변경
   G : 파일 그룹이 변경
   M : 파일모드(권한과 파일형태)가 변경
   ? : 원인을 알 수 없거나 예측하지 못한 결과인 경우
(5) 참고 : 패키지를 구해서 설치할 경우 잘 알려지지 않는 경로로 파일을 입수했을 경우에 체크를
           해보는 것이 좋다. 이 경우에 --checksig를 사용한다.
    [root@www /root]# rpm --checksig fileutils-4.0-1.i386.rpm
    fileutils-4.0-1.i386.rpm: size md5 OK
     => 'size md5 OK'는 해당 파일의 크기와 MD5체크섬의 확인결과와 본래값과 일치하므로 문제가
       없다는 뜻이다. 체크섬을 파일내용이나 다른 정보를 기초로 하여 계산된다.

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

 

1. RPM이란?
(1) 개요 : RedHat Package Manager의 약어로 프로그램등을 설치할 때 사용하는 방법이며 Red Hat사
           에서 제안하였다. rpm은 유닉스계열의 일반적인 설치방법인 소스방법에 비해 쉬운 설치를
           지원하지만 설치되는 디렉토리의 변경이 불가능하다. 설치된 디렉토리나 실행명령 등은
           설치후 질의를 통해 확인해야 한다.
(2) 파일의 구조
   1) 기본구성
     패키지이름-버전-릴리즈.아키텍쳐.rpm
   2) 구성설명
    ㄱ. 패키지이름: 어떤 패키지인가를 설명해주는 패키지의 이름을 나타낸다.
    ㄴ. 버전: 패키지의 버전을 의미한다.
    ㄷ. 릴리즈: 한 버전의 패키지를 몇번 빌드했는지를 알려준다.
    ㄹ. 아키텍쳐: 어느 아키텍쳐에 사용가능한지를 알려준다. 패키지가 사용가능한 시스템을 말한
                 다.
        예) i386, i486, i586, i686: 인텔 x86 호환계열에 사용
            ia64: IA-64(Itanium)
            alpha: Digital 알파서버용
            ppc: 매킨토시 PowerPC용
            sparc: Sun Microsystem용
            s390: IBM s/390용
   3) 파일예
     XFree86-Mach64-3.3.6-20kr.i386.rpm
(3) rpm패키지의 4가지모드
   1) 설치 및 갱신모드
   2) 제거모드
   3) 질의모드
   4) 검증모드

2. RPM사용하기
(1) 사용법
   rpm options [filename]
(2) option
   -i  : 기본적으로 설치할 때 쓴다. 이 옵션을 사용하면 이전 버전의 같은 패키지에 대한 정보가
        존재할 경우 설치하지 않는다.(--install)
   -U  : 이전버전이 설치되어 있으면 업그레이드를 하며, 설치되어 있지않으면 새롭게 설치한다.
        이전버전이 설치되어 있을 경우에 환경설정파일을 제외하고 모두 새롭게 설치한다. 설치시에
        이 옵션을 사용하도록 한다.
   -F  : 현재 설치하는 패키지의 이전 버전이 설치되어 있는 경우에만 설치하고, 그렇지 않은 경우
        에는 설치하지 않는다.
   -v : 설치중 메시지를 보여준다.
   -h :  진행과정을 '#'으로 표시하라는 뜻이다.(--hash)
   -e : 패키지를 제거할 때 쓰인다.
   -q : 패키지가 설치되어 있는 질의한다. 이 옵션 단독으로 사용하면 패키지이름과 버전만 표시된
       다.
   -qa : 현재 설치된 모든 패키지 목록을 찾는데 사용한다. 보통 grep명령과 같이 사용된다.
     예) rpm -qa |grep mail
        => mail 이라는 문자열이 들어가고 설치된 rpm패키지를 찾는다.
   -qi : 현재 설치된 패키지의 간략한 정보를 출력
   -ql : 현재 설치된 패키지의 내용을 보여준다. 어떤 파일이 어디에 설치되어 있는지 확인할 때
        쓴다.
   -Vf : 현재 설치된 파일의 검증할때 쓴다. 문제가 없으면 '.'으로 표시된다.
   -Va : 전체 패키지를 검증한다.
   -Vp : 한 패키지만 검증한다.
   --force : 보통 패키지뒤에 붙는 옵션으로 패키지와의 충돌등을 무시하고 무조건 설치하는 옵션
           이다. (앞에 옵션을 써도 무방함.)
   --nodeps : 의존성 문제를 일으켜 설치가 안될경우에 쓰는 옵션이다.
     예)rpm -Uvh xmms-1.2.4-4.i386.rpm --force
   (참고) '-'는 기본옵션을 뜻하고, '--'는 선택옵션을 뜻한다.

(3) 사용예
   1) 설치
     ㄱ. rpm -Uvh XFree86-Mach64-3.3.6-20kr.i386.rpm
        => Mach64용 X윈도우 드라이버를 설치한다.
     ㄴ. rpm -Uvh han2-0.3.7-9.i386.rpm
        => han2라는 프로그램을 설치한다.
   2) 제거
     ㄱ. rpm -e xmms
        => xmms라는 패키지를 제거한다. 의존성이 있는 경우에는 제거되지 않는다.
     ㄴ. rpm -e httpd --nodeps
        => 의존성이 있는 경우라도 무조건 제거된다.
   3) 질의
     ㄱ. rpm -q sendmail
        => 설치된 sendmail의 패키지를 보여준다.
     ㄴ. rpm -qa
        => 현재 설치된 모든 패키지를 보여준다.
     ㄷ. rpm -qa | grep xmms
        => 현재 설치된 패키지 중에 xmms라는 문장이 들어간 것만 찾는다.
     ㄹ. rpm -qi sendmail
        => sendmail 패키지에 대한 인스톨정보를 보여준다.
     ㅁ. rpm -ql sendmail
        => sendmail이 설치된 경로를 보여준다.

(참고) rpm 패키지를 이용하여 게임설치하기
1. 설명: 간단한 X-window용 게임설치를 통하여 rpm패키지를 사용해보자.
2. 방법
  (1) 심파일(http://simfile.chol.com)에 접속한다.
  (2) 검색창에 'cosmosmash' 라고 입력한다.
  (3) cosmosmash-1.3-1.i386.rpm 라는 패키지를 다운받는다. 참고로 심파일사이트는 X-window의
     웹브라우저에서는 다운받을 수 없으므로 윈도우에서 다운받도록 한다.
  (4) 설치한다.
    [root@redhat9 root]# rpm -Uvh cosmosmash-1.3-1.i386.rpm
    오류: Failed dependencies:
            gengameng >= 4.0 is needed by cosmosmash-1.3-1
            libgengameng.so.4 is needed by cosmosmash-1.3-1
     => 설치를 하면 의존성때문에 설치가 안된다. rpm패키지는 설치나 제거시에 의존성이 있으면
       설치나 제거가 되지 않는다. 이 패키지를 설치하려면 관련 패키지를 먼저 설치해야 한다.
  (5) 의존성문제를 해결하기 위해서 rpm패키지를 검색해주는 http://www.rpmfind.net 사이트에
     접속한다.
  (6) 검색창에 'gengameng'이라고 입력한다.
  (7) gengameng-4.1-3.i386.rpm 라는 패키지를 다운받는다.
  (8) gengameng-4.1-3.i386.rpm 패키지를 설치한다.
    [root@redhat9 root]# rpm -Uvh gengameng-4.1-3.i386.rpm
    경고: gengameng-4.1-3.i386.rpm: V3 DSA signature: NOKEY, key ID f9651d5a
    준비 중...                  ########################################### [100%]
       1:gengameng              ########################################### [100%]
  (9) 다시 cosmosmash-1.3-1.i386.rpm 를 설치한다.
    [root@redhat9 root]# rpm -Uvh cosmosmash-1.3-1.i386.rpm
    준비 중...                  ########################################### [100%]
       1:cosmosmash             ########################################### [100%]
      => 정상적으로 설치됨을 알 수 있다. rpm패키지는 항상 의존성문제를 먼저해결해야 한다.
  (10) 설치된 프로그램을 실행하기 위해서는 실행파일을 찾아야 한다. rpm패키지는 설치는 쉬우나
     설치될 디렉토리지정등을 할 수 없다. 따라서 어떠한 파일이 설치되었고, 어떤 디렉토리에 설치
     되었는지의 질의를 통해 알아봐야 한다.
      예) [root@redhat9 root]# rpm -qi cosmosmash
          Name        : cosmosmash                   Relocations: /usr
          Version     : 1.3                               Vendor: (none)
          Release     : 1                             Build Date: 2002년 12월 27일 (금) 오전 11시 53분 14초
          Install Date: 2003년 06월 18일 (수) 오전 01시 22분 14초      Build Host: elise.sarrazip.org
          Group       : Amusements/Games              Source RPM: cosmosmash-1.3-1.src.rpm
          Size        : 163609                           License: GPL
          Signature   : (none)
          Packager    : Pierre Sarrazin
          URL         : http://sarrazip.com/dev/cosmosmash.html
          Summary     : Clone of the Intellivision(TM) game Astrosmash(TM).
          Description :
          Clone of the Intellivision game Astrosmash.
          In this game, you control a base that must destroy
          rocks before they hit the ground, or you lose points.
          You must also prevent "spinners" from touching the ground,
          or your base will explode.

          This package installs an entry in the GNOME 1.x Games menu.
           => 간단한 설치정보를 볼 수 있다.

          [root@redhat9 root]# rpm -ql cosmosmash
          /usr/bin/cosmosmash
          /usr/man/man6/cosmosmash.6.gz
          /usr/share/gnome/apps/Games/cosmosmash.desktop
          /usr/share/pixmaps/cosmosmash.png
          /usr/share/sounds/cosmosmash
          /usr/share/sounds/cosmosmash/hyperspace.wav
          /usr/share/sounds/cosmosmash/player-hit.wav
          /usr/share/sounds/cosmosmash/pulsar-beep.wav
          /usr/share/sounds/cosmosmash/rock-hit-0.wav
          /usr/share/sounds/cosmosmash/rock-hit-1.wav
          /usr/share/sounds/cosmosmash/saucer-shooting.wav
            => 설치된 파일의 목록을 볼 수 있다. 여기서 실행파일이 /usr/bin/cosmosmash임을 알
              수 있다.
  (11) 실행한다.
    [root@redhat9 root]# /usr/bin/cosmosmash &

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

 

1. init프로세스
Linux시스템에서 부팅시에 가장 먼저 실행되는 프로세스로 시스템 부팅중에 자신을 복제하여 다른
프로세스들을 생성한다. init프로세스는 /etc/inittab파일에 설정을 읽어들여 작동한다. 프로세스
ID(PID)는 1번을 부여받고 명령어로서의 init 파일 위치는 /sbin에 있다.

2. /etc/inittab
(1) 설명: 부팅시에 init프로세스가 작동하면서 참조하는 파일이다.
(2) 역할
   1) 시스템의 런레벨을 정의한다.
   2) 시스템 초기화관련된 스크립트들이 위치한다.
   3) UPS관련 스크립트가 위치한다.
   4) 가상콘솔과 관련된 내용을 정의한다.
   5) 런레벨 5인경우 X윈도우 초기화관련 내용도 정의한다.
(3) inittab파일의 필드 : /etc/inittab파일은 콜론(:)으로 구분된 네 개의 필드로 구성되어 있다.
   1) 기본구성
     id:runlevel:action:process
       => id       각 항목을 구별하기 위한 ID
          runlevel 실행 레벨을 표시
          action   init이 항목을 어떻게 다룰 것인가를 나타낸다.
          process  이 항목에 대해 init이 실행할 명령이다.
   2) action필드의 주요 키워드
     respawn : 프로세스가 종료될 때마다 재실행한다.
     wait : 프로세스가 종료될 때까지 기다린 후 다음 작업을 수행한다.
     sysinit : 시스템이 부팅되는 동안 한번만 프로세스가 실행된다. boot나 bootwait보다 우선함.
     initdefault : 시스템의 기본 실행 레벨을 설정한다.
     boot : 시스템이 부팅되는 동안 프로세스가 실행되며, init은 실행레벨 필드를 무시한다.
     bootwait : 시스템이 부팅되는 동안 프로세스가 실행되며, init은 프로세스가 종료될 때까지
               기다린다.
     once : 프로세스가 한번만 실행된다.
     off : 프로세스를 실행하지 않는다. off대신 라인앞에 #을 붙여 주석처리한 것과 같다.
(4) 주요설정
   1) 런레벨설정
     # Default runlevel. The runlevels used by RHS are:
     #   0 - halt (Do NOT set initdefault to this)
     #   1 - Single user mode
     #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
     #   3 - Full multiuser mode
     #   4 - unused
     #   5 - X11
     #   6 - reboot (Do NOT set initdefault to this)
     #
     id:3:initdefault:
       => 부팅의 레벨을 지정하는 부분이다.
         -런레벨 0은 시스템종료시에 사용된다.(기본값으로 설정해서는 안됨)
         -런레벨 1은 싱글유저 모드시에 사용한다. 아이디와 패스워드를 묻지않고 root 로그인한
         상태가 된다.
         -런레벨 2는 NFS를 지원하지 않는 다중사용자모드이다.(네트워크설정이 안되었으면 런레벨
         3과 같다.)
         -런레벨 3은 네트워킹을 지원하는 다중사용자모드이다. 보통 기본값으로 설정한다.
         -런레벨 4는 사용하지 않지만, 사용자가 임의로 정의해서 쓸 수 있다.
         -런레벨 5는 X-window로 부팅시키는 레벨이다.
         -런레벨 6은 시스템이 재부팅시에 사용한다.(기본값으로 설정해서는 안됨)
   2) 시스템 초기화
     si::sysinit:/etc/rc.d/rc.sysinit
       => init 프로세스가 가장 먼저 실행시키는 명령이다. 시스템초기화시 단 한번 실행되는 초기
         화 스크립트이다.
(참고) rc.sysinit 스크립트의 역할
   1. 기본적인 경로설정
   2. /etc/sysconfig/network 파일이 존재하면 그 스크립트 실행
   3. 키맵의 로딩
   4. 시스템 폰트의 로딩
   5. 스왑영역의 활성화
   6. 디스크검사(fsck)
   7. /proc파일시스템의 마운트
   8. 루트 파일시스템의 rw모드로 다시 마운트
   9. /etc/HOSTNAME 파일의 설정
   10. /etc/mtab파일에 루트와 /proc파일시스템의 엔트리 추가
   11. 커널 모듈로 로드
   12. 시스템 시간 설정

   3) l0:0:wait:/etc/rc.d/rc 0
      l1:1:wait:/etc/rc.d/rc 1
      l2:2:wait:/etc/rc.d/rc 2
      l3:3:wait:/etc/rc.d/rc 3
      l4:4:wait:/etc/rc.d/rc 4
      l5:5:wait:/etc/rc.d/rc 5
      l6:6:wait:/etc/rc.d/rc 6
       => 각 런레벨 별로 지정된 시작 스크립트를 나타낸다. 각 실행레벨에 대해서 어떠한 명령을
         수행할 것인지를 정한다. 각 런레벨별로 지정된 스크립트는 그 실행이 종료될 때까지는
         init프로세스가 진행하지 않고, 대기하라는 의미의 wait키워드가 지정되었다.
   4) # Things to run in every runlevel.
      ud::once:/sbin/update
       => /sbin/update명령은 아직 디스크에 쓰여지지 않고 메모리상에 버퍼링되어 있는 내용을
         디스크에 쓰도록 하는 명령이다.
   5) # Trap CTRL-ALT-DELETE
      ca::ctrlaltdel:/sbin/shutdown -t3 -r now
       => ctrl+alt+del키를 누를 때 실행하는 명령이다. 현재 설정은 3초후에 재부팅하게 되어있다.
   6) # When our UPS tells us power has failed, assume we have a few minutes
      # of power left.  Schedule a shutdown for 2 minutes from now.
      # This does, of course, assume you have powerd installed and your
      # UPS connected and working correctly.
      pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

      # If power was restored before the shutdown kicked in, cancel it.
      pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
       => UPS를 사용하는 경우 해당하는 항목으로 power fail이 될 경우, 시스템을 셧다운시키며,
         power가 다시 복구되었을 때는 셧다운을 취소시킨다.
   7) # Run gettys in standard runlevels
      1:2345:respawn:/sbin/mingetty tty1
      2:2345:respawn:/sbin/mingetty tty2
      3:2345:respawn:/sbin/mingetty tty3
      4:2345:respawn:/sbin/mingetty tty4
      5:2345:respawn:/sbin/mingetty tty5
      6:2345:respawn:/sbin/mingetty tty6
       => 가상 콘솔에 대한 설정부분으로 1번부터 6번까지 6개의 가상콘솔이 기본으로 설정되어
         있다. 1번콘솔은 실행레벨이 12345에서 실행되도록 하고, 나머지 콘솔은 2345에서 실행되도
         록 설정이 되어있다. 이것은 보안상 실행레벨1은 오직 첫번째 콘솔하나만 사용하도록 한 것
         이다. 특정 콘솔을 사용하지 못하도록 할 경우 해당 콘솔라인을 주석처리(라인 앞에 '#'
         표시)하면 된다. 작업을 마치고 로그아웃을 하면 다시 'login:' 프롬프트가 뜨는데 이는
         login: 프롬프트를 보여주는 mingetty 프로그램이 죽으면 다시 복제하여 계속실행하도록
         respawn으로 action이 설정되어 있다.
   8) # Run xdm in runlevel 5
      # xdm is now a separate service
      x:5:respawn:/etc/X11/prefdm -nodaemon
       => initdefalut가 실행레벨5인 경우 x-window로 login한다. GUI기반의 login화면을 관리하는
         디스플레이 매니저에 대한 설정을 한다. xdm, gdm, kdm중 하나가 선택되어 실행된다.

3. 부팅관련 유틸리티
(1) ntsysv
   1) 설명: RedHat 5.0부터 지원되는 텍스트기반 그래픽 설정 프로그램으로 부팅 중 자동으로 실행
           되는 서비스를 쉽게 설정할 수 있다. 명령행에서 옵션없이 ntsysv를 실행하면 현재 구동
           된 실행레벨에 대한 설정을 한다.
   2) 사용법
     ntsysv [option]
   3) option
     --level 실행레벨 : 특정 실행레벨을 편집한다.
(2) chkconfig
   1) 설명: 텍스트 기반의 명령형 프로그램으로 실행레벨에 따른 서비스의 on/off 설정리스트를
           볼 수 있고, 현재는 주로 xinetd 데몬안에 있는 서비스를 즉시 on 또는 off 시킬 경우에
           사용한다.
   2) 사용법
     chkconfig option [service]
   3) option
     --list : 각 실행레벨에서의 서비스 설정상태를 보여준다.
     --add 서비스 : 서비스를 추가한다.
     --del 서비스 : 서비스를 삭제한다.
     --level 레벨 서비스 on/off/reset : 해당레벨에서 특정서비스의 상태를 설정한다.
   4) 사용예
     ㄱ. [root@www /root]# chkconfig --list
         atd             0:off   1:off   2:off   3:on    4:on    5:on    6:off
         irda            0:off   1:off   2:off   3:off   4:off   5:off   6:off
         nscd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
         rwhod           0:off   1:off   2:off   3:off   4:off   5:off   6:off
          => 각 실행레벨에서의 서비스 설정 상태를 보여준다.
     ㄴ. [root@www /root]# chkconfig --list named
         named           0:off   1:off   2:off   3:off   4:off   5:off   6:off
          => named서비스의 상태를 본다.
     ㄷ. [root@www /root]# chkconfig --level 35 named on
          => 실행레벨 3,5에 대해서 named서비스를 on한다.
     ㄹ. [root@www /root]# chkconfig --level 5 --del adsl
          => 실행레벨 5에서 adsl서비스를 삭제한다.
   5) 참고
    ㄱ. 설명: 슈퍼데몬인 xinetd에 속해 있는 서비스도 가능하다.
    ㄴ. 사용예
       chkconfig telnet on
        => telnet 서비스를 on 시킨다.
(3) tksysv : GNOME 기반의 GUI툴로 실행레벨 2, 3, 4, 5에 대한 설정을 할 수 있다. 레드햇 7.X
             버전까지만 지원한다.
(4) ksysv : KDE기반의 GUI툴로 실행레벨 0~6까지 설정할 수 있다. 레드햇 8 까지만 지원한다.
(5) servceconf : 레드햇 8 버전부터 지원한다. redhat-config-services 라고 입력해도 된다.

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

 

1.시스템 부팅의 개요
(1) 리눅스로더(LILO:Linux Loader) : 부팅시에 리눅스 커널이나 다른 운영체제가 구동될 수 있도록
                                    역할을 하는 부트매니저 프로그램을 말한다. 초기에는 LILO를
                                    사용하였으나 최근에는 grub 이라는 프로그램을 많이 사용하고
                                    있다.
(2) 부팅시 커널 매개변수 : 리눅스 커널은 부팅 시에 일종의 명령행을 통해 몇가지 정보를 받아들
                           일 수 있다. 이 개념은 프로그램에 '매개변수=값'과 같은 형식으로
                           인자를 전달하는 것과 흡사하다. 이러한 값들은 커널이 스스로 결정할
                           수 없는 값을 지정하기 위해 사용된다. 또한 커널 매개변수는 기존의
                           값을 덮어쓸 때도 사용된다. 이 두 경우 모두 하드웨어 드라이버에 대한
                           중요한 정보를 커널에게 전달한다.
   예) 다른 루트 파티션으로 부팅할 경우의 예 : LILO프롬프트를 사용
      boot: linux root=/dev/hda9
       => 이 명령은 linux라는 이름으로 커널을 부팅하며 기본값 /dev/hda1 대신 /dev/hda9 파티션을
         루트 파일시스템으로 사용한다.
(3) 커널 모듈 설정에 대한 소개 : 리눅스 커널은 모듈화되어 있으며 필요시에 적절한 모듈(예를 들면
                              사운드 드라이버,랜카드 드라이버 등)이 커널에 적재된다. 모듈은
                              커널과 분리되어 있으며 슈퍼유저는 필요에 따라 커널에 삽입하거나
                              제거할 수 있다. 리로설정파일과 리로 명령행의 매개변수가 커널에
                              영향을 끼치지만 커널 모듈을 제어할 수 없다.
   1) 관련파일 : /etc/modules.conf (다른 배포판에서는 /etc/conf.modules)
              커널 모듈에 매개변수를 전달할 때 사용하는 텍스트 형식의 파일이다. 모듈 설정파일
              에서 찾아볼 수 있는 옵션으로는 입출력주소, 인터럽트, 사운드 장치를 위한 DMA채널
              설정 등이 있다.
   2) 커널 부트 메시지 : 리눅스 커널이 부팅될 때 자세한 진행 상황이 콘솔에 메시지 형태로 나타
                     나고 적재된 모듈들이 상태 정보로 출력된다. 이러한 메시지들은 하드웨어
                     상태와 설정에 대한 중요한 정보를 담고 있으며, 주된 내용은 다음과 같다.
     ㄱ. 커널정보
     ㄴ. 메모리와 CPU정보
     ㄷ. 마우스, 시리얼 포트, 디스크 등의 검색된 하드웨어에 대한 정보
     ㄹ. 파티션 정보와 점검사항
     ㅁ. 네트워크 초기화
     ㅂ. 부트시 적재된 커널 모듈의 결과
   3) 관련명령 : dmesg로 부팅시에 나타나는 메시지를 확인하는 명령이다. 또는 /var/log/dmesg
                라는 파일에서 확인할 수 있다.
   4) 시스템 로그확인 : 커널 메시지 이외의 부트시 또 다른 메시지들은 syslog 데몬에 의해 기록된
                       다. 이러한 메시지는 /var/log/messages 등과 같은 시스템 로그 파일에서 살
                       펴볼 수 있다. 즉 차이점은 dmesg는 네트워크 카드가 초기화될 때의 정보를
                       보여주고 그 장치설정과 상태는 네트워크 서비스가 시작될 때 /var/log/mess
                       ages에 기록된다. 시스템의 부트 상황을 점검하거나 문제를 해결할 때는 이
                       두 가지 정보를 모두 점검해야 한다.

2.리눅스 부팅의 단계
(1)커널의 인식 : 리눅스 시스템 부팅시 커널이 올라오면 커널은 우선 루트파일 시스템(/)을 read-
                 only형태로 마운트하고 검사후 이상이 없으면 read-write로 재마운트한다.
(2)init프로세서의 실행
   1) init프로세서의 실행 : init프로세서는 /etc/inittab라는 설정파일을 읽어서 설정된 내용대로
                           부팅절차를 시작한다.
   2) /etc/rc.d/rc.sysinit 스크립트 실행 : /etc/inittab의 내용에 의하여 먼저 시스템을 초기화하
                                          기 위해서 /etc/rc.d/rc.sysinit스크립트파일을 실행시
                                          킨다. 여기서는 호스트명 설정, 스와핑 설정, 시스템
                                          점검, 커널 모듈 로딩 등을 한다.
   3) /etc/rc.d/rc스크립트 실행 : rc.sysinit에 의해 시스템이 초기화 되었으면 /etc/rc스크립트를
                                 통해서 기본 실행레벨별로 등록된 데몬 프로그램을 실행시킨다.
   4) /etc/rc.d/rc.local : 실행레벨 2,3,5에서의 마지막에 이 스크립트가 실행된다.
   5) login이나 X-window 구동 : 해당 실행레벨별로 텍스트 형태의 login과정이나 X-window가 구동
                               된다.

3.Runlevel
(1) 설명: Runlevel이란 리눅스의 여러가지 부팅단계를 말한다. 보통 윈도우에서도 처음 부팅시
          [F8]키를 누르면 여러가지 부팅의 단계가 나오는 것과 유사하다. 실행레벨에 관계된 설정
          은 /etc/inittab 라는 파일에서 확인할 수 있고, 크게 6개의 실행레벨로 구성되어 있다.
          이러한 실행레벨의 실행은 init프로세스가 담당하며 일반적으로 3이나 5를 사용한다.
(2) 일반적인 실행레벨
   0 : 시스템의 중지에 사용된다. (기본값으로 설정해서는 안된다.)
   1 : 단일사용자모드(Single User Mode) 또는 관리자모드로서 윈도우의 안전모드와 유사한 개념이
      다. login과정을 거치지 않고 네트워크, 웹서버, 파일 공유등과 같은 시스템 서비스는 하지
      않는다. 대개 파일시스템 복구를 위해 사용된다.
   2 : 네트워크 사용하지 않는 다중사용자모드이다. 만약 네트워크 연결이 안되었으면 level 3과 동
      일하다.
   3 : 다중 사용자모드(Multiuser Mode)로서 여러 사용자가 사용할 수 있다. 보통 기본 설정값이다.
   4 : 사용되지 않으나, 사용자가 정의하여 사용할 수 있다.
   5 : X-windows 시스템 실행 모드이다.
   6 : 시스템 재부팅 모드이다. (기본값으로 설정해서는 안된다.)
(3) 단일 사용자 모드
   1) 설명: 실행레벨 1인 모드로 s나 S, emergency 등으로 나타낼 수 있다. 아이디와 패스워드없이
           로그인되는 모드로 로그인한 사용자권한이 단일사용자이므로 root 이다. 보통 이 모드는
           시스템을 관리하기 위해 사용되며 어떠한 서비스도 제공하지 않는다. 단일 사용자 모드를
           사용하는 경우는 시스템이 파일시스템의 문제를 자동으로 해결하지 못하거나 root 패스워
           드를 잃어버렸을 경우 사용한다.
   2) 단일사용자 모드로 들어가기
    ㄱ. 설명: LILO프롬프트에서 linux single이나 linux 1을 입력하면 된다.
    ㄴ. 사용법
     예) boot: linux single
         또는
         boot: linux 1
    ㄷ. 참고
       부트로더로 LILO를 사용하는 경우 레드햇 7.0 이후에서는 사용자의 편의를 위해 그래픽형태
      의 LILO 메뉴를 제공한다. 따라서 단일사용자 모드로 들어가려면 텍스트 형태의 lilo 프롬프
      트가 나타나도록 해야 하는데 이 경우 별도의 키입력이 필요하다. 그래픽 메뉴에서 잘 살펴보
      면 나타난다. 참고로 와우리눅스는 [ESC]이고 레드햇 리눅스는 [CTRL]+[X]이다.
   3) 로그인중에 단일사용자 모드로 변경
    ㄱ. 설명: 로그인한 상태에서 단일사용자로 변경하려면 root 권한상태에서 init 명령을 이용한
             다.
    ㄴ. 사용예
       init 1
(4) 기본 실행레벨 설정 : 부팅시의 기본 실행레벨을 결정하기 위해 init은 /etc/inittab파일에서
                       initdefault라는 부분을 포함한 곳을 찾아 실행한다.
   1) /etc/inittab의 내용
     #Default runlevel. The runlevels used by RHS are:
     #   0-halt(Do NOT set initdefault to this)
     #   1-Single user mode
     #   2-Multiuser, without NFS(The same as 3, if you do not have networking)
     #   3-Full multiuser mode
     #   4-unused
     #   5-X11
     #   6-reboot(Do NOT set initdefault to this)

     id:5:initdefault:
      => 위 예에서 '#'부분은 주석이라고 부르는 부분으로 파일의 실행과 관계없이 어떠한 설명이나
        참조 글을 첨부할 때 쓴다. 따라서 실질적인 부분은 'id:5:initdefalut:'이다. 현재 설정값
        은 레벨 5인 X-window구동이다. 즉 부팅을 시키면 자동으로 X-window가 구동된다. 만약 콘솔
        모드(텍스트모드)형태의 login 메뉴로 부팅을 시키려면 값을 3으로 설정한다. 그 후 재부팅
        시키면 X-window가 구동되지 않고 login이 뜬다. 만약 login후에 X-window를 구동시키려면
        startx라고 치면 X-window가 구동된다.
   2) 실행레벨의 확인
    ㄱ. 설명: 실행레벨에 대한 정보를 보기 위해서는 runlevel명령을 이용한다. runlevel 명령이
             실행되면 이전의 실행레벨과 현재 실행레벨이 공백으로 구분되어 표준출력으로 보여진
             다. 만약 실행레벨이 변경되지 않았다면 이전이 실행레벨은 N으로 표시된다.
    ㄴ. 사용예
      a. [root@www rc.d]# runlevel
         3 5
          => 이전 실행레벨이 3이고 현재 실행레벨이 5라는 뜻이다.
      b. [root@www rc.d]# runlevel
         N 5
          => 기본 실행레벨 5로 시스템이 재부팅 되었을 경우이다.
   3) 실행레벨의 변경 : init프로세스는 모든 프로세스의 조상이 되는 최상위 프로세스이지만 명령
                     행에서 사용하면 해당 값으로 실행레벨을 변경한다. 이 명령의 실행은 root
                     만 가능하다.
     ㄱ. init : 0에서 6까지의 정수와 S, s, q 등의 문자를 이용하여 실행레벨을 변경한다. 해당
               번호에 따라 init는 실행레벨을 변경하며 S, s 등은 실행레벨1과 동일하다. q는
               init이 /etc/inittab설정 파일을 다시 읽는다.
        - 사용법
         init 실행레벨번호
        - 사용예
          1. init 0 => 시스템을 즉시 종료한다.
          2. init 6 => 시스템을 즉시 재부팅한다.
          3. init 1 => 시스템을 단일 사용자모드로 즉시 변경한다.
     ㄴ. telinit : init과 동일한 파일이다. telinit는 init의 하드링크이므로 서로 바꿔서 사용할
                  수 있다.
     ㄷ. 실행레벨을 변경하는 경우
        a. 실행레벨 0으로 시스템을 종료할 경우
        b. 실행레벨 1로 단일 사용자 모드로 변경할 경우
        c. 실행레벨 6으로 시스템을 재부팅할 경우
        d. 실행레벨 3과 5로 텍스트 로그인과 X11 GUI 로그인 방식을 변경할 경우

(참고) init 명령과 shutdown 명령
  init명령을 이용하여 실행레벨을 변경할 경우 다른 사용자가 접속했거나 다른 여러 웹서비스를 할
경우에는 아무런 공지없이 즉시 실행하게 된다. 따라서 이러한 경우에는 shutdown명령을 사용해야
한다.

4. /etc/rc.d디렉토리와 init프로세스
실행레벨만으로는 원하는 대로 서비스를 설정할 수 없다. System V계열에서는 각 실행레벨에 따른
init동작방식을 /etc/rc.d 아래에 디렉토리와 스크립트로 제어하였는데 리눅스에서도 이 방법을
사용한다.
(1) rc.sysinit : 부팅할 때에 init에 의해 실행되는 스크립트로 파일시스템 마운트 등과 같이 사용
                 자가 시스템을 사용하는 데 필수 작업을 처리한다.
(2) rc : 실행레벨을 변경할 때 사용되는 스크립트이다.
(3) rc.local : rc.sysinit에 의해 호출되는 파일로 시스템 기동할 때에 영향을 받는 사용자 작업과
               rc.sysinit 이외 추가 작업이 포함된다. rc.sysinit에 작업내용을 입력했을 경우에는
               업그레이드 중에 내용이 지워질 염려가 있으나 rc.local파일은 업그레이드해도 내용이
               변경되지 않는다. 부팅시 마다 자동으로 실행할 필요가 있다면 이 파일에 설정하면
               된다.
(4) init.d
   1) 설명: 이 디렉토리에는 시스템에서 제공되는 서비스에 대한 각 시작과 중지를 위한 스크립트를
          포함하고 있다. 예를 들면 /etc/rc.d/init.d/httpd는 아파치 웹서버를 안전하게 시작하거
          나 중지하는 스크립트이다. 이들 스크립트는 기본 형식이 있으며 인자 하나만을 이용한다.
          가장 간단한 인자가 start와 stop이다. 이 외에도 restart, status, reload(서비스를 종료
          하지 않고 변경된 설정 파일만 적용할 때 사용)등이 있다.
   2) 사용예
     ㄱ. /etc/rc.d/init.d/httpd stop    : 아파치 서비스를 멈춘다.
     ㄴ. /etc/rc.d/init.d/httpd start   : 아파치 서비스를 시작한다.
     ㄷ. /etc/rc.d/init.d/httpd restart : 아파치를 멈추고 시작한다. 위의 ㄱ작업과 ㄴ작업을
                                         한번에 한다.
     ㄹ. /etc/rc.d/init.d/httpd reload  : 아파치를 계속 운영하며 설정 파일만 다시 읽게 한다.
                                         이 경우는 설정 파일을 다시 읽도록 실행중인 httpd
                                         데몬에게 SIGHUP시그널을 보낸다.
   3) 관련명령어: service
    ㄱ. 설명: /etc/rc.d/init.d 디렉토리에 존재하는 스크립트를 쉽게 시작시키거나 중지시킬 수
             있는 스크립트이다.
    ㄴ. 사용예
       service sendmail start
   4) 참고
     리눅스에서 부팅과 관련된 디렉토리는 /etc/rc.d 디렉토리이지만 이 디렉토리에 존재하는 디렉
    토리와 파일들이 /etc 디렉토리 바로 하위에 심볼릭링크로도 설정되어 있다. 따라서 실행할 때
    /etc/init.d/httpd start 해도 된다.
     예) /etc/init.d => /etc/rc.d/init.d
         /etc/rc3.d => /etc/rc.d/rc3.d

(5) rc0.d ~ rc6.d 디렉토리 : /etc/rc.d/init.d디렉토리에 있는 초기화 스크립트들은 init프로세스
                            에 의해 직접 실행되지 않는다. 대신 rc0.d에서 rc6.d까지 디렉토리에
                            각 실행레벨에 이들 스크립트에 대한 심볼릭 링크가 만들어져 있다.
                            init프로세스가 실행레벨 n을 시작하면 rcn.d디렉토리에 존재하는 모든
                            링크를 점검한다. 이들 링크는 특별한 형식을 가지고 있다.
   1) 형식
    [K | S][번호][init.d_이름]
   2) 의미
     ㄱ. K : Kill를 의미하며 실행되지 않을 서비스를 말한다.
     ㄴ. S : Start를 의미하며 해당 실행레벨에서 실행되어야 하는 서비스를 말한다.
     ㄷ. 번호 : 순차적인 번호로 링크명에서 이 부분은 정수가 2자리(필요한 경우 0을 앞에 붙일 수
              있음)로 되어 있으며 시작이나 중지 순서를 나타내는 상대 번호이다. 번호가 작을수록
              init에 의해 먼저 실행되며 클수록 나중에 실행된다. 번호를 부여하는 규칙은 없지만
              새로운 서비스를 추가할 경우 반드시 필요한 서비스들이 앞서 실행되도록 해야 한다.
              만일 두 서비스가 동일 번호가 있다면 순서가 결정되기 어렵겠지만 대부분 알파벳순
              으로 실행한다.
     ㄹ. init.d_이름 : 관습에 따라 링크가 되는 스크립트명을 사용한다. init은 이 이름을 사용
                     하지 않지만 관리자가 이해하기 쉽게 스크립트명을 붙인다.
   3) 확인 : /etc/rc.d/rc3.d 디렉토리 확인해보기
     [root@www rc.d]# ls rc3.d
     K05innd        K35dhcpd      K65kprop     S10network   S56rawdevices
     K12mysqld      K35smb        K65krb524    S12syslog    S56xinetd
     K15proftpd     K35vncserver  K65krb5kdc   S13portmap   S60lpd
     K16rarpd       K40mars-nwe   K74nscd      S14nfslock   S80isdn
     K20bootparamd  K45arpwatch   K74ntpd      S17keytable  S80sendmail
     K20nfs         K45named      K74ups       S20pcmcia    S85gpm
     K20rstatd      K50snmpd      K74ypserv    S20random    S85nessusd
     K20rusersd     K50tux        K75gated     S25netfs     S90crond
     K20rwalld      K54pxe        K96irda      S26apmd      S90xfs
     K20rwhod       K55routed     S05kudzu     S28autofs    S95anacron
     K25squid       K61ldap       S06reconfig  S40atd       S99linuxconf
     K28amd         K65identd     S08ipchains  S40snortd    S99local
     K34yppasswdd   K65kadmin     S08iptables  S55sshd
   4) 실행 : init프로세스가 실행레벨 3으로 부팅하면 /etc/rc.d/rc3.d 디렉토리에서 S로 시작되는
            모든 링크들을 번호 순서대로 실행된다. 각 서비스는 start인자를 이용해 실행되며 마지
            막 스크립트가 실행된 후에는 실행레벨3에 필요한 준비를 마친다.

(참고2) root패스워드를 잊어먹었을 경우
root패스워드를 잊어먹었을 경우에는 login을 물어보지 않는 단일 사용자 모드로 부팅하여야 한다.
만약 lilo를 부트 매니저 프로그램으로 사용한다면 처음 부팅시 boot: 라는 메뉴가 나오는데 이 때
'linux single' 또는 'linux 1' 등 이라고 입력하면 login이라는 절차를 물어보지 않고 바로 부팅과
동시에 프롬프트상태가 된다. 이 상태에서 패스워드를 변경하면 된다. 패스워드 변경명령어는
'passwd'이다.

5. 시스템의 재부팅과 종료
(1) 시스템 재부팅하기
   1) shutdown : 시스템을 재시작하거나 전원을 종료하는 명령어로 root권한자만 가능하다. 다른
                방법에 비해 안전하고 조직적인 방법으로 시스템을 종료한다. shutdown은 기본적으로
                단일 사용자모드로 전환하며 옵션을 이용해 시스템을 종료하거나 재부팅할 수 있다.
                이 명령은 해당 옵션에 따라 적당한 실행레벨을 이용하여 init을 호출한다.
     ㄱ. 사용법
        shutdown option 시간 [경고메시지]
     ㄴ. option
       -r : 셧다운후 시스템을 재부팅한다. (=reboot)
       -h : 셧다운후 시스템을 종료한다. (=halt)
       -c : 예약된 셧다운 명령을 취소
       -f : 빠른 부트 모드로 다음 번 부팅 시에 파일시스템을 검사하지 않는다.
       -F : 다음 번 부팅 시에 파일시스템을 강제로 검사한다.
       -k : 실제로 셧다운 하지 않고 경고 메시지만을 전한다.
       -t secs : shutdwon전에 프로세스들이 하던 작업을 마무리 짓도록 secs초 간의 delay를 준다.
       +m : m분 후에 shutdown한다.
     ㄷ. 사용예
        1. shutdown -r now : 시스템을 즉시 재부팅한다.
        2. shutdown -h now : 시스템을 즉시 종료한다.
        3. shutdown -h +10   : 10분뒤에 시스템을 종료하라는 뜻
        4. shutdown -c     : 예약된 셧다운 명령을 취소
        5. shutdown -r +10 : 10분후에 시스템을 재시동하라는 뜻
        6. shutdown -h 23:59 => 자정 직전에 시스템을 종료한다.
        7. [root@www /root]# shutdown -k 1 '1분뒤에 종료합니다.'

           Broadcast message from root (pts/0) Mon Jun  3 01:00:53 2002...

           1분뒤에 종료합니다.
           The system is going DOWN to maintenance mode in 1 minute !!
      (문제) 사용중인 리눅스 시스템을 재부팅하려고 서버에 접속한 사용자에게 "system shutdown
         after 5min!" 이라는 메시지를 주고 5분 후에 재부팅하려면 명령을 어떻게 내려야 하는가?
           => shutdown -r +5 system shutdown after 5min!
    2) CTRL+ALT+DEL누르기 : root권한으로 CTRL+ALT+DEL를 누르면 재부팅된다. (권장안함)
    3) 'init 6'명령내리기 : 역시 권장할 만 한 방법이 아니다.
    4) reboot: 이 명령은 로컬(Local)에서 접속한 사용자라면 모두 사용가능하다. 즉 root 권한자나
              일반사용자도 이 명령을 내리면 재부팅된다.
(2) 시스템의 종료 : 'halt'명령을 내리거나 'shutdown -h now' 명령을 내린다. 또는 'init 0'을
                   실행시킨다.

(참고) 일반적으로 shutdown 관련 명령은 루트권한자 이외에는 사용할 수 없다. 리눅스는 PC용으로도
      많이 사용되므로 로컬(Local)에서 접속했을 경우 root가 아니고 일반사용자라도 재부팅하거나
      전원을 끌 수 있다. 재부팅할때는 reboot, 시스템을 종료할 때는 halt 명령을 내리면 된다.
      물론 X-window을 사용하는 경우 메뉴를 이용하여 전원을 재부팅하거나 종료시킬 수 있다.

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

 

1. GRUB 이란?
GRUB이란 GRand Unified Boot-loader의 약자로 lilo와 같은 부트 매니저 프로그램이다. 부트 프롬프
트에서 명령행형태로 명령을 내릴 수 있으며, ext2, ext3, ReiserFS, JFS, FAT, minix, FFS 파일시스
템을 지원한다. LILO에 비해 좀 더 나은 성능을 가지고 있으며 환경설정파일을 변경하였다 하더라도
LILO처럼 명령을 수행할 필요없이 즉시 반영된다. 하드디스크를 분할하여 앞부분에 윈도우를 8GB
이상으로 할당하여 설치하고 그 뒤의 파티션에 리눅스를 설치하고 LILO를 사용하면 리눅스로 부팅이
안되는 경우가 있는데 lilo대신에 grub을 사용하면 어느 정도는 해결할 수 있다.

2. GRUB 의 기본구성
(1) GRUB 부트 화면
   기본적으로 GRUB 부트 화면은 그래픽하게 메뉴 엔트리형식으로 제공되며, 상/하 방향키로 선택한
  후 [RETURN]키를 입력하면 부팅이 되도록 되어 있다. 또한 GRUB은 여러 형태의 모드를 제공한다.
(2) GRUB의 모드
   1) 개요: GRUB의 부트 화면에서 [a], [c], [e] 키를 누르면 각각에 해당하는 모드로 진입한다.
   2) 모드
     [a] : grub.conf에서 불러 들이는 항목중에 kernel과 관련된 부분의 파라미터를 추가할 수 있게
          해준다. 예를 들면 kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ 라고 있을 때 [a]키
          를 누르면 커널이미지 뒷부분, 즉 ro root=LABEL=/ 이후 부분을 편집할 수 있다. 싱글모드
          로 들어갈 때에 이 키를 누르고 맨 뒤에 single이라고 쳐주면 된다.
     [e] : grup.conf에 리스트로 올라와 있는 항목을 직접 편집할 수 있도록 해준다. 간혹 싱글모드
          로 접근할 때 [a]키를 눌러 이미지 뒷부분에 single이라고 적으면 커널패닉이 떨어지는
          경우가 있는데 이 경우에는 [e]를 눌러 vmlinuz-2.4.18-14 라는 커널이미지 바로 뒤에
          single 이라고 삽입하면 된다.
     [c] : 상호대화식으로 직접 입력할 수 있는 모드이다. grub.conf의 설정이 잘못되어 있는 경우
          직접 입력하여 부팅할 수 있다.
(3) 메뉴 편집 모드(e모드)
   1) 설명: GRUB은 기본 부팅 외에 엔트리를 편집할 수 있는 기능을 제공한다. 엔트리에서 'e'키를
           입력하면 해당 엔트리의 메뉴를 편집할 수 있다.
   2) 편집모드에서 지원하는 키
     e : 해당 라인을 편집한다.
     d : 해당 라인을 삭제한다.
     o : 명령 라인을 추가한다.
     b : 부팅을 시작한다.
   3) 사용예: 기본 runlevel 3인 상태에서 runlevel 5로 부팅하기
    ㄱ. GRUB 부트화면에서 해당 리눅스 메뉴를 선택하고 'e'키를 선택한다.
    ㄴ. kernel 이라는 항목이 들어간 라인으로 이동하고 다시 'e'키를 선택한다.
    ㄷ. 이 라인의 맨 뒤에 5라는 값을 추가하고 [enter]키를 누른다.
    ㄹ. 'b'키를 눌러 부팅을 시작한다.
   4) 참고
     메뉴를 편집한다고 해서 grub.conf의 내용이 바뀌는 것은 아니고 현재 부팅시에만 일시적으로
    적용받는 것이고, 또한 편집이 잘못되었을 경우에 [ESC]키를 누르면 원래값으로 초기화된다.
(3) GRUB 명령행(c모드)
   GRUB의 명령행은 상호대화식으로 진행되고 사용방법은 Bash Shell과 유사하여 [TAB]키를 통한 명
  령행 자동완성기능을 사용할 수 있다. 또한 [ESC]키를 사용하여 취소할 수도 있다.

3. GRUB 설정
(1) 설명: grub의 주 환경설정 파일은 grub.conf이다. 다른 환경설정파일들은 /etc디렉토리에 위치
         하지만 grub의 경로는 /boot/grub/grub.conf이다.
(2) 기본 구성예
   [root@www root]# cat /boot/grub/grub.conf
   # grub.conf generated by anaconda
   #
   # Note that you do not have to rerun grub after making changes to this file
   # NOTICE:  You do not have a /boot partition.  This means that
   #          all kernel and initrd paths are relative to /, eg.
   #          root (hd0,3)
   #          kernel /boot/vmlinuz-version ro root=/dev/hda4
   #          initrd /boot/initrd-version.img
   #boot=/dev/hda
   default=0                   
   timeout=10
   splashimage=(hd0,3)/boot/grub/splash.xpm.gz
   title Red Hat Linux (2.4.18-14)
           root (hd0,3)
           kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
           initrd /boot/initrd-2.4.18-14.img
   title DOS
           rootnoverify (hd0,0)
           chainloader +1
(3) 항목설명
   1) default=0
       => 기본값으로 부팅되도록 설정하는 부분이다. grub 선택화면에서 특별히 선택하지 않으면
         여기에 설정되어진 값에 해당하는 운영체제를 로딩한다. 현재 설정인 0값은 아래 항목중
         에서 제일 먼저 설정되어 있는 운영체제를 말한다.
   2) timeout=10
       => grub 부트화면에서의 대기시간이다. 단위는 초이다. 현재 설정은 10초간 선택이 없으면
         default에 설정된 값으로 부팅된다.
   3) splashimage=(hd0,3)/boot/grub/splash.xpm.gz
       => 부트 화면의 배경이미지를 지정하는 부분이다. xpm형태의 그림이미지를 압축한 xpm.gz파일
         을 사용한다. (hd0,3)의 뜻은 /dev/hda4라는 뜻이다.
         (참고) 리눅스 디바이스 와 grub 디바이스와의 관계
               1. 기본관계
                 /dev/fd0 : (fd0)
                 /dev/hda : (hd0)   => SCSI 하드디스크인 경우에 첫번째 물리적인 디스크도 이값
                                      에 해당한다.
                 /dev/hdb : (hd1)
               2. 사용예
                 /dev/hda1 : (hd0,0)
                 /dev/hda4 : (hd0,3)
    4) title Red Hat Linux (2.4.18-14)
              root (hd0,3)
              kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
              initrd /boot/initrd-2.4.18-14.img
      => 엔트리를 나타낸다. 위의 예는 리눅스의 전형적인 기본구조이다.
        (기본구조)
          title 부트_엔트리_설명
                 root (하드디스크디바이스명,부트파티션명)
                 kernel /커널이미지경로 ro root=루트디바이스명
                 initrd /초기화에_필요한_이미지경로        // 초기화 Ram Disk Loader이다.
   5) title DOS
              rootnoverify (hd0,0)
              chainloader +1
      => 엔트리를 나타낸다. 윈도우계열의 전형적인 기본구조이다.
        (기본구조)
          title 부트_엔트리_설명
                rootnoverify (윈도우가_설치되어_있는_하드디스크_디바이스명,파티션명)
                chainloader +1    // 윈도우 운영체제는 chains-load에 의해서 부팅되는데 이것에
                                  //관한 설정이다.

4. GRUB 명령행을 이용하여 부팅하기
(1) 설명: 부팅 메뉴에서 [c]키를 누르면 'grub>'이라는 프롬프트가 나타나면서 명령을 입력할 수
          있다. 위의 기본 구성예를 바탕으로 부팅해본다.
(2) 사용예
   1) Linux로 부팅하기
     grub> root (hd0,3)
      Filesystem type is ext2fs, partition type 0x83
     grub> kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
        [Linux-bzImage, setup=0x1400, size=0x11154a]
     grub> initrd /boot/initrd-2.4.18-14.img
        [Linux-initrd @ 0xffcb000, 0x20096 bytes]
     grub> boot
   2) 윈도우로 부팅하기
     grub> rootnoverify (hd0,0)

     grub> chainloader +1

     grub> boot

5. GRUB 단일사용자모드로 부팅하기
(1) 설명: 루트패스워드를 변경하거나 기타 시스템작업을 하려면 단일 사용자 모드로 부팅해야 하는
          경우가 있다. GRUB에서 단일 사용자모드로 들어가려면 별도의 작업이 필요하다.
(2) 방법
   1) GRUB 부트메뉴에서 리눅스 커널 엔트리를 선택한다.
   2) 'e' 를 입력하여 엔트리를 수정한다.
   3) 'e'를 입력하면 엔트리의 전체 내용을 보인다. 방향키로 아래의 내용이 나오는 부분으로 이동
     한다.
       kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
   4) 'e' 다시 입력하면 해당 줄의 수정이 가능하게 되는데, 줄의 끝에 'single'이라는 값을 추가로
     입력한 뒤에 엔터키를 누른다.
       kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/ single
   5) 'b'를 입력하면 single 모드로 부팅이 된다.

6. GRUB 패스워드 설정하기
(1) 설명: 단일 사용자모드로 누구나 들어갈 수 있으면 루트패스워드를 관리자도 모르는 상태에서
          변경이 가능하다. GRUB 메뉴에 패스워드를 걸어 단일사용자모드로 접근시에 패스워드를'
          입력하도록 설정할 수 있다.
(2) 설정
   1) 쉘프롬프트에서 grub 이라고 입력한다.
   2) 다음과 같이 grub 프롬프트가 나타난다.
    
         GRUB  version 0.92  (640K lower / 3072K upper memory)

      [ Minimal BASH-like line editing is supported.  For the first word, TAB
        lists possible command completions.  Anywhere else TAB lists the possible
        completions of a device/filename. ]

     grub>
   3) md5crypt 이라고 입력하고 패스워드를 입력한다.
     grub> md5crypt

     Password: ********
     Encrypted: $1$t.z8h/$NXKVZ2A9ovCk1LLRNPCAI0
       => 패스워드를 입력하면 암호화된 패스워드값이 생성된다.
   4) 생성된 패스워드를 /boot/grub/grub.conf 파일에 아래의 내용을 추가한다.
     password --md5 $1$t.z8h/$NXKVZ2A9ovCk1LLRNPCAI0
(3) 사용예: grub에 패스워드 설정시 그 위치가 중요하다.
   1) 단일 사용자모드와 같이 편집을 통한 접근만 막을 경우
     default=0
     timeout=10
     splashimage=(hd0,1)/boot/grub/splash.xpm.gz
     password --md5 $1$/gphl/$oBCc00qqTPHqIDQpimlXC0           // 이부분에 삽입한다.
     title Red Hat Linux (2.4.18-14)
             root (hd0,1)
             kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
             initrd /boot/initrd-2.4.18-14.img
   2) 부팅시 무조건 패스워드를 입력하고 부팅하려는 경우
     default=0
     timeout=10
     splashimage=(hd0,1)/boot/grub/splash.xpm.gz
     title Red Hat Linux (2.4.18-14)
             root (hd0,1)
             kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/
             initrd /boot/initrd-2.4.18-14.img
     password --md5 $1$/gphl/$oBCc00qqTPHqIDQpimlXC0           // 이부분에 삽입한다.
(4) 참고: grub 패스워드를 잃어버렸을 경우
   1) 설치 CD-ROM 을 이용한다.
    ㄱ. 설치한 리눅스 1번 CD-ROM으로 부팅한다.
    ㄴ. 업그레이드모드로 들어가서 LILO같은 부트로더를 다시 설치한다.
   2) 부팅디스크를 이용한다.
    ㄱ. 설치시에 부팅디스크를 만들었을 경우 부팅디스크로 부팅한다.
    ㄴ. 'boot:'라는 화면에서
        vmlinuz root=/dev/hda1           // 이 파티션값은 설치한 곳에 따라 달라진다.
        로 부팅한다.
    ㄷ. /boot/grub/grub.conf를 편집기로 열어 패스워드설정한 부분을 삭제한다.

7. GRUB 기타내용
(1) 전체설치한 경우 lilo에서 grub으로 부트 로더 바꾸기
   1) lilo -u
       => lilo 를 삭제한다. 경우에 따라 lilo -U
   2) grub-install /dev/hda
       => grub을 부트 로더로 설치한다.
(2) grub 제거하기
   리눅스상에서 grub을 제거하는 방법을 없다. grub을 제거하려면 lilo와 같은 다른 부팅 로더를 설
  치하거나 도스로 부팅하여 fdisk /mbr을 실행시키면 된다.

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

 

1. lilo란?
Linux Loader의 약자로 한 컴퓨터 안에 여러 운영체제(OS:Operating System)가 설치되어 있을 경우
운영체제를 선택하여 부팅할 수 있도록 해주는 부트 매니저 프로그램이다. 여러 다른 운영체제등과
같이 멀티부팅을 하거나 리눅스에서 서로 다른 여러 개의 커널버전으로 부팅을 원할 경우에 사용하면
된다.

2. lilo의 설치
lilo는 리눅스 처음 인스톨시 설치하는 데 두 군데에 설치할 수 있다. 일반적으로는 MBR(Master Boo
t Record)와 리눅스의 '/'(예를 들면 /dev/hda1이나 /dev/hda2)에 선택하여 설치가 가능하다. 그러나
다른 운영체제와 충돌나는 경우가 아니라면  lilo는 하드디스크의 Master Boot Record에 설치하도록
한다. /(root partition)에 설치했을 경우에는 부팅디스크를 만들어야 부팅이 된다.

3. lilo의 구성
(1) 설명: lilo는 환경파일인 lilo.conf와 실행파일인 lilo로 구성되어 있다. lilo.conf파일은 시스
          템파일이지만 vi와 같은 에디터로 편집가능하다. 환경설정의 변경은 lilo.conf파일에서 한
          뒤에 변경된 사항을 반영시키기 위해서는 실행파일인 lilo를 실행시켜야 한다. 두 파일의
          경로는 아래와 같다.
(2) 파일의 경로
   1) 환경설정파일: /etc/lilo.conf
   2) 실행파일: /sbin/lilo

4. lilo.conf 파일
(1) 설명 : /etc디렉토리에 위치하는 파일로 lilo의 환경설정 파일이다.
(2) 설정 : vi와 같은 에디터를 사용하여 편집하고 편집 후에는 /sbin/lilo를 실행시켜야 된다.
(3) 설정예
   boot=/dev/hda
   map=/boot/map
   install=/boot/boot.b
   prompt
   timeout=50
   default=linux

   image=/boot/vmlinuz-2.2.14-12kr
          label=linux
          read-only
          root=/dev/hda3

   other=/dev/hda1
          label=dos

     => 위의 설정은 리눅스와 도스(혹은 윈도우즈)가 같이 인스톨되어 있음을 알 수 있다.
(4) 주요설정항목 설명
  boot=/dev/hda   // lilo가 설치되는 위치를 나타낸다. 첫번째 IDE 드라이브의 마스터부트레코드
                    (MBR)에 리로부트레코드를 설치한다. MBR에 설치하면 lilo가 시스템의 기본
                    부트 로더가 된다.
  map=/boot/map   // lilo에 의해 자동으로 생성되는 파일로 부트 로더 어디에 커널(운영체제의
                    핵심부분으로 도스로 말하자면 io.sys나 msdos.sys에 해당함.)의 블럭이 있는
                    가를 알려준다.
  install=/boot/boot.b   // /sbin/lilo가 다음의 파일로부터 리로 부트 레코드를 마스터 부트 레코
                           드(MBR)의 위치에 복사한다. 즉 이 파일에 부트 섹터의 위치정보를 가지
                           고 있다.
  prompt          // 'boot:'라는 프롬프트를 표시한다.
  timeout=50      // 키보드 입력이 없을 때 첫번째 등록된 부팅 항목 또는 default= 설정행에서
                    지시하는 항목으로 부팅된다. 시간 설정은 1/10초 단위로 설정되므로 50이면
                    5초를 의미한다. 해당 시간동안 어떠한 키입력도 없으면 기본 설정으로 부팅
                    된다. 부팅의 메뉴를 보려면 TAB키를 누르면 된다. 무한정으로 대기하려면 이
                    항목을 삭제하면 된다.
  default=linux   // 여러 메뉴중에서 부팅될 항목을 지정해주는 설정이다. 만약 이렇게 설정되어
                    있다면 linux로 부팅된다. 다른 운영체제로 부팅을 원한다면 label= 설정행에
                    서 지정된 값을 적으면 해당 운영체제로 부팅된다. default= 설정행이 없으면
                    image= 또는 other= 설정행에서 첫번째로 등록된 항목으로 일정시간 후에 부
                    팅된다.
  image=/boot/vmlinuz-2.2.14-12kr   // 리눅스 커널 이미지를 등록하는 부분이다.
  label=linux      // 부팅하고자 구별하는 인식단어를 의미한다. 임의로 지정해도 된다. 유의점으
                     로 만약 linux2-4.20 으로 레이블을 설정했을 경우 'boot:' 프롬프트에 단일
                     사용자모드로 들어가려면 'linux2-4.20 single' 이라고 입력해야 한다.
  read-only        // 리눅스는 대부분의 경우 일단 루트파티션을 읽기 전용으로 마운트한다.
  root=/dev/hda3   // 리눅스가 설치된 루트 장치명을 표시한다.
  other=/dev/hda1  // 리눅스 이외의 도스/윈도우95/윈도우98 등의 운영체제가 설치된 파티션 위치
                     를 지정하고 등록하여 설정한다.
  initrd=/boot/initrd-2.2.16-3kr2.img   // 초기화에 필요한 램디스크(RAM Disk) 이미지를 표시한
                                          다. SCSI하드디스크를 사용하는 경우에는 커널 패닉에
                                          빠지지 않게 하기 위해서 initrd 이미지를 정확히 지정
                                          해야 한다.
  single-key  // 라벨을 입력하는 것이 아니라 키 하나만 입력하여 선택할 수 있도록 한다. alias=
                이라는 항목과 같이 쓰인다.
  alias=1     // single-key라는 항목과 같이 쓰이며 운영체제 선택시 1만 누르면 해당하는 운영체
                제로 부팅된다.
  message=/boot/message   // 리로부팅시 보여줄 메시지의 경로를 적어준다. 요즘은 이미지도
                              가능하다.
  password=1234           // 패스워드를 설치하여 부팅하기 전에 패스워드를 입력해야 한다. 보통
                            아래의 restricted 키워드와 같이 사용된다. 만약 restricted를 사용하
                            지 않고 단독으로 사용했을 경우 모든 운영체제와 모든 레벨에 대해
                            무조건 패스워드를 묻는다.
  restricted              // 패스워드를 묻되 lilo에서 기본 메뉴 엔트리로 등록된 것이외인 경우
                            에만 묻도록 한다. 즉 위의 password 항만 있으면 어떤 값을 선택하여
                            부팅하든지 패스워드를 적도록 되어 있지만 이 값이 들어가면 지정된
                            메뉴 이외, 예를 들면 기본 엔트리에 linux와 windows가 있을 경우
                            linux 나 windows 선택시에는 패스워드를 묻지 않고 기본 엔트리가
                            아닌 'linux 1' 등의 접속을 시도할 경우에는 패스워드를 묻는다.
                            password 항만 적어서 사용하면 원격지에서 재부팅할 경우 문제가 될
                            수 있으므로 이 키워드와 같이 사용하여, root패스워드를 바꿀 수 있는
                            단일사용자모드로의 접근 금지 등에만 사용하는 것이 좋다.
  lba32 // 8GB이상의 하드디스크영역에서 LILO를 사용하기 위해 설정한다.

(참고1) 레드햇리눅스 8.0에서 일반적인 예
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.18-14
       label=linux
       initrd=/boot/initrd-2.4.18-14.img
       read-only
       append="root=LABEL=/"

(참고2) 리눅스에서 두 가지의 커널을 사용했을 경우의 예
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=10
linear
default=linux-up

image=/boot/vmlinuz-2.2.16-3kr2smp
         label=linux
         initrd=/boot/initrd-2.2.16-3kr2smp.img
         read-only
         root=/dev/sda2

image=/boot/vmlinuz-2.2.16-3kr2
         label=linux-up
         initrd=/boot/initrd-2.2.16-3kr2.img
         read-only
         root=/dev/sda2


(참고3) 'single-key'와 'alias= '가 사용된 예
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50 : "Boot"              // 이 설명은 "Boot"라는 메시지가 뜬 후 5초라는 뜻이다.
single-key
message=/boot/message
lba32                            // 8GB이상의 하드디스크사용시 나타난다.
default=linux
password=1234
restricted

image=/boot/vmlinuz-2.2.17-8wl2
        label=linux
        alias=1
        read-only
        root=/dev/hda3

other=/dev/hda1
        label=win
        alias=2


5. lilo의 실행
(1) 사용법
   lilo [옵션]
(2) 옵션
   -u : 설치된 lilo를 삭제한다.
   -D : 디폴트 운영체제를 변경한다. lilo.conf의 default값이 변경되는 것은 아니다.
(3) 사용예
   1) [root@house /sbin]# lilo  // lilo.conf의 변경후에는 꼭 lilo를 실행시켜야 한다.
      Added linux *
      Added win
   2) [root@house /sbin]# lilo -D win    // 디폴트 운영체제를 win으로 한다.


6. lilo의 삭제
(1) linux에서의 삭제
   lilo -u
(2) Windows에서의 삭제
   fdisk /mbr

7. lilo의 복구
(1) 재설치 : 설치한 리눅스의 CD가 있으면 CD-ROM으로 부팅후 업그레이드를 선택한 후 설치한다.
             짧은 시간 안에 리눅스에 대한 큰 지식이 없어도 가능하다.
(2) Linux와 Windows를 같이 설치한 경우
   1) 윈도우즈로 부팅한다.
   2) 리눅스 인스톨 CD를 찾는다.
   3) CD의 dosutil라는 디렉토리의 loadlin이라는 파일과 autoboot디렉토리의 vmlinuz파일을 루트에
     복사한다.
   4) 도스모드로 재부팅한다.
   5) 다음과 같이 명령을 내려 리눅스로 부팅한다.
     loadlin vmlinuz root=/dev/hda3 ro
   6) 리눅스의 root로 로그인하여 터미널창에서 /sbin/lilo를 입력한다.
3. 리눅스에서 복구디스크 만들기
  (1) 현재 커널 버전을 확인한다.
     [root@house /root]# uname -a
  (2) 명령을 내려 복구 디스켓을 만든다.
     [root@house /sbin]# mkbootdisk --device /dev/fd0 2.2.16-3kr2

(참고) 복구디스크 만든 후 부팅하기
  boot: vmlinuz root=/dev/hda2
   => 여기서 /dev/hda2는 루트파티션이 설치된 영역을 말한다. 설치시 나눈 파티션에 맞게 값을
     입력하면 된다.

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

 

1. bash에서의 쉘변수와 환경변수
(1) 쉘변수
   1) 개요: 말 그대로 특정한 쉘 즉 bash에서만 적용되는 변수를 말한다.
   2) 특징
    ㄱ. 지정하는 방법은 '변수명=값' 형태로 지정하면 된다.
       예) [posein@www posein]$ COLOR=red
    ㄴ. 변수값을 출력할 때는 변수명 앞에 $을 붙여 echo명령을 사용하면 된다.
       예) [posein@www posein]$ echo $COLOR
           red
(2) 환경변수: 모든 쉘에 영향을 미치는 변수라는 것을 제외하고는 쉘변수와 지정방법이나 특징이
              유사하다.
(3) bash에서 쉘변수를 환경변수화시키기: export명령을 사용하면 된다.

2. 일반적인 환경변수목록
(1) 환경변수
   1) HOME : 사용자의 홈디렉토리
   2) PATH : 실행파일을 찾는 경로
   3) LANG : 프로그램 사용시 기본 지원되는 언어
   4) PWD : 사용자의 현재 작업하는 디렉토리
   5) TERM : 로긴 터미널 타입
   6) SHELL : 로그인해서 사용하는 쉘
   7) USER : 사용자의 이름
   8) DISPLAY : X 디스플레이 이름
   9) VISUAL : visual 편집기의 이름
   10) EDITOR : 기본 편집기의 이름
   11) COLUMNS : 현재 터미널이나 윈도우 터미널의 컬럼수
   12) PS1 : 명령프롬프트변수
   13) PS2 : 2차 명령프롬프트이다. 명령행에서 \를 사용하여 명령행을 연장했을 때 나타난다.
   14) BASH : 사용하는 bash 쉘의 경로
   15) BASH_VERSION : bash의 버전
   16) HISTFILE : history 파일의 경로
   17) HISTFILESIZE : history 파일의 크기
   18) HISTSIZE : history에 저장되는 갯수
   19) HISTCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수이다.
   20) HOSTNAME : 호스트의 이름
   21) LINES : 터미널의 라인 수
   22) LOGNAME :로그인이름
   23) LS_COLORS : ls 명령의 색상관련 옵션
   24) MAIL : 메일을 보관하는 경로
   25) MAILCHECK : 메일확인시간
   26) OSTYPE : 운영체제 타입
   27) SHLVL :쉘의 레벨
   28) TERM :터미널종류
   29) UID : 사용자의 UID
   30) USERNAME : 사용자이름
(2) 사용예
   1) [posein@www /]$ mkdir $HOME/backup
      [posein@www /]$ ls -ld $HOME/backup
      drwxrwxr-x    2 posein   posein       4096  1월 15 01:31 /home/posein/backup
   2) [posein@www /]$ echo $PS1
      [\u@\h \W]\$
       => 프롬프트 형식
          \d : '요일 달 날짜'형태로 나타내준다. (예 "Wed Jan 15")
          \h : 호스트이름을 보여준다. 보통 '.'를 사용한 이름인 경우 첫번째 '.'까지 보여준다.
          \H : 호스트이름을 보여준다.
          \l : 쉘의 터미널 장치의 이름을 보여준다.
          \s : 쉘의 이름을 보여준다.
          \t : 24시 형태의 현재 시간을 보여준다. (예 HH:MM:SS)
          \T : 12시 형태의 현재 시간을 보여준다. (예 HH:MM:SS)
          \@ : am/pm 12시 형태의 현재시간을 보여준다.
          \u : 현재 사용자의 이름을 보여준다.
          \w : 현재 작업디렉토리를 보여준다.
          \W : 현재작업디렉토리의 마지막 디렉토리만 보여준다.
          \! : 현재 명령의 히스토리 넘버를 보여준다.
          \\ : \를 보여준다.
   3) [posein@www posein]$ PS1="[\u@\t \W]\$ "
      [posein@00:53:51 posein]$
       => 프롬프트에서 호스트이름대신에 현재시간을 표시하도록 설정하였다.

3. 환경변수관련 명령
(1) set : shell변수를 표시하고 값을 지정할 수 있다. C-shell에서는 변수와 값지정시에 필수적으
          로 사용해야 하지만, Bash에서는 변수와 값지정시에 꼭 set 명령을 지정하지 않아도 된다.
   1) 사용법
     set [option] [argument]
   2) option
     -o : 현재 set옵션의 상태를 표시한다.
   3) 사용예
    ㄱ. set
        => 옵션이나 인자가 주어지지 않으면 이미 지정된 shell변수와 함수이름,값이 표시된다.
    ㄴ. set -o
        => 현재 set옵션의 상태가 표시된다.
   4) 응용예
     [posein@www posein]$ a=1               // bash에서는 set 명령없이 "변수=값" 형태로 지정
                                              하면 된다. 확인은 인자없이 set 이라고 입력한다.
     [posein@www posein]$ echo $a
     1
      => 변수로 선언되었으므로 $a하면 1이라는 값이 출력된다.
     [posein@www posein]$ /bin/csh          // 임시로 C-shell로 전환.
     [posein@www ~]$
      => C-shell로 전환하면 프롬프트로 바뀜을 알 수 있다.
     [posein@www ~]$ b=2
     b=2: Command not found.
      => bash에서 변수지정하는 것처럼 하면 오류가 나타남을 알 수 있다.
     [posein@www ~]$ set b=2
      => C-shell 계열에서는 변수와 값지정시 set 명령을 사용해야 한다. 확인하려면 인자없이 set
        이라고 입력한다.
     [posein@www ~]$ echo $b
     2
       => 변수로 선언되었으므로 $b하면 2라는 값이 출력된다.

(2) env : 환경변수에 대한 정보를 보여준다.
   1) 환경변수란 : 로그인할 때나 새로운 쉘을 파생시킬 때 쉘의 환경을 정의하는 중요한 역할을
                  수행한다. env를 실행하면 환경 변수 설정값들을 확인할 수 있고 또한 각 환경
                  변수를 나타낼 때 변수이름앞에 $를 붙인다.
   2) 사용예
     [root@www /root]# env
      => 현재 시스템의 환경변수를 보여준다.
   3) 환경변수의 설정 : 값을 지정한후 export해야 한다. 현재 리눅스의 bash에서는 export를 생략
                       해도 반영된다.
     예) 패스변경하기
        [posein@www posein]$ echo $PATH
        /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
          => 현재 패스를 확인하면 홈디렉토리를 없다. 홈디렉토리를 추가해보자.
        [posein@www posein]$ PATH="$PATH:/home/posein"
        [posein@www posein]$ export PATH
        [posein@www posein]$ echo $PATH
        /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin:/home/posein
(3) export : 쉘변수를 환경변수로 만들어주는 명령이다. 현재 리눅스 bash에서 일시적인 반영시에
             는 생략해서 사용할 수 있다.
   1) 사용법
     export 환경변수=변수값
   2) 사용예
    ㄱ. [root@www root]# export PATH="$PATH:/usr/local/apache/bin"
          => 현재 설정된 패스값에 /usr/local/apache/bin이라는 경로를 추가한다.
    ㄴ. [posein@www posein]$ PATH="$PATH:/home/posein"
          => 현재 설정된 패스값에 "/home/posein"이라는 경로를 추가한다. export명령을 생략해서
            사용해도 된다.
   3) 참고: export 명령은 쉘변수를 환경변수로 만들어 준다. 그러나, 쉘에서 export로 선언하여
           사용한 뒤에 로그아웃하게 되면 초기화된다. 따라서, 해당 환경변수의 값을 계속적으로
           반영되도록 하려면 /etc/profile(전체시스템)이나 ~/.bash_profile(개인사용자)파일안에
           선언하면 된다.

(4) unset : 선언된 변수를 제거하는 데 사용한다.
   1) 사용법
     unset 변수이름
   2) 사용예
     [root@www /root]# TEL=042
     [root@www /root]# echo $TEL
     042
     [root@www /root]# unset TEL
     [root@www /root]# echo $TEL   // 변수가 제거되었으므로 아무값도 출력되지 않는다.

(참고) bash에서는 환경변수를 만들 때 변수 값을 설정한 후, 환경에 변수를 익스포트(export)하는
       두 단계를 거친다.
   * 사용예
    [posein@www posein]$ echo $LANG       // 언어관련 환경변수값 확인
    ko_KR.eucKR
    [posein@www posein]$ date
    수  5월 21 01:28:56 KST 2003          // 한글로 표시된다.
    [posein@www posein]$ LANG=euc_UN      // 영어로 변경
    [posein@www posein]$ export LANG      // 일시적으로 변경할 경우에는 생략가능
    [posein@www posein]$ date
    Wed May 21 01:29:07 KST 2003          // 영어로 표시된다.


4. 명령어 히스토리(command history)
(1) history에 대하여
   1) 설명: bash에서는 입력하여 실행했던 모든 명령들은 히스토리 리스트 버퍼에 스택으로 저장된
           다. 이 기능은 반복하여 입력하거나 명령을 수정할 때 유용하게 쓰인다. 사용법은 방향키
           위/아래를 누르면서 사용가능하다. 히스토리 파일은 각 사용자의 홈 디렉토리에
           .bash_history라는 이름으로 존재하며 쉘 실행 중에는 메모리에만 명령어 히스토리를
           기억하고 있다가 로그아웃시에 .bash_history파일에 저장한다.
   2) 사용예
     [posein@www posein]$ history
      => 입력한 명령어들의 리스트를 보여준다.
(2) history 관련 변수
   1) 종류
     ㄱ. HISTSIZE : 히스토리 스택의 크기가 지정되어 있다. 단위는 명령의 개수이다. 이 변수의
                   설정값을 변경했을 경우 history명령을 내리면 해당개수만큼만 출력된다. 또한
                   방향키로 검색했을 경우에는 설정한 명령한 개수만 검색된다.
     ㄴ. HISTFILESIZE : 실질적인 히스토리파일의 크기이다.
     ㄷ. HISTFILE     : 히스토리 파일의 위치를 보여준다.
     ㄹ. HISTCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수이다.
   2) 사용예
     ㄱ. [posein@www posein]$ echo $HISTFILE
         /home/posein/.bash_history
     ㄴ. [posein@www posein]$ HISTSIZE=1
          => 실질적인 히스토리 파일의 스택크기가 1이 되므로 방향키로 조회해도 나오지 않는다.
(3) ! 과 히스토리 명령문 : 느낌표(!)를 이용하여 실행할 수 있다.
   1) 사용법
     !!  : 마지막으로 실행했던 명령문을 실행한다.
     !n  : n번째 실행한 명령문을 실행한다.
     !-3 : n번째 이전에 실행했던 명령문을 실행한다.
     !string : 가장 최근에 'string(문자열)'으로 시작하는 명령문을 실행한다.
     !?string? : 가장 최근에 실행했던 명령문중 string을 포함하고 있는 명령문을 실행한다.
                배포판에 따라 string뒤에 ?는 생략가능하다.
     ^string1^string2 : 마지막 실행 명령문의 string1을 string2로 대체한 후 실행한다.
   2) 사용예
     ㄱ. [posein@www posein]$ pwd
         /home/posein
         [posein@www posein]$ !!
         pwd
         /home/posein
           => pwd가 실행된다.
     ㄴ. [posein@www posein]$ !-4
         date
         수  5월 21 01:51:08 KST 2003
          => history 스택을 거슬러 4만큼 올라가서 해당 명령을 실행한다. 현재의 예제는 date
            명령임을 알 수 있다.
     ㄷ.[posein@www posein]$ !100
          => history의 번호중에서 100번 명령을 실행한다.
     ㄹ. [posein@www posein]$ set
         .....
         [posein@www posein]$ !s
          => 가장 최근에 's'로 시작하는 set명령이 실행된다.
     ㅁ. [posein@www posein]$ ls -alF
         .....
         [posein@www posein]$ !?al
          => ls -alF가 실행된다.
     ㅂ. [posein@www test]$ ls
         a.txt
         [posein@www test]$ cp a.txt b.txt
         [posein@www test]$ ^b.txt^c.txt
         cp a.txt c.txt
         [posein@www test]$ ls
         a.txt  b.txt  c.txt
(4) 참고 - history관련 테크닉
   1) [CTRL] + [r]
       => 명령프롬프트상태에서 이 키 조합을 누르면 검색할 수 있는 명령프롬프트가 뜬다. 이 때
         특정한 문자를 입력하면 가장 최근에 그 문자로 수행한 명령을 보여준다.
   2) [ESC] 후에 [.] 또는 [ALT] + [.]
       => 최근에 사용된 인자(argument)를 붙여준다. 텔넷으로 접속한 경우에는 [ALT]+[.]은 사용할
         수 없다.
   3) export HISTCONTROL=ignoreboth
       => 중복되어지는 명령어는 히스토리에 기억하지 않는다. 명령행에 입력하거나 계속적으로
         반영시키려면 .bashrc파일에 기록한다.

5. alias
(1) 개요 : 명령어에 별명(alias)를 만드는 것이다. 어떠한 명령에 기본으로 옵션을 추가시키거나
           자신만의 독특한 명령어를 만들 수 있다. 기본적으로 alias만 입력했을 경우에는 현재
           설정된 alias를 보여준다.
(2) 사용법
    alias 별명이름='실행될 명령의 정의'
(3) 사용예
   1) alias
       => 현재 설정된 alias를 보여준다.
   2) alias rm='rm -i'
       => rm명령에 기본으로 -i옵션을 부여하여 rm명령을 실행시킬때마다 확실히 지울 것인지 물어
         본다.
   3) unalias rm
       => rm에 설정된 ailas를 해제한다.
(4) 특징
    1) 일반쉘상태에서 alias를 설정한 뒤 로그아웃하면 그 설정은 무효가 된다.
    2) alias의 해제는 unalias명령을 이용한다.
    3) alias의 설정을 지속적으로 반영시키려면 ~/.bashrc파일안에 설정하면 된다.
(참고) ~/.bashrc파일안에 설정하면 다음 로그인부터 그 값이 반영된다. 만약 즉시 반영하고 원할
       경우에는 'source .bashrc'를 실행시키면 된다.

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

 

1. C-Shell변수와 환경변수의 개요
C-Shell은 자체의 변수를 가지고 있는데, 이것을 쉘변수라 하고, 환경변수는 모든 쉘에서 사용할
수 있는 변수다.
(1) 쉘변수 : set명령으로 설정하고, unset명령으로 제거할 수 있다. 인자없이 set 명령만 실행시키
             면 설정된 쉘변수를 보여 준다.
   1) 쉘변수의 확인 : 쉘변수의 값을 확인할 때는 앞에 $를 붙여 확인하며 echo명령을 이용한다.
     예) path값을 알고 싶은 경우
        echo $path
   2) 쉘변수의 설정 : set명령을 사용
     ㄱ. 값을 가지고 있지 않은 변수의 설정
       set 변수
     ㄴ. 값을 가지고 있는 변수의 설정
       set 변수=값
     ㄷ. 쉘변수의 지우기
        unset 변수

(2) 환경변수 : 사용자의 환경을 설정하는 변수 C-shell에서는 setenv와 unsetenv명령을 사용한다.
               현재 설정되어있는 환경변수의 리스트를 보려면 아무인자 없이 setenv 또는 env를
               실행시키면 된다.
   1) 사용예
     ㄱ. C-shell
        setenv TERM vt100 => 터미널환경을 vt100으로 설정한다. 주의할 점은 "="를 쓰지 않는다.
     ㄴ. 참고
        setenv TERM=vt100 => "TERM=vt100"이라는 이름을 가지는 값이 없는 변수를 생성한다.
   2) Bourne Shell
     TERM=vt100
     export TERM

(3) C-shell변수와 환경변수
   보통 같은 역할을 하는 C-shell의 쉘변수와 환경변수가 있을 경우 C-shell의 쉘변수를 설정하면
  C-shell이 해당하는 환경 변수를 자동적으로 설정해준다. 참고로 C-shell변수를 set 명령으로 지정
  하면 같은 역할을 하는 환경 변수의 값도 바뀌지만, setenv명령으로 환경변수의 값을 바꾸면 같은
  역할의 C-shell변수는 값이 바뀌지 않는다.

같은역할을 하는 셀변수와 환경변수
C-Shell변수 환경변수 의미
$path $PATH 실행 파일을 찾을 경로지정
$term $TERM 현재 터미널 타입
$home $HOME 사용자의 홈 디렉토리
$cwd $PWD 현재 작업 디렉토리
$shell $SHELL 사용자의 login shell
$user $USER 사용자의 ID



2. $path와 $prompt
(1) $path에 대하여
   1) $path : 도스와 마찬가지로 유닉스에서도 프로그램을 실행시킬 때 $path로 정의된 디렉토리
             에서 명령을 검색한다. 도스와의 차이점은 도스는 현재 디렉토리가 정의되어 있지
             않아도 되지만, 유닉스의 경우에는 현재 디렉토리도 $path에 정의 되어 있지 않으면
             명령을 찾지 않아 실행시키지 않는다.
   2) path의 지정 : $path의 경우에는 공백으로 구분하고, $PATH인 경우에는 ":"으로 구분한다.
     예) 1. $path의 지정 : 공백문자로 인해 path의 좌우를 ()로 묶는다.
            set path=(/bin /usr/bin /usr/X11/bin)
         2. 이미지정된 path에 추가하기
            set path=($path /usr/sbin)
(2) $prompt에 대하여
   1) 프롬프트란?
     사용자에게 키보드입력을 받을 준비가 되었음을 나타내기 위해 컴퓨터가 화면에 나타내는 기호
    나 메시지를 말한다. 예를 들면 도스에서는 ">"또는 "%"와 유닉스에서의 "$"이나 "#"등이 이에
    해당한다. 리눅스를 인스톨한후 만약 posein이라는 계정으로 로그인하면 보통 다음과 같은 형식
    으로 뜬다.
   2) 기본 프롬프트
     [posein@www posein]$
      => (설명)
        여기서 첫번째 posein은 로그인한 id를 나타낸다. 두번째 www은 Server의 이름, 즉 리눅스
       인스톨시 물어보는 hostname이다. 세번째는 현재 작업디렉토리를 나타낸다. 마지막으로 # 이
       라고 나타나는 데 이것이 바로 프롬프트이다. 이것의 모양은 정통유닉스에서는 shell을 구분
       할때 쓰였다.
   3) 프롬프트의 사용
     ㄱ. 예전 유닉스
        $ : bourne(bash) shell을 사용시 나타나는 프롬프트
        # : C-shell을 사용시 나타나는 프롬프트
     ㄴ. 현재 리눅스에서는 사용자에 따라 프롬프트를 달리한다.
        $ : 일반계정사용자
        # : 루트계정사용자
   4) 프롬프트의 변경
     ㄱ. 일시변경 : 다시로그인하면 원래의 프롬프트로 바뀜
        a. bash : export
           export PS1="[\u@\h \W]\\%"
            \u : 사용자
            \h : 호스트명
            \W : 사용자가 위치하고 있는 경로의 맨 하위 디렉토리
        b. csh : set
           set prompt\"[%n@%m %c]\\%"
     ㄴ. login 프롬프트변경
        a. bash
          /etc/bashrc
        b. csh
          /etc/csh.cshrc

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

 

1. shell이란?
shell은 커널과 사용자간의 다리역할을 하는 것으로 사용자로부터 명령을 받아 그것을 해석하고
프로그램을 실행하는 역할을 한다. shell은 커널에서 분리된 별도의 프로그램이기 때문에 새로운
종류의 shell이 지속적으로 개발되고 있다. 예전 Unix의 shell은 스티븐 본(Steven Bourne)이 개발한
Bourne Shell(sh)과 버클리 대학의 빌 조이(Bill Joy)가 개발한 C shell(csh)뿐이었지만, 현재는
이러한 shell을 기반으로 bash, ksh, tcsh, zsh같은 shell이 개발되었다. Linux에서는 sh을 기본으로
ksh와 csh계열의 장점을 결합한 bash(Bourne Again shell)을 표준으로 하고 있다.

2. shell의 종류와 소개
(1) bash
   Bourne Again Shell의 약자로 GNU 프로젝트에 의해 개발되었다. 리눅스의 표준쉘로 자리잡고 있
  으며 유닉스의 표준 쉘이자 bash의 모태가 된 Bourne Shell(보통 sh이라고 함)과 호환된다.
(2) C shell
   C 쉘은 C 프로그래밍언어와 유사한 형태를 가지고 있기 때문에 붙여졌다. 대부분의 유닉스 프로그
  래머들이 C 언어로 프로그램을 짰기 때문에 많이 사용되었다. 히스토리 기능, 명령어 완성기능, 작
  업 제어 등의 기능이 있고, 버클리 대학의 빌 조이가 개발하였다.
(3) ksh
   Korn Shell(ksh)이라 불리우며 AT&T사의 데이비드 콘(David Korn)이 개발하였다. 역시 명령어 완
  성기능, 히스토리 등의 기능이 있다.
(4) tcsh
   The Enhanced C Shell의 약자로 말 그대로 csh를 기능을 강화시킨 쉘이다. 명령어 라인 에디트
  기능 등을 추가로 지원한다.

3. shell의 사용법
(1) 특징: shell명령문의 일반적 형태는 단순히 명령어만 입력하거나, 명령어 뒤에 각종 옵션과
         인자(argument)를 함께 입력하여 사용할 수 있다. 또한 여러 명령어를 함께 사용할 수
         있다.
(2) 사용법
    command [option] [argument]
(3) 사용예
   1) pwd
       => 현재 작업중인 디렉토리를 표시한다.
   2) wc -l bash_scripts
       => bash_scripts파일의 라인 수를 표시한다.
   3) find / -name bash -print
       => 이름이 bash인 파일이나 디렉토리를 루트(/)디렉토리 아래에서 찾아 표시한다.
   4) ls -alF ; pwd
       => ls -alF 수행후에 pwd 명령을 수행한다.
(4) shell의 명령문 처리 과정
   1) 사용자 터미널, 파일 또는 명령행 옵션으로부터 입력을 받아들인다.
   2) 입력문을 인용법칙에 따라 단어와 연산자로 분리한다. Alias가 있을 경우 이 때 변환한다.
   3) 위에서 분리한 단어(token)들을 단순 또는 복합 명령어로 변환한다.
   4) shell확장법에 따라 token을 확장한 후, 명령어, 파일명, 인자등으로 구분한다.
   5) I/O재지정을 한 후, 인자로 부터 I/O 재지정 연산자를 제거한다.
   6) 명령을 수행한다.
   7) 명령의 종료를 기다린 후, 종료 상태를 검사한다.
(5) 명령의 실행 결과를 명령문으로 대체
   1) 설명 : 명령의 실행결과를 명령문의 일부로 대체한다. 이 경우에 ``(back quotes)나 $()을
           사용한다.
   2) 사용법
     command `command`
     command $(command)
   3) 사용예
     [조건] : man이라는 명령어를 알고 있다. 이 명령어의 위치와 더불어 해당 파일의 소유권, 파일
             의 크기 등을 알고 싶다. 어떠한 방법으로 써야 하는가?
    ㄱ. 일반적인 방법
       [posein@www posein]$ which man
       /usr/bin/man
         => which 명령을 이용하여 파일의 위치를 알아낸다.
       [posein@www posein]$ ls -l /usr/bin/man
       -rwxr-xr-x    1 root     root        39192  9월  3  2002 /usr/bin/man
         => which 명령을 이용하여 알아낸 파일의 위치를 ls명령어를 이용하여 확인한다.
    ㄴ. 명령대체 이용하기
      a. Back Quote(` `) 이용
        [posein@www posein]$ ls -l `which man`
        -rwxr-xr-x    1 root     root        39192  9월  3  2002 /usr/bin/man
      b. $() 이용
        [posein@www posein]$ ls -l $(which man)
        -rwxr-xr-x    1 root     root        39192  9월  3  2002 /usr/bin/man

4. Shell 확인 및 변경
(1) 일단 현재 사용중인 쉘을 확인해보자.
   [posein@www posein]$ echo $SHELL
   /bin/bash
    => 현재 배쉬셀을 사용중이다. 참고로 SHELL은 꼭 대문자로 표기해야 한다.
(2) 쉘을 변경
   1) 임시변경
    ㄱ. 설명: 일시적으로 다른 쉘을 사용할 경우에 쉘상에서 '/bin/csh' 또는 '/bin/bash'이라고
             입력하면 임시로 변경된다. 사용중인 쉘에서 나오려면 exit를 치면 된다.
    ㄴ. 사용예
       [posein@www posein]$ /bin/csh
       [posein@www ~]$
         => 쉘이 바뀌면서 프롬프트가 변경됨을 알 수 있다.
       [posein@www ~]$ exit
       exit
       [posein@www posein]$
         => 원래의 쉘인 bash로 전환된다.
   2) login shell 변경
    ㄱ. 설명: 사용하는 쉘을 완전히 전환할 때는 chsh(change shell의 약자)명령을 이용한다.
    ㄴ. 사용예
       [posein@www posein]$ chsh          // 명령어를 입력한다.
       Changing shell for posein.         // 해당사용자의 패스워드를 물어본다.
       Password:                          // 패스워드를 입력한다.
       New shell [/bin/bash]: /bin/csh    // 사용하고자하는 쉘을 입력한다.
       Shell changed.                     // 쉘이 변경이 완료되었다.
        => C-Shell로 바꾸는 과정이다. 변경된 쉘의 사용은 다음 로그인부터이다.
   3) 다른 방법으로 쉘을 변경
    ㄱ. 설명: root만 가능한 방법으로 사용자와 관련된 파일인 /etc/passwd 파일에서 직접수정한다.
    ㄴ. 방법
      a. vi편집기등을 이용하여 /etc/passwd 파일을 연다.
      b. 변경하고자하는 사용자를 찾는다. 예를 들면 사용자가 posein이면 vi의 명령모드에서
        /posein을 입력하여 해당 라인으로 이동한다.
      c. posein:x:500:500::/home/posein:/bin/bash 에서 bash를 csh로 변경한뒤 저장하고 종료한다.
      d. 다시 로그인하면 변경된 쉘을 이용할 수 있다.
(참고) 지원하는 쉘의 목록
        지원하는 쉘의 목록은 /etc/shells라는 파일에 기록되어 있다. 쉘의 종류가 절대경로로 표시
       되어 있다.

5. 간단한 쉘스크립트(Shell Script)만들기
(1) 개요 : 쉘스크립트란 쉘에 의해 실행될 명령들을 포함하는 파일이다. 쉘스크립트에 있는 명령은
           쉘프롬프트에서 입력할 수 있는 어떤 명령도 될 수 있다. 쉘스크립트를 만드는 가장 쉬운
           방법은 파일명을 명령줄에서 주는 것이다. 쉘 스크립트 실행시 쉘은 스크립트에 있는
           명령을 하나하나씩 실행한다. 그러므로 쉘스크립트를 사용하면 복잡한 일련의 작업 혹은
           반복적인 처리를 간단하고 빠르게 할 수 있다.
(2) 사용예 : 'who2'라는 세 개의 명령줄을 포함한 쉘스크립트를 만들기
   1) 설명: who라는 명령을 기반으로 하여 명령실행하는 순간 현재 시간과 간단한 메시지를 넣도록
           하는 who2 라는 쉘스크립트를 만든다.
   2) 방법
    ㄱ. 먼저 vi로 who2라는 파일을 생성한다.
       [posein@www posein]$ vi who2
       date
       echo "현재 로그인한 사용자의 목록입니다."
       who
    ㄴ. 실행권한 부여 : 실행파일로 만든다.
       [posein@www posein]$ chmod 755 who2
    ㄷ. 실행
       [posein@www posein]$ ./who2
       수  4월 30 21:53:53 KST 2003
       현재 로그인한 사용자의 목록입니다.
       root     :0           Apr 27 21:40
       xitem    pts/5        Apr 29 19:00 (203.xxx.xxx.xxx)
       posein   pts/4        Apr 30 17:17 (203.xx.xxx.xxx)
        => PATH가 되어 있지 않으므로 PATH가 설정된 디렉토리로 옮기든지 아니면 ./who2 라고 실행
          시켜야 한다.
   3) 관련명령어 : sh
    ㄱ. 설명: 실행권한과 상관없이 직접실행시키는 명령어이다.
    ㄴ. 사용예
     [posein@www posein]$ sh who2
       => 실행권한에 상관없이 실행시킨다.
   4) 참고 : 쉘스크립트를 위치에 상관없이 실행시키기
    ㄱ. 설명: 쉘에서 실행명령을 내리면 PATH라는 환경변수에 설정된 경로에서 해당 명령이 찾아
             있으면 실행시켜주고 없으면 실행되지 않는다. 따라서 자신의 홈디렉토리처럼 PATH가
             설정되어 있지 않은 디렉토리에 쉘스크립트를 생성하면 실행시마다 절대경로
             (예 /home/posein/who2)를 입력하거나 ~/who2 라고 입력해야 한다. 따라서 특정 쉘스크
             립트를 계속적으로 사용하려면 PATH에 등록된 경로에 해당 파일을 옮겨놓으면 어떤 위치
             에서라도 해당 명령을 실행시킬 수 있다.
    ㄴ. 설정법
      a. 현재 설정된 패스를 확인한다.
        [posein@www posein]$ echo $PATH
         /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
          => 현재 설정된 패스이다. 임의대로 접근이 가능한 디렉토리는 /home/posein/bin 디렉토리
            이므로 해당 디렉토리에 해당파일을 옮긴다.
      b. 홈디렉토리에 bin 디렉토리 생성하기
        [posein@www posein]$ mkdir bin
         => 패스에는 /home/posein/bin 이라는 디렉토리가 생성되어 있지만 실제로는 생성되어 있지
           않으므로 생성한다.
      c. 해당 디렉토리에 생성한 스크립트을 옮긴다.
        [posein@www posein]$ mv who2 bin

(참고) echo명령
  (1) 설명: echo는 문자열을 그대로 출력하는 명령어이다.
  (2) 사용법
     echo 문자열
  (3) 사용예
    1) [posein@www posein]$ echo I love linux
       I love linux
         => I love linux라는 문자열이 그대로 출력된다.
    2) [posein@www posein]$ echo $PATH
       /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
         => 현재 설정된 PATH를 보여준다.
    3) [posein@www posein]$ user=posein            // 변수와 값을 지정
       [posein@www posein]$ echo user              // 뒤에 있는 문자열 그대로 출력
       user
       [posein@www posein]$ echo $user            
       posein
        => $가 붙으면 뒤에 문자열은 변수로 인식하여 변수의 값을 출력한다.

6.bash shell의 특징
(1) 명령어 History기능 : 전에 사용했던 명령을 다시 사용하고 싶은 경우, 위/아래 방향키를 사용하
                        여 검색할 수 있는 기능이다. 이 명령어들은 ~/.bash_history파일에 저장되
                        어 있으며, history명령을 실행하면 히스토리 리스트에 있는 명령어들이
                        출력된다. 처음 로그인한 경우에는 .bash_history파일이 생성되지 않는다.
                        일단 한번 로그아웃해야 생성이 된다.

(참고) .bash_history파일 없애기
   히스토리파일은 어떠한 명령을 내렸는지를 기록하는 역할을 한다. 나중에 명령을 확인할 수 있다
  는 장점이 될 수 있지만 경우에 따라서는 다른 사람에게 내가 작업한 내용이 노출될 수도 있다.
  따라서, 이런 기능을 없애보자. 일단 .bash_history파일을 삭제하고, mkdir명령을 이용하여
  .bash_history라는 디렉토리를 생성한다. 그러면 동일한 장소에는 동일한 이름으로 파일이나 디렉
  토리의 생성이 불가능하다. 또한 디렉토리가 파일보다 우선순위가 높다.

(2) Alias 기능 : 실행할 명령어에 별명(alias)를 만들어 사용하게 해준다.
   1) 사용법
     alias 별명이름='실행될 명령어 정의'
   2) 사용예
     alias ls='ls -alF'
     => ls라고 명령을 내리면 ls -alF의 결과가 나타난다.
   3) 특징: 쉘에서 설정한 앨리어스는 로그아웃하거나 시스템이 재부팅되면 사라진다.

(참고) 설정한 alias 지속적으로 사용하기
   설정한 alias를 지속적으로 사용하려면 ~/.bashrc(bash run command)파일에 추가하여 사용한다.
  이 파일에 설정한 뒤에 재부팅하거나 source .bashrc를 실행시키면 된다.

(3) [TAB]키를 이용한 파일 이름 완성 기능
   명령어나 파일의 이름이 길거나 일부만 생각날 경우, 그 앞부분 일부만 명령행에 입력한 후에
  [TAB]키를 누르면, 가능한 파일이름을 자동으로 완성시켜 주는 기능이다.
(4) 작업 제어 기능 : 작업을 백그라운드와 포그라운드에서 실행할 수 있으며, 이 들을 서로 전환하
                   여 실행할 수 있다.
   1) 사용예
     [root@www /root]# updatedb &    // db를 업데이트하는 명령을 백그라운드(&)로 실행시킴
     [1] 17294                       // job번호가 1이고 프로세스번호가 17294이다.
     [root@www /root]# jobs          // jobs명령은 현재 진행중인 일과 job번호를 출력한다.
     [1]+  Running                 updatedb &  // updatedb &가 실행중이다.
     [root@www /root]# fg %1         // 현재 백그라운드로 진행중인 job번호가 1인 작업을 포그
     updatedb                        //라운드로 전환하였다. 작업이 하나이므로 %1 생략가능하다.
     [1]+  Stopped                 updatedb  // 포그라운드로 전환하면 다른 작업을 입력불가하다.
                                             //따라서, [CTRL]+[Z] 명령으로 작업을 중단시킨다.
     [root@www /root]# bg            // 다시 백그라운드로 전환한다.
     [1]+ updatedb &

(5) 명령문 편집 기능 : 단순히 명령어만 입력하거나 명령어 뒤에 각종 옵션(option)과 파라미터(pa
                     rameter)등의 인자를 함께 입력하여 사용할 수 있다. 또한 여러 명령을 세미
                     콜론(;)으로 분리해서 사용할 수 있다.
(6) 산술 연산 기능
(7) prompt 제어 기능
(8) 확장된 내부명령어


7.shell에서 사용되는 특수문자
쉘에서는 특별한 의미를 가지고 있는 특수 문자들이 있는데, 이를 메타문자(meta character)라고
한다.
(1) 종류
   ~(tilde)  : 홈디렉토리
    예) ~posein : posein이라는 사용자의 홈디렉토리를 나타낸다.
        ~+ : 현재디렉토리를 나타낸다. '.'과 같다.
   ' : 작은따옴표(Single quotes)는 모든 문자나 특수문자들을 일반문자로 취급한다.
   " : 큰따옴표(Double quotes)는 $,`(Backquotes), \(Backslash)를 제외한 모든 문자들을 일반문자
      로 취급한다.
   `  : 명령 대체(command substitution), Back quote라고 부른다. 큰따옴표안에서 명령어들이 문자
       열이 아닌 명령어의 역할을 하도록 해준다.
   #  : 주석(comment)
   $  : Shell변수
   &  : 후면 작업(background job)
   *  : wildcard라고 부르며, 모든 문자를 뜻한다. 아무것도 없는 경우도 포함한다.
   ?  : 한 문자를 대체할 때 사용하는 wildcard로 사용하고 특정명령에 대한 결과를 갖는 Return
       변수로도 쓰인다. 쉘상에서 내린 명령의 에러유무를 확인할 수 있다.
   () : 부속shell(subshell)
   \  : escape문자. 바로 다음에 오는 특수문자의 기능을 없앤다.
   |  : 파이프(pipe)
   [] : bracket이라고 부르며 [ 과 ]사이에 선택할 수 있는 문자를 나열하여 '~중의 하나'라고 표현
       된다. 범위를 지정할 때는 -를 사용한다. 문자집합을 뜻한다.
    예)
       [abc]    : a,b 또는 c
       [.,;]    : period, comma 또는 semicolon
       [-_]     : dash(-) 또는 underscore(_)
       [*?]     : * 또는 ? => []안의 와일드카드는 의미가 없다.
       [a-c]    : a,b 또는 c
       [a-z]    : a에서 z까지 알파벳 소문자
       [!0-9]   : 숫자가 아닌 문자
       [!chars], [^chars] : c, h, a, r, s중 없는 문자중의 하나로 대체
       [a-zA-Z] : 모든 알파벳문자
   ; : shell 명령 분리자
   {} : {}안에 제시된 문자열 중 하나로 대치시킨다.
     예)
        b{ed,olt,ar}s : beds, bolts, bars
        b{ar{d,n,k},ed}s : bards, barns, barks, beds
   <  : 입력재지정
   >  : 출력재지정
   /  : 경로명 디렉토리 분리자
   !  : 명령문 history
(2) 사용예 : 현재 디렉토리에 a, a.c, a.txt, a.o, b.txt, c.txt, d.o, ab.txt 라는 파일이 있다고
             가정
   1) [posein@www posein]$ ls a*
      a  a.c  a.o  a.txt  ab.txt
       => *는 모든 문자를 뜻한다. 즉 a로 시작하는 모든 파일을 보여준다. 물론 a라는 이름이 파
         일도 찾아준다.
   2) [posein@www posein]$ ls a.?
      a.c  a.o
       => ?는 한문자만 대체한다.
   3) [posein@www posein]$ ls [a-c].*
      a.c  a.o  a.txt  b.txt  c.txt
       => [a-c]는 a,b 또는 c 한문자를 가리킨다.
   4) [posein@www posein]$ ls [!ab].*
      c.txt  d.o
       => a나 b가 들어가지 않는 파일만을 찾아 출력한다.
(3) 응용예
   1) [posein@www posein]$ cp test.txt{,-bak}
       => cp test.txt test.txt-bak 와 같다.
   2) [posein@www posein]$ mkdir work
      [posein@www posein]$ mkdir -p work/{www,ftp,mail}/{data,backup,file}
      [posein@www posein]$ cd work
      [posein@www work]$ ls
      ftp  mail  www
      [posein@www work]$ ls ftp
      backup  data  file
      [posein@www work]$ ls mail
      backup  data  file
      [posein@www work]$ ls www
      backup  data  file
   3) [posein@www work]$ echo "Hostname: hostname"
      Hostname: hostname
      [posein@www work]$ echo "Hostname: `hostname`"
      Hostname: www
      [posein@www work]$ echo "Hostname: $(hostname)"
      Hostname: www
      [posein@www work]$ echo 'Hostname: `hostname`'
      Hostname: `hostname`
   4) [posein@www posein]$ mkdir data
      [posein@www posein]$ echo $?
      0
       => 0 이면 에러없이 잘 수행되었다는 뜻이다. 반환되는 값은 각 프로그램마다 다르지만 대체
        적으로 값이 0이면 성공을 뜻한다.
      [posein@www posein]$ mkdir data             // 다시 한번 명령을 내린다.
      mkdir: cannot create directory `data': 파일이 존재합니다
      [posein@www posein]$ echo $?
      1
       => 0이 아니므로 에러가 발생했음을 알 수 있다.

(참고) 쉘스크립트에서 상태
   0          : 종료상태로 성공적인 수행을 나타낸다.
   0이 아닌값 : 에러를 나타낸다.


(참고) ; 과 &&, ||
  1. 의미
    ;  : 단순히 한줄에 여러 명령을 나열하기 위해 사용한다.
    || : 논리적 OR(Logical-OR)라 부르며 앞선 명령이 성공이면 앞 명령결과를 출력하고 그렇지 않
       으면 뒤의 명령결과를 출력한다.
    && : 논리적 AND(Logical-AND)라 부르며 앞의 명령이 성공적으로 수행되어야만 다음 명령을 수행
        한다.
  2. 사용예
   (1) clear ; ls ; pwd
        => clear 명령 후 차례대로 ls, pwd 명령을 실행시킨다.
   (2) clear; aaa ; pwd
        => 명령을 순서대로 수행하되 앞의 명령의 수행결과의 성공유무에 상관없이 다음명령을 실행
         한다. 즉 clear 명령후에 존재하지 않는 aaa 명령을 실행하고 pwd 명령을 실행한다.
   (3) [posein@www posein]$ grep babo /etc/passwd || echo 'No babo'
       No babo
       [posein@www posein]$ grep posein /etc/passwd || echo 'No posein'
       posein:x:500:500::/home/posein:/bin/bash
        => babo라는 계정은 없고 posein이라는 계정이 있을 때의 경우이다.
   (4) [posein@www data]$ ls
       test.txt
       [posein@www data]$ mv test.txt test.bak && ls
       test.bak
       [posein@www data]$ cp test.txt test.bak && ls
       cp: cannot stat `test.txt': 그런 파일이나 디렉토리가 없음

8. shell에서의 인용부호
문자나 단어의 특별한 의미를 없앨 때 인용부호를 사용한다. 즉 메타 문자가 가지고 있는 특수한
기능을 제거할 때 사용한다.
(1)달러 표시(Dollar sign :$)
   1) 설명: $은 shell변수를 나타낼 때 사용한다. 변수에 특정한 값으로 부여할 때는 =를 사용한다.
   2) 사용예
    ㄱ. [posein@www posein]$ name=posein
        [posein@www posein]$ echo $name
        posein
    ㄴ. [posein@www posein]$ echo $PATH
        /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
         => 경로를 나타내는 변수(PATH)값을 표기한다.

(참고) echo는 텍스트문자열을 그대로 출력하는 명령어이고, PATH는 경로를 나타내는 환경변수이다.

(2)작은 따옴표(Single Quotes: ' ')
   1) 설명: 모든 특수문자의 의미를 제거한다.
   2) 사용예
     [posein@www posein]$ echo '$PATH'
     $PATH
      => ' '안의 $PATH를 단순한 문자열로 표기한다.(변수명 자체를 그냥 문자열로 표기)
(3)큰따옴표(Double Quotes:" ")
   1) 설명: 따옴표 안에 있는 $, `, \를 제외한 모든 문자들의 특별한 의미를 없앤다.
   2) 사용예
     [posein@www posein]$ echo "$PATH"
     /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
      => " "안의 $PATH에 들어갈 내용으로 바꾸어 표기한다.(변수에 들어간 내용을 표기)
(4)백슬래쉬(Backslash : \)
   1) 설명: 다음에 나오는 문자의 특별한 의미를 제거하거나 명령행이 긴 경우 다음라인까지 이어
          서 사용한다는 의미에서도 사용한다.
   2) 사용예
    ㄱ. [posein@www posein]$ echo \$PATH
        $PATH
         => \뒤에 오는 shell변수에 사용되는 $의 특수한 기능을 없애고, 단순한 문자열로 인식
    ㄴ. [posein@www posein]$ echo \$$PATH
        $/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
        => \뒤에 오는 첫번째 $의 특수한 기능을 없애고, 그다음 $PATH는 환경변수로 인식하여 경로
          를 출력한다.
    ㄷ. [root@www php-4.2.3]# ./configure --with-mysql=/usr/local/mysql \
        > --with-apache=../apache_1.3.26 --enable-track-vars
         => 명령어를 입력하다가 \ 를 입력하면 라인이 바뀌면서 2차프롬프트로 >가 나타나면서
          계속 입력할 수 있다.
(5)백쿼터(Back quotes :` `)
   1) 설명: 명령어 대체(command substitution) 즉 ` `로 묶여진 문자열은 명령어로 인식된다.
   2) 사용예
    [posein@www posein]$ echo "Current directory `pwd`"
    Current directory /home/posein
     => ' '안의 pwd를 명령어로 인식하여, 그 결과값인 현재 디렉토리 /home/posein를 출력한다.

9. shell 관련파일 및 디렉토리
(1) /etc/profile : 시스템 전체에 영향을 미치는 환경설정과 시작관련 프로그램 설정을 한다.
(2) /etc/bashrc : 시스템 전체에 영향을 미치는 함수와 aliases관련 설정을 한다.
(3) ~/.bash_profile : 개인 사용자의 환경설정과 시작 프로그램 설정과 관련이 있는 파일로 로그
                      인시에 읽어들인다. 경로, 환경변수 등의 설정이 들어있다.
(4) ~/.bashrc : 개인 사용자가 정의한 aliases와 함수들이 있는 파일이다.
(5) ~/.bash_logout : 개인사용자가 로그아웃할 때 수행하는 설정들이 들어있는 파일이다.
(6) /etc/profile.d : 몇몇 응용프로그램을 위한 시작 스크립트들이 위치하는 디렉토리이다. 보통
                     /etc/profile 에서 호출되어 지는 스크립트들이 위치한다.

10. 명령행에서 사용할 수 있는 테크닉: 명령행 라인에디터 기능
(1) [CTRL] + [A] : 커서를 라인의 첫부분으로 이동시킨다.
(2) [CTRL] + [E] : 커서를 라인의 끝부분으로 이동시킨다.
(3) [CTRL] + [K] : 커서위치부터 라인끝까지 지운다.
(4) [ESC] 후에 [F] : 커서를 다음 단어 처음에 위치시킨다.
(5) [ESC] 후에 [B] : 커서를 이전 또는 현재 단어의 처음에 위치시킨다.
(참고) 명령어 입력스타일도 vi 스타일이냐 emacs스타일로 전환할 수 있다.

11. shell관련 명령어
(1) chsh
   1) 설명 : 쉘을 변경한다.
   2) 사용법
     chsh [option] [shell]
   3) option
     -l : 변경가능한 쉘의 목록을 보여준다. 이 때 참조되는 파일은 /etc/shells이다.
     -s shell_name : 선택한 쉘로 변경한다.
   4) 사용예
    ㄱ. chsh
          => 패스워드를 입력후에 원하는 쉘을 입력하고 변경한다.
    ㄴ. [posein@www posein]$ chsh -l
        /bin/bash2
        /bin/bash
        /bin/sh
        /bin/ash
        /bin/bsh
        /bin/tcsh
        /bin/csh
        /bin/ksh
        /bin/zsh
    ㄷ. [posein@www posein]$ chsh -s /bin/csh
         => 패스워드 입력후에 바로 csh로 쉘을 변경한다.

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

 

1. 그룹 명령 실행
(1) 개요 : 한 명령줄에 여러개의 명령어를 동시에 사용할 수 있는데, ';'를 사용하여 명령어를
           구분해주면 된다.
(2) 사용예
   1) ls ; sleep 10 ; ls
       => ls 명령수행후 sleep에 의해 10초 쉬는 명령을 수행하고 다시 ls명령을 수행한다.

   2)여러 명령의 결과를 모아서 수행 : ( )를 이용하여 하나의 출력을 얻을 수 있다.
     예) i)  ls ; find / -type d > list.txt
            = > find / -type d 만 list.txt로 저장됨.
             (ls ; find / -type d ) > list.txt
             => 두 명령 모두의 결과를 list.txt로 저장
         ii) pwd ; (cd / ; pwd ) ; pwd
             /home/posein
             /
             /home/posein
              => 그룹 명령의 shell은 명령 종료시에는 원래의 shell상태로 전환된다.

2. 표준 입출력(Standard Input/Output)
(1) 개요: 유닉스계열 운영체제에서는 표준 입력과 표준 출력이라는 이름의 데이터 흐름을 사용한
          다. 입력은 특정 프로그램으로 들어오는 값을 말하고, 출력은 특정프로그램에서 나오는
          값이다. 아울러 특정프로그램에서 나오는 출력값은 다른 프로그램의 입력값으로도 사용
          가능하다.
(2) 표준 입출력
   1) 표준 입력(Standard Input): 입력을 담당하는 키보드를 말한다. 줄여서 stdin 이라고 하고
                                숫자값으로 0으로 표기한다
   2) 표준 출력(Standard Output) : 결과값이 보여지는 화면을 말한다. 줄여서 stdout이라고 하고
                                  숫자값으로 1으로 표기한다. 일반적으로 쉘상태에서 숫자값 1은
                                  생략되어 진다.
   3) 표준 에러(Standard error) : 에러값이 보여지는 화면을 말한다. 줄여서 stderr이라고 하고
                                 숫자값으로 2로 표기한다.

3. redirection과 pipe

(1) 개요 : redirection은 어떤 프로세스의 입/출력을 표준 입출력이 아닌 파일로 저장하거나 파일 의 내용을 프로세스의 입력으로 사용하는 기법이며, pipe는 어떤 프로세스의 출력을 다른 프로세스의 입력으로 사용하는 기법이다. (2) redirection 1) 종류 ㄱ. > : 프로세스의 출력을 파일에 저장한다. ㄴ. >> : 프로세스의 출력을 파일에 추가한다. ㄷ. < : 프로세스의 입력을 파일로 부터 읽어 들인다. ㄹ. << : 프로세스의 입력을 파일로 부터 읽어 사용하지만 뒤에 주어진 값 이전까지만 사용한다. 2) 사용예 ㄱ. cat > tmp.txt => 여기서 표준입력은 키보드로 입력한 내용이 되고 출력은 tmp.txt파일이 된다. 키보드 로 입력한 뒤에 [CTRL]+[D]를 누르면 tmp.txt파일에 저장한다 ㄴ. cat >> tmp.txt => 사용자가 입력한 내용을 tmp.txt라는 파일의 뒷부분에 덧붙인다. 만약 tmp.txt라는 파일이 존재하지 않으면 새로운 파일을 생성한다. ㄷ. wc < tmp.txt => tmp.txt라는 파일의 내용을 wc의 입력으로 사용한다. cat tmp.txt | wc와 같다. ㄹ. mail posein < abc.txt => posein이라는 사용자에게 미리작성된 abc.txt내용을 메일로 보낸다. ㅁ. [posein@www posein]$ cat << end > I love linux > I love windows > end I love linux I love windows => end라는 문자열이 나오기 전까지를 표준 입력으로 삼아 출력한다. 3) 응용예 ㄱ. [posein@www posein]$ find / -name '*.txt' => 결과값과 에러를 모두 화면(표준출력)에 보여준다. ㄴ. [posein@www posein]$ find / -name '*.txt' 2>/dev/null => 결과값은 화면에 보여주고, 에러는 화면에 출력하지 않고 버린다. ㄷ. [posein@www posein]$ find / -name '*.txt' >list.txt => 결과값(1)은 list.txt파일에 저장하고 에러는 화면에 출력한다. ㄹ. [posein@www posein]$ find / -name '*.txt' 2>/dev/null > list.txt => 결과값은 list.txt파일에 저장하고 에러는 화면에 출력하지 않고 버린다. ㅁ. [posein@www posein]$ find / -name '*.txt' 2>error.txt => 결과값은 화면에 출력하고 에러는 error.txt 파일에 저장한다. ㅂ. [posein@www posein]$ find / -name '*.txt' 2>error.txt > result.txt => 결과값은 result.txt에 저장하고 에러는 error.txt파일에 저장한다. ㅅ. [posein@www posein]$ find / -name '*.txt' > data.txt 2>&1 => 결과값과 에러값을 모두 data.txt 이라는 한 파일에 저장한다. find / -name '*.txt' &> data.txt 와 같다. ㅇ. [posein@www posein]$ find / -name '*.bak' 2>>error.txt => 결과값은 화면에 출력하고 에러는 error.txt파일에 추가하여 저장한다. ㅈ. [posein@www posein]$ cat test.txt I LOVE LINUX. I LOVE WINDOWS. [posein@www posein]$ cat < test.txt I LOVE LINUX. I LOVE WINDOWS. => 일반적인 명령어는 위의 예처럼 인자값을 받아들여 입력 리다이렉션을 사용한 것과 같 이 쓴다. 그러나, 아래와 같은 몇몇 명령어는 입력 리다이렉션을 사용해야 한다. [posein@www posein]$ tr 'A-Z' 'a-z' < test.txt i love linux. i love windows. (3) pipe : 어떤 명령의 출력값을 다른 명령의 입력으로 사용하게 한다. 파이프(|)는 일종의 필터 역할을 한다. 1) 사용법 cmd1 | cmd2 => cmd1의 결과값이 cmd2의 입력으로 사용된다. 2) 사용예 ls -alF |more => ls명령의 결과값을 한 페이지별로 보여준다. (4) 관련명령어 1) tee ㄱ. 설명: 파이프 연결 출력을 양뱡향으로 나눈다. 즉 이것은 파이프 연결 흐름을 두 개의 방향 으로 갈라지도록 한다. 마치 파이프를 연결할 때 사용되는 T자 연결관과 같다. ㄴ. 사용법 tee [option] 파일 ㄷ. option -i : 인터럽트를 무시하도록 한다. -a : 지정된 파일들로 출력이 덮어쓰지 않고, 뒤에 추가하도록 한다. ㄹ. 사용예 ls -l | tee list.txt |more => 파일의 목록을 list.txt라는 파일에 기록함과 동시에 more를 사용하여 화면에도 출력 내용을 보여준다.


4. alias와 history
(1) alias
   1) 개요: alias란 별명이라는 뜻으로 어떠한 명령이나 명령들의 집합을 다른 명령으로 대치해
           주는 기능을 한다. 이 기능을 사용하여 자신만의 고유한 명령어를 만들어 사용할 수
           있으며, 자주 쓰는 옵션들을 자동적으로 설정해 놓을 수 있다. 인자없이 실행시키면 현재
           정의되어 있는 리스트를 보여준다.
   2) 사용법
    ㄱ. bash
       alias name='command'
    ㄴ. csh
       alias name command
   3) 사용예
    ㄱ. alias의 지정
      a. bash
        alias ls='ls -alF'        // ls명령에 기본으로 옵션을 설정한다.
        alias aaa='ls -alF'       // aaa라는 새로운 명령어를 만든다.
      b. csh
        alias ls 'ls -alF'
    ㄴ. alias를 해제 : unalias명령을 사용한다.
      a. 사용법
        unalias 앨리어스된이름
      b. 사용예
        1. unalias *
            => 모든 alias가 지워진다.
        2. unalias ls
            => ls에 앨리어스된 내용을 해제한다.
        3. unalias aaa
            => aaa에 설정된 앨리어스를 해제한다.
    ㄷ. 원래의 명령실행: 앨리어스된 명령을 해제하지 않고 일시적으로 원래의 명령이 실행되도록
                        할 수 있다. 즉 ls 에 기본적으로 -alF 옵션이 지정되었을 때 일시적으로
                        앨리어스 해제없이 원래의 ls 명령을 실행시킬 수 있다.
      a. 해당 명령의 full path를 지정 : 'ls' 명령을 수행할 경우 /bin/ls 라고 입력한다.
      b. 명령앞에 '\'를 붙인다.
        \ls
   4) 참고: 쉘 상태에서 설정한 alias는 재로그인하거나 시스템이 재부팅되면 다시 설정해야 한다.
           계속 사용하려면 .bashrc에 설정하면 된다.
(2) history
   1) 개요 : shell은 사용자가 명령행에서 실행시킨 명령들을 기록하여 보관하고 있는데, 이것은
            후에 편집하거나 실행시킬 수 있다. 이것을 history라 부른다. '!'는 history를
            나타내는 문자이다. 아무 옵션없이 history라 입력하면 현재까지 저장된 history의
            내용을 보여준다. 또한 상방향커서키를 이용하여 실행했던 명령들도 볼 수 있다.
   2) 사용예
     ㄱ. history => 현재까지 사용된 명령어들을 나열해 준다.
     ㄴ. !!      => 바로 전에 실행시켰던 명령어를 의미한다.
     ㄷ. 특정문자열로 시작하는 history찾기
        !문자열 => 가장 최근에 수행되었던 문자열의 명령어를 수행한다.
        예) !al => alias 명령을 수행
   3) 관련파일
     .bash_history : 이 파일에서 개인사용자들이 입력했던 쉘명령어들이 저장된다. .으로
                   시작되어서 숨겨진 파일형태로 존재하고 개인홈디렉토리에 위치한다. 또한 현재
                   로그인해서 내린 명령들은 로그아웃시에 기록되므로 다음 로그인시 .bash_histo
                   ry파일안에서 확인할 수 있다.

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

 

1. man(manual)
(1) 설명: 로컬시스템상에서 여러 참고 문서들을 이용하여 특정 명령이나 자원들의 메뉴얼을 출력하
          는 명령이다. 전통적으로 유닉스에서는 총 8권으로 구성되어 있으나 현재 리눅스에서는 총
          9권의 메뉴얼로 구성되어 있다. 추가로 설치한 프로그램이나 명령어들에 대해서도 man 페
          이지에 추가할 수 있다.
(2) 기본 메뉴얼: Section에 해당한다.
   1) man1 - Shell Utilities and User commands
       => 사용자 명령(쉘 명령)이 들어있다.
   2) man2 - Systems Calls
       => 리눅스 프로그래밍을 위한 시스템 호출과 관련된 내용이 들어있다.
   3) man3 - library functions
       => 리눅스 라이브러리 함수와 관련된 내용이 들어있다.
   4) man4 - Devices and Devices Drivers
       => 관련 장치나 장치 드라이버, 특수파일(FIFO, 소켓 등)에 대한 내용이 들어있다.
   5) man5 - Files Formats
       => /etc/passwd 나 /etc/inittab 파일 등의 형식을 알려준다.
   6) man6 - Games
       => 게임과 관련된 정보가 들어있다.
   7) man7 - Linux system files ans conventions
       => 리눅스 시스템 파일 관련 표준, 규칙, 프로토콜, 문자셋, 시그널 목록등에 대한 정보가
         들어 있다.
   8) man8 - System Administrative utility definitions
       => 시스템 관리와 관련된 유틸리티에 관한 정보가 들어 있다.
   9) man9 - Linux kernel routines
       => 리눅스에만 있는 메뉴얼 섹션으로 커널 프로그래밍과 관련된 정보를 담고 있다.
(3) 사용법
   man [options] [section] command
   man [options] [section] 파일명
    => man 명령을 실행하면 less 명령형태의 페이지 단위로 보여준다.
      (간단한 사용법)
        [SPACE] : 한 페이지 밑으로 내려간다.
        [ENTER] : 한 줄 밑으로 내려간다.
        [b]: 전 페이지로 올라간다.
        [q]: man 명령을 종료한다.
(4) options
   -k 키워드 : 해당 '키워드'가 발견되는 모든 메뉴얼의 내용을 검색하여 보여준다.
   -f 키워드 : 해당 '키워드'에 대한 간략한 개요와 정보를 보여준다.
   -w 키워드 : '메뉴얼페이지' 파일의 위치를 보여준다.
(5) 사용예
   1) [posein@www posein]$ man ls
       => ls 명령어의 메뉴얼 페이지를 보여준다. 기본적으로 Section값을 지정하지 않으면 첫번째
         섹션의 페이지를 보여준다.
   2) [posein@www posein]$ man man
       => man 명령어의 메뉴얼 페이지를 보여준다.
   3) [posein@www posein]$ man -k passwd
      SSL_CTX_set_default_passwd_cb (3ssl)  - set passwd callback for encrypted PEM file handling
      SSL_CTX_set_default_passwd_cb_userdata [SSL_CTX_set_default_passwd_cb] (3ssl)  - set passwd callbacg
      afppasswd            (1)  - netatalk password maintenance utility
      chpasswd             (8)  - update password file in batch
      ckpasswd             (1)  - nnrpd password authenticator
      gpasswd              (1)  - administer the /etc/group file
      hesiod_free_passwd [hesiod_getpwnam] (3)  - Hesiod functions for retrieving passwd information
      hesiod_getpwnam      (3)  - Hesiod functions for retrieving passwd information
      hesiod_getpwuid [hesiod_getpwnam] (3)  - Hesiod functions for retrieving passwd information
      kpasswd              (1)  - change a user's Kerberos password
      ldappasswd           (1)  - change the password of an LDAP entry
      lppasswd             (1)  - add, change, or delete digest passwords
      mkpasswd             (1)  - generate new password, optionally apply it to a user
      nwpasswd             (1)  - Change a user's password
      pam_localuser        (8)  - require users to be listed in /etc/passwd
      passwd               (1)  - update a user's authentication tokens(s)
      passwd               (5)  - password file
        --이하 생략--
        => passwd라는 키워드가 포함된 메뉴얼 페이지를 찾아준다. 'apropos passwd' 명령과 같다.
   4) [posein@www posein]$ man -f mkdir
      mkdir                (1)  - make directories
      mkdir                (2)  - create a directory
       => mkdir의 간략한 개요와 정보를 보여준다. 현재 mkdir은 첫번째 섹션인 명령어부분과 두번
         째 섹션인 시스템콜부분에 메뉴얼페이지가 존재한다. 'whatis mkdir'와 같다.
   5) [posein@www posein]$ man 1 mkdir
       => 첫번째 섹션에 속하는 명령어로써의 메뉴얼페이지를 보여준다. 현재 이 명령은 섹션을 생
         략하고 man mkdir 한것과 같다. man은 첫번째 섹션부터 검색하여 가장 먼저 검색되는 메뉴
         얼 페이지를 보여준다.
   6) [posein@www posein]$ man 2 mkdir
       => 두번째 섹션에 속하는 시스템콜로서의 메뉴얼페이지를 보여준다.
   7) [posein@www posein]$ man -w mkdir
      /usr/share/man/man1/mkdir.1.gz
       => mkdir의 '메뉴얼페이지'파일의 경로를 보여준다.
(6) man명령의 메뉴얼 페이지 내용
   1) 이름(NAME) : 파일이나 명령어의 이름과 내용을 요약해서 보여준다.
   2) 개요(SYNOPSYS) : 사용법을 말한다.
   3) 설명(DESCRIPTION) : 자세한 설명을 보여준다.
   4) 옵션(OPTIONS) : 옵션 목록을 보여준다.
   5) 파일(FILES) : 관련된 파일 목록을 보여준다.
   6) 관련메뉴얼(SEE ALSO) : 관련된 메뉴얼페이지를 보여준다.
   7) 버그(BUGS)
   8) 저자(AUTHOR)
(7) 관련명령어
   1) manpath
    ㄱ. 설명: man 명령이 참조하는 메뉴얼페이지의 경로를 보여준다.
    ㄴ. 사용법
        manpath
    ㄷ. 사용예
       [posein@www posein]$ manpath
       /usr/kerberos/man:/usr/local/man:/usr/share/man:/usr/X11R6/man
(8) 참고
   1) 설명: 추가로 설치한 응용프로그램을 man페이지에 추가하기
   2) 사용법
     보통 소스로 응용프로그램을 설치하면 설치된 디렉토리에 man이라는 디렉토리가 생성된다. 이
    디렉토리에 man용 메뉴얼 페이지의 내용이 들어있다. 이 man이라는 디렉토리에 있는 내용을 man
    명령이 참조하는 디렉토리인 /usr/local/man(이 디렉토리가 추가로 설치한 응용프로그램들의 메
    뉴얼 페이지가 위치하는 디렉토리이다. 8.0버전인 경우에는 /usr/share/man디렉토리가 메뉴얼 페
    지 디렉토리이다.안의 맞는 Section 디렉토리에 넣어주면 된다.
   3) 사용예
    ㄱ. squid를 소스로 /usr/local/squid라는 디렉토리에 설치하면 이 디렉토리안에 man이라는 디
       렉토리가 있다. 이 디렉토리안에 man8이라는 디렉토리가 있고 그 안에 squid.8이라는 파일을
       확인한다.
    ㄴ. squid.8이라는 파일을 /usr/local/man/man8 디렉토리안에 복사한다.
    ㄷ. man squid 라고 치면 메뉴얼페이지를 확인할 수 있다.

2. whatis
(1) 설명: man page의 이름과 개요를 보여주는 명령어이다. 'man -f' 와 같다.
(2) 사용법
    whatis 키워드
(3) 사용예
   [posein@www posein]$ whatis mkdir
   mkdir                (1)  - make directories
   mkdir                (2)  - create a directory

3. apropos
(1) 설명: 메뉴얼페이지에서 해당키워드가 있는 메뉴얼페이지를 찾아준다. 'man -k' 와 같다.
(2) 사용법
    apropos 키워드
(3) 사용예
    [posein@www posein]$ apropos lilo
    grubby               (8)  - command line tool for configuring grub, lilo, and elilo
    lilo                 (8)  - install boot loader
    lilo.conf [lilo]     (5)  - configuration file for lilo

4. makewhatis
(1) 설명: 새로운 메뉴얼페이지 추가시 관련 데이터 갱신시켜주는 명령어이다.
(2) 사용법
   makewhatis

5. info
(1) 설명: man 명령처럼 특정한 명령어에 대한 메뉴얼 페이지를 보여주는 명령어이다. 제공되지
          않는 명령어가 있다.
(2) 사용법
   info 명령어
(3) 사용예
   info ls
    => (간단한 사용법)
        [n] : 다음 페이지를 보여준다.
        [p] : 이전 페이지를 보여준다.
        [q] : 종료한다.
(참고) 리눅스도움말
(1) 개요: 리눅스에서 제공하는 로컬시스템상의 도움말에는 전통적인 man이외에 자유소프트웨어재단
          (FSF)에서 후원하는 GNU 형식의 info, --help 등이 있다.
(2) 종류
   1) man
    ㄱ. 설명: 유닉스시절부터 사용하던 전통적인 방법이다. 명령어뿐만아니라 환경설정파일등에
             대해서도 메뉴얼페이지를 제공한다. 제공되는 양이 방대하고 자세하다.
    ㄴ. 사용예
       man ls
   2) info
    ㄱ. 설명: man 에 비해 간략하고 제공되는 파일의 양도 그리 많지 않다. GNU에서 후원한다.
    ㄴ. 사용예
       info ls
   3) --help
    ㄱ. 설명: 명령어 사용에 대한 간단한 설명, 옵션을 볼 수 있다.
    ㄴ. 사용예
       ls --help

6. 인터넷에서 리눅스 도움 문서 찾기
(1) LDP(Linux Documentation Project)
    리눅스 문서화 프로젝트는 리눅스에 대한 체계화된 문서를 만들기 위해 구성된 조직으로 일정한
   문서형태를 갖추고 있다. 공식사이트는 http://www.linuxdoc.org이다. 우리나라에는
   http://www.kldp.org 라는 리눅스 한글 문서 프로젝트라는 사이트가 있다.
(2) 유즈넷 뉴스그룹(Usenet Newsgroups)
   1) 설명: 리눅스에 대한 질문과 답을 보고 토론을 할 수 있는 게시판이다. 뉴스그룹을 이용하려
           면 google.com 사이트의 뉴스서비스를 이용하면 된다.
   2) 유용한 뉴스그룹
     comp.os.linux : 리눅스에 대한 일반토론
     comp.os.linux.answers : 리눅스에 대한 질문과 답변들
     han.comp.os.linux : 한글 리눅스에 대한 토론
(3) 메일링리스트(Mailing List) : 리눅스 배포판업체, 관리자들이나 사용자의 모임의 메일링리스트
                                를 통해 질문과 답변, 리눅스관련 정보를 얻을 수 있다.

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

 

1. 프로세스 관련 고급 명령어
(1) pidof
   1) 설명: 실행중인 특정 프로그램의 프로세스 ID를 출력해준다.
   2) 사용법
     pidof 프로그램명
   3) 사용예
     [root@www root]# pidof httpd
     1494 1491 1318 1315 1047 1046 1045 1044 1043 1026
      => httpd 프로세스의 PID를 나열해 준다.
(2) vmstat
   1) 설명: 프로세스, 메모리, 페이징 ,블럭장치의 I/O, CPU의 활동상태등을 보여주는 명령이다.
   2) 사용법
     vmstat [options]
   3) options
     -n : delay시간 및 count를 지정할 수 있다.
     -V : 버전을 보여준다.
   4) 사용예
    ㄱ. [root@www root]# vmstat
           procs                      memory    swap          io     system         cpu
         r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy  id
         0  0  0  27168  90772  16940 374468   0   2   520    40  562    81   3   1  96
          => (설명)
            a. procs
              - r : 실행시간을 위해 기다리고 있는 프로세스의 수
              - b : 계속 잠들어 있는 프로세스의 수
              - w : swapped out 되었거나 실행가능한 프로세스의 수
            b. memory
              - swpd : 가상메모리로 사용되고 있는 양(KB)
              - free : 쉬고 있는 메모리의 양(KB)
              - buff : buffer에서 사용하고 있는 메모리양(KB)
              - cache : cache로 사용하고 있는 메모리양(KB)
            c. swap
              - si : 디스크에 swapped in된 양(KB)
              - so : 디스크에서 swapped out된 양(KB)
            d. io
              - bi : 블록 디바이스에 보낸 블록수 (blocks/s)
              - bo : 블록 디바이스로 부터 받은 블록수 (blocks/s)
            e. system
              - in : 초당 발생한 interrupts의 수
              - cs : 초당 발생한 context switches(문맥 교환)의 수
            f. cpu : us, sy, id를 총 100 퍼센트로 보고 각각의 퍼센트로 보여준다.
              - us : 사용자에 의해 사용된 시간
              - sy : 시스템에 의해 사용된 시간
              - id : idle 시간
    ㄴ. [root@www root]# vmstat -n 3 10
          => 3초 간격으로 10개의 결과를 출력한다.
(3) uptime
   1) 설명: 현재 로그인한 후의 총 시간과 시스템 사용 현황을 보여준다.
   2) 사용법
     uptime
   3) 사용예
     [root@www root]# uptime
     12:10am  up  4:16,  2 users,  load average: 0.16, 0.08, 0.02
      => 현재시간, 로그인된 시간, 사용자수, load average를 보여준다. load average는 지난 1분,
        5분, 15분에 대한 평균이다.
(4) iostat
   1) 설명: CPU의 상태와 I/O 장치의 상태를 보여주는 명령이다.
   2) 사용법
     iostat [option]
   3) option
      간격 개수: 앞의 간격(초단위)로 개수만큼 화면에 보여준다.
      -k : kilobytes단위로 보여준다.
      -c : CPU상태만 보여준다.
      -d : 디바이스상태만 보여준다.
      -x : 파티션 단위로 상태를 보여준다.
   4) 사용예
    ㄱ. [root@www root]# iostat
        Linux 2.4.18-14 (www)   2003년 02월 02일

        avg-cpu:  %user   %nice    %sys   %idle
                   0.41    0.00    0.15   99.43

        Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
        dev3-0            2.42        48.32        23.84   21530882   10620936
         => (설명)
           1. avg-cpu: CPU의 상태를 나타낸다.
             1) %user : 사용자레벨에서 사용한 양을 퍼센트단위로 보여준다.
             2) %nice : 사용자레벨에서 nice 순위와 관련하여 사용한 양을 퍼센트단위로 보여준다.
             3) %sys : 시스템레벨(커널)에서 사용한 양을 퍼센트단위로 보여준다.
             4) %idle : CPU가 대기한 상태를 퍼센트로 보여준다.
           2. Device: 입출력장치의 상태를 나타낸다.
             1) %tps : 디바이스에서 초당 전송하는 갯수를 나타낸다.
             2) Blk_read/s : 초당 읽어들이는 블록의 갯수이다.
             3) Blk_wrtn/s : 초당 쓰여지는 블록의 갯수이다.
             4) Blk_read : 블록이 읽혀진 총 갯수이다.
             5) Blk_wrtn : 블록이 쓰여진 총 갯수이다.
    ㄴ. [root@www root]# iostat 1 5
         => 1초 간격으로 5번 화면에 보여준다.
    ㄷ. [root@www root]# iostat -k
         => kilobytes단위로 보여준다.
   5) 참고
     시스템 상태를 보여주는 명령인 iostat와 sar는 sysstat라는 패키지에 의해 설치된다. 두 명령
    의 결과값 형태가 유사하다.
(5) sar
   1) 설명: 시스템의 활동에 관한 정보를 수집하고 보여주고 저장하는 명령이다. 이 명령은 OS에서
           일어나는 활동상태를 누적시켜 표준출력으로 기록한다.
   2) 사용법
     sar [option] 간격 횟수
   3) option
     -o 파일명: 출력값을 주어진 파일명으로 binary로 저장한다.
     -f 파일명: binary로 저장된 값을 불러온다.
     -A : 모든 정보를 출력한다.
     -b : I/O관련 전송율 상태 정보를 출력한다.
     -B : 페이징 통계 정보를 출력한다.
     -c : 새롭게 생성되어 활동하는 프로세스의 정보를 보여준다.
     -e hh:mm:dd : -f 또는 -o 옵션과 같이 사용되는 옵션으로 리포트의 종료시간을 지정한다.
     -n DEV | EDEV | SOCK | FULL : 네트워크 상태정보를 보여준다.
     -r : 메모리와 스왑 공간의 상태를 보여준다.
     -s hh:mm:dd : -f과 같이 사용되는 옵션으로 불러온 파일의 시간을 지정한다.
     -u : cpu의 정보를 보여준다.
     -v : 커널 테이블과 파일에서의 inode상태를 보여준다.
     -w : 시스템의 switching 활동 상태를 보여준다.
     -W : 시스템의 swapping 상태를 보여준다.
   4) 사용예
    ㄱ. [root@www root]# sar
         => CPU의 최근 상태를 보여준다.
    ㄴ. [root@www root]# sar 0
         => 시스템이 시작 된 후 평균 상태를 보여준다.
    ㄷ. [root@www root]# sar 1 5
         => 1초간격으로 5회 보여준다.
    ㄹ. [root@www root]# sar 1 10 -o system
         => 1초간격으로 10회동안의 출력을 system파일로 저장한다.
    ㅁ. [root@www root]# sar -f system
         => system이라는 파일에 저장된 값을 화면에 보여준다.
    ㅂ. [root@www root]# sar -b
         => I/O 전송율관련 정보를 보여준다.
           (설명) 출력정보
                 tps : 물리적디스크에서 초당 전송하는 갯수
                 rtps : 물리적 디스크에서 요청한 초당 읽기 횟수
                 wtps : 물리적 디스크에서 요청한 초당 쓰기 횟수
                 bread/s : 블록에서 초당 읽은 데이타의 총 횟수
                 bwrtn/s : 블록에서 초당 쓰여진 데이타의 총 횟수
    ㅅ. [root@www root]# sar -c
         => proc/s 라는 단위로 초당 활동하는 프로세스의 수를 보여준다.
    ㅇ. [root@www root]# sar -e 12:00:00 -f
         => 오늘 기록된 파일(예 /var/log/sa/sa01)에서 12시까지의 기록만을 보여준다.
    ㅈ. [root@www root]# sar -n FULL
         => 네트워크의 모든 상태정보를 보여준다.
           1. DEV : 네트워크 장치로부터의 결과를 보여준다.
             1) IFACE : 네트워크 인터페이스의 이름
             2) rxpck/s : 초당 받은 패킷수
             3) txpck/s : 초당 전송한 패킷수
             4) rxbyt/s : 초당 받은 바이트수
             5) txbyt/s : 초당 전송한 바이트수
             6) rxcmp/s : 초당 압축한 패킷을 받은 수
             7) txcmp/s : 초당 압축한 패킷을 전송한 수
             8) rxmcst/s : 초당 받은 멀티캐스트 패킷 수
           2. EDEV : 네트워크 장치로부터 에러이거나 실패한 상태정보를 보여준다.
             1) IFACE : 네트워크 인터페이스의 이름
             2) rxerr/s : 초당 받은 불량 패킷의 수
             3) txerr/s : 전송중에 초당 발생한 에러 패킷의 수
             4) coll/s : 전송중에 초당 발생한 충돌 패킷의 수
             5) rxdrop/s : 리눅스 버퍼 공간의 부족으로 패킷을 받는 도중에 초당 drop된 패킷 수
             6) txdrop/s : 리눅스 버퍼 공간의 부족으로 패킷을 전송중에 초당 drop된 패킷의 수
             7) txcarr/s : 전송중에 초당 발생한 carrier-error수
             8) rxfram/s : 패킷을 받는중에 발생한 초당 frame alignment 수
             9) rxfifo/s : 패킷을 받는 중에 발생한 초당 FIFO overrun 수
            10) txfifo/s : 패킷을 전송중에 발생한 초당 FIFO overrun 수
          3. SOCK : 소켓 상태에 대한 정보를 보여준다.
            1) totsck : 사용된 총 소켓수
            2) tcpsck : 현재 사용중인 TCP 소켓수
            3) udpsck : 현재 사용중인  UDP 소켓수
            4) rawsck : 현재 사용중인 RAW 소켓수
            5) ip-frag :현재 사용중인 IP fragments 수
          4. FULL : 모든 내용(DEV, EDEV, SOCK)의 결과를 보여준다.
    ㅊ. [root@www root]# sar -r
         => 메모리와 스왑의 상태정보를 보여준다.
           - kbmemfree : 사용가능한 메모리의 양(kilobytes)
           - kbmemused : 사용중인 메모리의 양, 커널에서 사용중인 메모리는 제외(kilobytes)
           - %memused : 사용된 메모리의 퍼센트
           - kbmemshrd : 시스템에서 공유메모리로 사용된 메모리양, 리눅스 2.4커널에서는 항상
                        0이다.(kilobytes)
           - kbbuffers : 커널에서 버퍼로 사용한 메모리양(kilobytes)
           - kbcached : 커널에서 캐쉬로 사용한 메모리양(kilobytes)
           - kbswpfree : 스왑으로 사용가능한 공간(kilobytes)
           - kbswpused : 스왑으로 사용중인 공간 (kilobytes)
           - %swpused : 사용된 스왑의 퍼센트
    ㅋ. [root@www root]# sar -v
         => inode의 상태를 보여준다.
           - dentunusd : 디렉토리 캐쉬에서 사용되지 않는 캐쉬 entries
           - file-sz : file handles의 사용량
           - %file-sz : 리눅스 커널에서 할당할 수 있는 최대 파일 핸들 수에 대한 퍼센트
           - inode-sz : inode handlers의 사용량
           - super-sz : 커널에 의해 할당된 super block handlers의 수
           - %super-sz : 리눅스 커널에서 할당할 수 있는 최대 super block handlers의 퍼센트
           - dquot-sz : Disk Quota entries의 수
           - %dquot-sz : 캐쉬된 디스크 쿼타 엔트리의 최대 할당했을 때 사용할 수 있는 디스크
                        쿼타 엔트리의 수
           - rtsig-sz : RT 시그널의 대기된 수
           - %rtsig-sz : RT 시그널이 대기되었을 때 최대 대기가능한 RT 시그널의 퍼센트
    ㅌ. [root@www root]# sar -w
         => cswch/s 라는 단위로 초당 context switching 수를 보여준다.
    ㅍ. [root@www root]# sar -W
         => 스와핑상태를 보여준다.
           - pswpin/s : 시스템에서 swap in한 스왑페이지의 수
           - pswout/s : 시스템에서 swpa out한 스왑페이지의 수
   5) 참고
     이 명령은 cron데몬과 /etc/cron.d/sysstat라는 스크립트에 의해 시스템상에 /var/log/sa라는
    디렉토리밑에 'sadd'라는 이름으로 저장된다. dd는 해당 날짜를 의미한다.
(6) procinfo
   1) 설명: /proc 디렉토리의 내용을 화면에 보여준다.
   2) 사용법
     procinfo
   3) 사용예
     [root@www proc]# procinfo
     Linux 2.4.18-14 (bhcompile@stripples) (gcc 3.2 20020903 ) #1 Wed Sep 4 13:35:50 EDT 2002
     \ 1CPU [www]

     Memory:      Total        Used        Free      Shared     Buffers      Cached
     Mem:        513928      505492        8436           0       69308      392432
     Swap:       530104       45176      484928

     Bootup: Sat Feb  1 00:24:05 2003    Load average: 0.00 0.01 0.00 1/86 5959

     user  :       0:30:46.77   0.4%  page in : 10765771  disk 1:   544329r  537511w
     nice  :       0:00:06.80   0.0%  page out:  5327184
     system:       0:11:31.77   0.2%  swap in :      697
     idle  :   5d  3:30:07.98  99.4%  swap out:    11428
     uptime:   5d  4:12:33.00         context : 89723912

     irq  0: 228942504 timer                 irq  7:         2
     irq  1:       868 keyboard              irq  8:         1 rtc
     irq  2:         0 cascade [4]           irq 11:       356 usb-uhci, usb-uhci,
     irq  3:         2                       irq 12:      4247 PS/2 Mouse
     irq  4:         2                       irq 14:   1043283 ide0
     irq  5:   2996177 eth0                  irq 15:   3425753 ide1
     irq  6:         5
(7) fuser
   1) 설명: 사용중인 프로세스의 소유자를 보여주거나 신호를 보낸다.
   2) 사용법
     fuser option [디렉토리명]
   3) option
     -V: fuser 명령의 버전을 보여준다.
     -l: fuser 명령에서 사용하는 시그널목록을 보여준다.
     -v: 프로세스를 PID, USER, ACCESS, COMMAND 등의 형식으로 보여준다.
     -k: KILL 시그널을 보낸다.
     -m: 특정파일, 마운트된 파일시스템, 블록장치 등에게 신호를 보낼 때 k옵션과 같이 쓰인다.
   4) 사용예
    ㄱ. [root@linux245 root]# fuser -v /backup

                             USER        PID ACCESS COMMAND
        /backup              posein      972 ..c..  bash
                             root     kernel mount  /backup
         => /backup 이라는 파티션의 프로세스를 보여준다.
           (참고) ACCESS 의 값
                 c: 현재 디렉토리이다.
                 e: 현재 실행파일을 실행중인 상태이다.
                 f: 파일을 연 상태이다.
                 r: root 디렉토리라는 뜻이다.
                 m: 라이브러리가 공유된 상태이다.
    ㄴ. [root@linux245 root]# fuser -km /backup
          => /backup에 kill신호를 보낸다.

2. /proc 파일 시스템
(1) 설명: /proc파일 시스템은 일반 파일 시스템과는 다른 특수한 파일 시스템으로 프로세스와 커널
          의 내부적인 정보를 제공하기 위한 목적으로 만들어진 파일시스템이다. 사용자가 ps명령어
          를 사용해 프로세스에 대한 정보를 확인할 때 이 파일 시스템에 포함되어 있는 프로세스
          의 정보가 출력되는 것이다. 보통 새로운 프로세스가 생성되면 자동으로 /proc디렉토리에
          해당 PID와 같은 서브 디렉토리가 생성되고, 그 안에 해당 프로세스에 관한 정보가 들어가
          게 된다.
(2) /proc 파일시스템의 구조
   1) 1 : PID 1번에 대한 정보가 있는 디렉토리이다. 다른 PID번호는 해당 프로세스에 대한 정보를
         갖고 있는 디렉토리이다.
   2) cpuinfo : 프로세스에 관한 정보가 들어 있다.
   3) devices : 현재 커널에 설정된 디바이스 드라이버들의 리스트가 들어 있다.
   4) dma : 시스템에 현재 사용중인 DMA(직접 메모리 액세스)의 리스트가 들어있다. 하드웨어 충돌
           시에 이 파일을 참고해야 한다.
   5) interrupts : 시스템에서 사용중인 인터럽트의 리스트가 들어 있다. 역시 하드웨어 충돌시에
                  참고해야 한다.
   6) filesystems : 현재 커널에 설정된 파일 시스템의 리스트가 들어있다.
   7) iomem : 메모리 번지별로 할당된 리스트를 볼 수 있다.
   8) ioports : 시스템에 현재 사용중인 I/O포트의 리스트가 들어있다. 하드웨어 충돌시에 참고해야
               한다.
   9) kcore : 시스템에 장착된 물리적 메모리의 이미지로 실제 하드디스크의 용량을 차지하는 것은
            아니다. 이 파일은 프로그램 실행시 비정상 종료나 프로그램의 디버깅시 유용하게 참고
            할 수 있는 파일이라고 할 수 있다. 시스템에 장착된 램의 크기만큼 형성된다.
   10) kmsg : 커널의 syslogd로 보내는 메시지가 들어 있는 파일이다.
   11) loadavg
    ㄱ. 설명: 일정 간격으로 갱신되는 시스템 로드 정보(평균 부하율)가 들어 있다.
    ㄴ. 예
       [root@www proc]# cat loadavg
       0.03 0.01 0.00 1/86 5989
        => 첫번째는 최근 1분 동안의 서버평균 부하율, 두번째는 최근 5분, 세번째는 최근 15분 동
          안의 서버 평균부하율을 나타낸다. uptime 명령시에도 나타난다.
   12) meminfo : 물리적 메모리와 스왑메모리에 대한 정보가 들어 있다.
   13) modules : 커널에 연결된 모듈에 대한 정보가 들어 있다. 모듈에 관련해 문제가 생겼을 때
                유용하게 참고할 수 있는 파일이다.
   14) mounts: 현재 마운트되어 있는 정보가 들어있다.
   15) pci : 현재 사용중인 PCI의 리스트가 들어 있다.
   16) stat : 커널의 사용 현황이 들어 있다. 이 파일을 참고하면 현재 커널의 상태를 직접 파악할
             수 있다.
   17) uptime : 시스템 가동시간에 대한 정보가 들어 있다. uptime명령어를 사용할 때 uptime명령어
               가 이 파일의 내용을 참고하여 출력하게 된다.
   18) partitions: 시스템에 설치된 하드디스크의 파티션 정보가 들어있다.
   19) version: 커널 버전의 정보를 기록하고 있는 파일이다. uname 명령보다 더 자세한 정보를
               기록하고 있다.
   20) mdstat: RAID 사용시에 RAID에 관한 정보를 기록하고 있다.
   21) /proc/ide 디렉토리 : IDE 컨트롤러 및 드라이브에 대한 정보를 기록하는 디렉토리이다.
   22) /proc/scsi 디렉토리 : SCSI 컨트롤러 및 드라이브에 대한 정보를 기록하는 디렉토리이다.
   23) /proc/sys/kernel 디렉토리
    ㄱ. 설명: 시스템에 관한 정보가 들어있는 디렉토리이다.
    ㄴ. 주요파일
      a. osrelease : 운영체제의 버전을 알 수 있다.
      b. ostype : 운영체제를 알 수 있다.
      c. version : 커널의 생성 날짜를 알려준다. uname -v 명령과 같은 내용이다.
      d. hostname : 호스트이름을 알 수 있다.
      e. sysrq : 매직키라는 특수키를 사용할 수 있는 지 여부를 알 수 있다. 기본값이 '0'이고
                매직키가 사용불가하다.

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

 

1. 프로세스(Process) 관리
(1) 개요 : 리눅스는 한번에 수백개이상의 프로그램을 동시 수행할 수 있다. 이러한 하나하나의
           프로그램을 프로세스라 부르며 내부적으로 번호가 붙어 관리된다. 프로세스는 크게 두
           가지로 나눌 수 있는데, 사용자의 입력에 관계없이 실행되는 background process와 입력
           후 수행종료까지 기다리는 foreground process가 있다.
(2) 프로세스의 종류
   1) 포그라운드(Foreground) 프로세스
    ㄱ. 설명: 일반적으로 쉘상태에서 명령을 내리면 해당 프로세스가 종료될 때까지 기다려야 한다.
             이러한 프로세스를 포그라운드 프로세스라 한다.
    ㄴ. 사용예
       [posein@www posein]$ find / -name '*.txt' 2>/dev/null > list.txt
        => 이 경우 find 결과가 list.txt라는 파일에 저장할 때까지 사용자는 다른 작업을 할 수
          없게 된다.
  2) 백그라운드(background) 프로세스
    ㄱ. 설명: 기존의 포그라운드 명령뒤에 '&'를 붙인다.
    ㄴ. 사용예
       [posein@www posein]$ find / -type d 2>/dev/null > list.txt &
       [1] 1742
         => 여기서 [1]은 작업번호(job number)이고, 1742는 PID(Process ID)이다.
(3) 작업수행의 전환
   1) background --> foreground : background로 수행될 때 'fg'라고 명령을 내리면 전환된다.
   2) foreground --> background : [CTRL] + [Z] (suspend 모드)를 눌러 작업을 일단 중지시킨뒤
                                 'bg' 라고 명령을 내린다.
       (참고) 인터럽트키
             [CTRL] +[C] : 작업취소
             [CTRL] +[D] : 작업 정상 종료
             [CTRL] +[Z] : 작업 대기
(4) 현재 작업중인 process의 확인 : 'jobs'라고 명령을 내리면 된다. + 기호로 표시된 작업이 먼저
                                   실행되는 job이고 -기호가 그다음이다.
(5) process를 중지시키기 : kill명령을 이용하여 중지, 종료 등을 할 수 있다.
   1) 사용법
     kill %job_number
   2) 사용예
     ㄱ. 작업의 중지
        kill %1
         => job번호가 1인 작업을 중지 시킨다.
     ㄴ. 작업의 강제종료시키기
        kill -9 %1 => job번호가 1인 작업을 강제 종료시킨다.
     (참고) kill 명령은 job번호와 PID(process ID)모두 사용가능하다. job번호는 앞에 %를 붙여서
           구분하고 PID인 경우에는 그냥 번호만 쓴다.

2. 관련명령어
(1) ps(process status)
   1) 설명: 현재 프로세스들의 상태를 PID(Process ID)와 함께 보여준다. 리눅스에서는 사용자와
           파일 뿐만아니라 프로세스도 번호로 관리한다.
   2) 사용법
     ps [option(s)]
   3) option
     -a : 다른 사용자에 의해서 생성된 프로세스들도 보여준다. (u,x옵션과 연계해서 사용한다.)
     -u : 프로세스의 소유자에 대한 정보 등 매우 자세하게 보여준다.
     -l : 프로세스의 정보를 옆으로 길게 보여준다. (우선순위값과 관련된 PRI와 NI값을 확인할 수
         있다.
     -x : daemon process등 터미널의 컨트롤과 관련이 없는 프로세스도 보여준다. 일반적으로 말하
         는 데몬프로세스도 보여준다. 보통 ps명령을 실행하면 현재 Shell의 자식 프로세스들만
         보여주는데, 이 옵션으로 다른 프로세스들도 볼 수가 있다. (BSD계열)
          System V계열인 경우에는 -x대신에 -e를 사용할 수 있고, -u 대신에 -uf옵션을 사용할 수
         있다.
     -e : 해당 프로세스에 관련된 환경변수 정보를 함께 출력한다.
     -f : 프로세스 간의 상속관계를 보여준다.(PID, PPID값이 표시된다.)
     (참고2) daemon process
    daemon process란 daemon(악마)처럼 앞에 나타나지 않고 사용자가 모르게 뒤에서 시스템의 관리
    를 위해 움직이는 프로세스를 말한다. 보통 시스템이 부팅이 될 때 자동적으로 실행이 된다.
    ftpd, inetd, lpd, nfsd 등이 있다.
   4) 사용예
     ㄱ. [posein@www posein]$ ps
         PID TTY          TIME CMD
         23563 pts/0    00:00:00 bash
         23594 pts/0    00:00:00 ps
     ㄴ. ps -au
          => 현재 시스템상의 process들 중 터미널과 관련이 있는 모든 process들을 소유자 정보와
            함께 보여준다.
     ㄷ. [posein@www posein]$ ps -aux |more
         USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
         root         1  0.0  0.1  1368  548 ?        S    May02   0:04 init [3]
         root         2  0.0  0.0     0    0 ?        SW   May02   0:00 [keventd]
          => 현재 시스템상에서 움직이고 있는 모든 process들을 소유자의 정보와 함께 보여준다.
     ㄹ. [posein@www posein]$ ps -ef |more
         UID        PID  PPID  C STIME TTY          TIME CMD
         root         1     0  0 May02 ?        00:00:04 init [3]
         root         2     1  0 May02 ?        00:00:00 [keventd]
          => sysV 계열에 사용하는 옵션형태로 내용은 위와 비슷하다. 참고로 ps옵션에서 BSB계열
            의 -aux와 SYSTEM V계열의 -ef옵션은 거의 유사하다. 리눅스에서는 현재 이 두계열의
            옵션 모두 지원한다.
     ㅁ. [posein@www posein]$ ps -aux |grep sendmail
         root       743  0.0  0.4  5580 2208 ?        S    May09   0:04 sendmail: accepti
         smmsp      753  0.0  0.3  4852 1900 ?        S    May09   0:00 sendmail: Queue r
          => 현재 시스템상의 프로세스중 sendmail의 프로세스를 보여준다.
     ㅂ. [posein@www posein]$ ps -aux |grep posein
         root     27264  0.0  0.2  2216 1152 ?        S    21:39   0:00 login -- posein
         posein   27265  0.0  0.2  5496 1432 pts/0    S    21:39   0:00 -bash
         posein   27398  0.0  0.1  2700  732 pts/0    R    21:50   0:00 ps -aux
          => 현재 시스템상의 프로세스중 posein 이라는 사용자의 프로세스를 보여준다.
   5) ps상태보기
     USER : BSD 계열에서 나타나는 항목으로 프로세스 소유자의 USERNAME
     UID : SYSTEM V계열에서 나타나는 항목으로 포로세스 소유자의 USERNAME
     PID : 프로세스의 식별번호
     %CPU : CPU사용비율의 추정치(BSD)
     %MEM : 메모리 사용비율의 추정치(BSD)
     VSZ : K단위 또는 페이지 단위의 가상메모리 사용량
     RSS : 실제 메모리 사용량. Resident Set Size
     TTY : 프로세스와 연결된 터미널
     STAT : 현재 프로세스의 상태
      - 값
        R : 실행 중 혹은 실행될 수 있는 상태
        S : sleep상태 (보통 20초이상된 상태)
        I : idle(비활동상태 : BSD, 중간적상태 : sysV) (보통 20초이하의 대기상태)
        T : 정지된 상태(suspend)
        Z : 좀비(zombie)프로세스
        D : 디스크 관련 대기상태(BSD)
        P : 페이지 관련 대기상태(BSD)
        X : 메모리 확보를 위한 대기 상태(sysV)
        K : 사용가능한 커널 프로세스(AIX)
        W : 스왑 OUT된 상태
        N : nice되어진 상태
        > : 우선순위가 인위적으로 높아진 상태
     START : 프로세스 시작 시간 또는 날짜
     TIME : 총 CPU사용시간
     COMMAND : 프로세스의 실행 명령행
     STIME(sysV) : 프로세스가 시작된 시간 혹은 날짜
     C(sysV), CP(BSD) : 짧은 기간 동안의 CPU사용률
     F : 프로세스의 플래그들
     PPID : 부모 프로세스의 PID
     PRI : 실제 실행 우선 순위
     NI : nice 우선순위 번호
     WCHAN : 프로세스를 기다리고 있는 이벤트
     PLAGS : 프로세스와 관련된 숫자 값

(2) kill
   1) 설명: 프로세스에 특정한 signal을 보내는 명령이다. 보통 실행중인 프로세스에 종료 신호를
           보낸다. 보통 중지시킬 수 없는 프로세스를 종료시킬때 많이 사용한다.
   2) 사용법
     kill [option] [-시그널번호 or -시그널이름] PID
      => kill 명령 뒤에 어떤 프로세스의 PID(Process ID)를 적어주면 그 프로세스에 종료시그널을
        보내게 된다. 보통의 경우 종료시킬 수 있으며, 만약에 종료되지 않으면 9를 signal_number
        에 써 줌으로써 강제로 종료시킬 수 있다.
     kill [option] [-시그널번호 or -시그널이름] %작업번호
   3) option
     -l : 시그널의 종류를 나열한다. 시그널의 종류는 시그널 번호순서대로 나열한다.
   4) signal_number와 이름
     1 SIGHUP(HUP) : hang up의 약자로 프로세스를 재시작시키는 시그널이다.
     2 SIGINT(INT) : 인터럽트. 실행을 중지시킨다. [CTRL] + [C] 를 눌렀을 때 보내지는 시그널
                    이다.
     3 QUIT : 실행중지.
     9 SIGKILL(KILL) : 무조건 종료, 즉 강제 종료시키는 시그널이다.
     15 SIGTERM(TERM) : Terminate의 약자로 가능한 정상 종료시키는 시그널로 kill 명령의 기본
                       시그널이다.
     18 CONT : Continue. STOP등에 의해 정지된 프로세스를 다시 실행시킨다.
     19 STOP : 무조건적, 즉각적 정지
     20 TSTP : 실행 정지후 다시 실행을 계속하기 위하여 대기시키는 시그널이다. [CTRL] +[Z] 를
              눌렀을 때 보내지는 시그널이다.

   5) 참고
     kill -l 이라고 써주면 signal_number에 보내줄 수 있는 시그널의 종류들을 보여주며, signal_
    number에 숫자 대신에 직접 이름을 써 주어도 된다. man 을 참조하려면 man 7 signal 하면 된다.
   6) 사용예
     ㄱ. kill -l
          => 시그널의 종류를 나열한다.
     ㄴ. kill 724
          => 724번 프로세스에 디폴트시그널인 15번 시그널을 보낸다.
            같은 명령으로 'kill -15 724', 'kill -TERM 724'등이 있다.
     ㄷ. kill -9 756 757 758
          => pid가 756, 757,758인 프로세스를 중단한다. 'kill -KILL PID', 'kill -SIGKILL PID'
            라고 명령내려도 된다.
     ㄹ. kill -HUP 10118
          => pid가 10118인 프로세스를 재시작한다. 'kill -1 10118'과 같다.
     ㅁ. kill %2
          => 작업번호가 2인 프로세스를 종료시킨다.
   7) 프로세스 종료시 유의점
     프로세스를 종료시에는 [CTRL] +[C]나 기본시그널인 TERM 시그널(-15)로 정상적으로 종료를
    시도하는 것이 좋다. 그래도 프로세스가 종료가 안되면 KILL 시그널(-9)을 사용하면 된다.

(3) killall
   1) 설명: 같은 데몬의 여러 프로세스를 한번에 죽이는 경우에 사용한다. Killall은 프로세스이름
           으로 프로세스를 종료시킨다.
   2) 사용법
     killall [option] 프로세스명
   3) option
     -HUP : 재시작한다.
   4) 사용예
     ㄱ. killall httpd
          => Apache 웹서버 데몬을 모두 종료한다.
     ㄴ. killall mysqld
          => mysql 데몬을 모두 종료한다.
     ㄷ. killall -HUP xinetd
          => xinetd 데몬을 다시 실행시킨다.

(4) pstree
   1) 설명 : 프로세스들을 계층적인 트리구조 형태로 출력해준다.
   2) 사용법
     pstree [option]
   3) option
     -a : 각 프로세스의 명령행 인자까지 보여준다.
     -h : 현재 프로세스와 그것의 조상 프로세스를 하이라이트로 강조해서 보여준다.
     -n : PID 값으로 정렬해서 보여준다. 기본값은 이름으로 출력한다.
     -p : PID 값을 같이 보여준다.
   4) 사용예
     [posein@www posein]$ pstree
     init-+-apmd
          |-atd
          |-automount
          |-bdflush
          |-crond---crond---run-parts---awk
          |-eth0
          |-eth1
          |-gpm
          |-httpd---10*[httpd]
      => (결과설명)
        최초로 실행되는 프로세스인 init가 왼쪽 상단에 나타나며 자식 프로세스는 오른쪽에 위치
       한다. 또한 프로세스앞에 n*은 실행되고 있는 프로세스의 갯수이다.

(5) top
   1) 설명: 현재시스템의 프로세스 상태를 연속적으로 화면에 보여준다.
   2) 사용법
     top [option]
   3) option
     -d 갱신시간 : 화면 갱신시간을 설정
     -q : 화면을 계속 갱신한다.
     -i : idle상태와 zombie 프로세스를 무시한다.
   4) 사용예
     [root@www root]# top
       1:17am  up 1 day, 13:06,  3 users,  load average: 0.00, 0.00, 0.00
     68 processes: 66 sleeping, 2 running, 0 zombie, 0 stopped
     CPU states:  0.0% user,  0.0% system,  0.0% nice, 100.0% idle
     Mem:   513064K av,  363976K used,  149088K free,       0K shrd,  161724K buff
     Swap:  265032K av,       0K used,  265032K free                   49916K cached

       PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
         1 root       8   0   544  544   472 S     0.0  0.1   0:04 init
         2 root       8   0     0    0     0 SW    0.0  0.0   0:00 keventd
         3 root       9   0     0    0     0 SW    0.0  0.0   0:00 kapm-idled
         4 root       9   0     0    0     0 SW    0.0  0.0   0:00 kswapd
         5 root       9   0     0    0     0 SW    0.0  0.0   0:00 kreclaimd
   5) top 항목설명
     PID : Process ID
     PPID : Parent Process ID
     UID : 소유자의 User ID
     USER : 소유자
     PRI : Priority(우선순위)
     NI : Nice Value ( -20 ~ 19 사이의 값으로 작을 수록 우선순위가 높아짐)
     SIZE : 프로세스의 코드와 데이터의 크기(KB단위)
     TSIZE : 프로세스의 코드 사이즈
     DSIZE : 프로세스의 데이터 사이즈
     SWAP : 프로세스가 swap한 메모리양
     RSS : 프로세스가 사용하는 실제 메모리양
     SHARE : 프로세스가 사용하는 공유 메모리의 양'
     STAT : 현재 프로세스의 상태를 나타낸다.
     LIB : 라이브러리 페이지의 크기
     %CPU : CPU 사용 시간 퍼센트
     %MEM : 메모리 사용 퍼센트
     TIME : 프로세스가 시작하여 사용한 총 CPU 시간
     COMMAND : 프로세스를 실행한 명령어 라인
   6) top 실행 중의 명령어 옵션
     SPACE : 화면을 갱신한다.
     h, ? : 도움말을 출력한다.
     k : kill명령을 내린다. PID값을 입력하면 종료신호를 보낸다.
     i : Zombi, idle 프로세스의 출력을 on/off한다.
     n 또는 # : 출력한 프로세스의 수를 지정한다.
     q : top을 종료
     r : Nice 값을 변경
     s : 화면을 갱신하는 시간을 변경
     F,f : 보여줄 항목을 추가하거나 삭제
     O,o : 보여줄 항목의 순서를 바꿈
     l : top의 맨 윗줄(uptime)을 on/off한다.
     m : 메모리의 관련된 항목을 on/off한다.
     t : 프로세스와 CPU항목을 on/off한다.
     c : Command line의 옵션을 on/off한다.
     M : 프로세스의 RSS값을 정렬한다.
     P : %CPU 값으로 정렬(기본값)
     T : Time값으로 정렬
     W : 바꾼 설정을 저장

(6) jobs
   1) 설명 : 백그라운드로 실행중인 프로세스나 현재중지된 프로세스의 목록을 출력해주는 명령어
            이다.
   2) 사용법
     jobs [option]
   3) option
     -l : 프로세스번호를 추가해서 보여준다.
   4) 사용예
     ㄱ. [posein@www posein]$ jobs
         [1]-  Running                 find / -name '*.txt' 2>/dev/null >list.txt &
         [2]+  Stopped                 vim abc.txt
          => +는 현재 실행중인 프로세스를 나타내고 -기호는 이전에 실행되었던 프로세스를 의미한
           다.
     ㄴ. [posein@www posein]$ jobs -l
         [1]- 27832 Running                 find / -name '*.txt' 2>/dev/null >list.txt &
         [2]+ 27833 Stopped (tty output)    vim abc.txt
           => 프로세스번호도 같이 보여준다. 위 결과는 find 라는 작업이 먼저 수행되었고 그 다음
             vi작업이 실행되었다. 현재 수행중인 작업은 vi 이다. 즉 이 경우에 fg라고 명령내리면
              작업번호 2가 수행된다.

(7) fg
   1) 설명 : 백그라운드 프로세스를 포그라운드 프로세스로 전환하는 명령이다.
   2) 사용법
     fg [%작업번호]
   3) 사용예
     ㄱ. [posein@www posein]$ fg
           => 백그라운드 작업을 포그라운드작업으로 전환한다. 만약 백그라운드작업이 여러개가
             있을 경우 별도의 작업번호를 부여하지 않으면 현재 수행중인(+기호가 붙은) 작업을
             전환한다.
     ㄴ. [posein@www posein]$ fg %2
           => 작업번호 2번인 작업을 포그라운드작업으로 전환한다.
   4) 참고 : 포그라운드로 실행중인 작업을 끝내려면 ctrl+c키를 눌러 작업을 종료시킨다.

(8) bg
   1) 설명 : 포그라운드프로세스를 백그라운드 작업으로 전환하는 명령이다. 프로세스를 실행한 후
            [CTRL]+[Z]키를 눌러 작업을 잠시 중지시킨 후에 bg명령어를 이용하여 작업을 백그라운
            드로 보낼 수 있다.
   2) 사용법
     bg [%작업번호]
   3) 사용예
     [posein@www posein]$ find / -name '*.txt' 2>/dev/null > list.txt     // 포그라운드
     // [CTRL]+[Z]키를 눌러 대기시킨다.
     [1]+  Stopped                 find / -name '*.txt' 2>/dev/null >list.txt  

     [posein@www posein]$ bg
     [1]+ find / -name '*.txt' 2>/dev/null >list.txt &
       => 백그라운드로 전환된다.

(참고) 프로세스 우선순위
   멀티태스킹(Multi-Tasking)이란 한 시스템에서 여러 개의 프로세스가 작동되는 것을 말한다.
  리눅스에서 이러한 작업은 프로세스 스케줄러가 정해진 시간만큼만 CPU를 사용할 수 있도록 프로
  세스를 교체시키기 때문이다. 프로세스에는 일정한 순서를 나타내는 우선순위가 있다. 이 우선순위
  를 나타내는 것이 priority와 nice값이다. 이 값은 ps -l로 확인할 수 있다. PRI는 프로세스의
  실제 우선순위로 리눅스가 계산하여 부여한다. 이 PRI를 부여할 때 NI값이 고려된다. NI는 PRI값에
  영향을 주기 위해 프로세스 소유자나 슈퍼유저가 설정한 번호로 nice명령을 이용하여 그 값을 설정
  할 수 있다.

(9) nice
   1) 설명 : 프로세스의 우선순위를 변경하는 명령으로 NI값을 설정할 수 있다. NI값은 -20 ~ 19
            까지 있는데 값이 작을 수록 우선순위가 높다. 일반 사용자는 NI값을 증가시킬 수밖에
            없고 루트권한자는 값을 감소시켜 우선순위를 높일 수 있다. 기본값은 0이다.
   2) 사용법
     nice -값 프로세스명
   3) 사용예
     [posein@www posein]$ ps -l
       F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
     100 S   501 20843 20842  0  76   0    -   566 wait4  pts/2    00:00:00 bash
     000 T   501 20893 20843  0  69   0    -   685 do_sig pts/2    00:00:00 vi
     000 R   501 20904 20843  0  78   0    -   752 -      pts/2    00:00:00 ps
     [posein@www posein]$ nice -10 bash
     [posein@www posein]$ ps -l
       F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
     100 S   501 20843 20842  0  73   0    -   566 wait4  pts/2    00:00:00 bash
     000 T   501 20893 20843  0  69   0    -   685 do_sig pts/2    00:00:00 vi
     000 S   501 20906 20843  0  77  10    -   564 wait4  pts/2    00:00:00 bash
     000 R   501 20923 20906  0  79  10    -   753 -      pts/2    00:00:00 ps
      => bash의 NI값을 10으로 설정한다. NI값을 변경하면 bash의 자식프로세스인
        NI값도 바뀐다.
     [root@www /root]# nice --10 bash
       => bash의 NI값을 -10으로 설정한다.
(참고) bash와 NI값
   bash는 로그할 때의 부여받는 환경에 가까워서 NI값을 변경하면 실제적으로 우선순위의 변동보다
  새로운 bash를 부여받는 쪽에 가깝다.

(10) renice
   1) 설명 : 실행중인 프로세스의 우선순위를 변경할 때 사용하는 명령으로 오직 그 프로세스의
            소유자와 루트권한자만이 명령을 내릴 수 있다. 이 명령도 NI값을 부여함으로서 우선
            순위가 변경되며 루트권한자만이 프로세스의 우선순위를 높일 수 있다.
   2) 사용법
     renice [options] 값 PID
   3) options
     -g : 그룹 ID 지정
     -u : 사용자 ID 지정
     -p : 프로세스 ID 지정(초기값)
   4) 사용예
    ㄱ. [posein@www posein]$ ps -l
          F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
        100 S   501 20843 20842  0  69   0    -   566 wait4  pts/2    00:00:00 bash
        000 T   501 20893 20843  0  69   0    -   685 do_sig pts/2    00:00:00 vi
        000 S   501 20906 20843  0  79  10    -   564 wait4  pts/2    00:00:00 bash
        000 R   501 20937 20906  0  77  10    -   752 -      pts/2    00:00:00 ps
        [posein@www posein]$ renice 15 20906
        20906: old priority 10, new priority 15
        [posein@www posein]$ ps -l
          F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD
        100 S   501 20843 20842  0  69   0    -   566 wait4  pts/2    00:00:00 bash
        000 T   501 20893 20843  0  69   0    -   685 do_sig pts/2    00:00:00 vi
        000 S   501 20906 20843  0  77  15    -   564 wait4  pts/2    00:00:00 bash
        000 R   501 20939 20906  0  79  15    -   752 -      pts/2    00:00:00 ps
         => 20906작업의 NI값을 15로 바뀌면서, PRI는 적당한 값으로 자동 설정된다.
    ㄴ. [root@www root]# renice 1 987 -u daemon root -p 32
         => 프로세스 ID가 987, 32 인 것과 사용자가 daemon, root인 모든 프로세스의 우선권값을
           1로 바꾼다.

(11) nohup
   1) 설명: 이 명령은 사용자가 로그아웃하거나 터미널창을 닫아도 해당 프로세스를 백그라운드로
           작업될 수 있도록 해주는 명령이다.
   2) 사용법
     nohup 명령
   3) 사용예
     nohup tar cvf source.tar /opt/src &
   4) 참고
     만약 표준출력이 화면이었는데 사용자가 로그아웃하게 되면 표준출력과 표준에러를 'nohup.out'
    이라는 파일에 저장한다. 현재 작업디렉토리에 쓰기작업이 불가능한 경우에는 ~/nohup.out를
    생성하고 그것도 불가능하게 되면 실행이 되지 않는다. 또한 우선권을 5 만큼 증가시켜 수행하고
    실행한 명령을 자동으로 백그라운드로 보내지 않으므로 직접 명령행 뒤에 '&'를 붙여 백그라운드
    로 보내주어야 한다.

Favicon of http://www.daybyplace.com BlogIcon blue_parr0t  | 2016.06.27 11:58 신고
nohup 명령어 보고 갑니다. 감사합니다.

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

 

1. cal(calender)
(1) 설명: 달력을 보여주는 명령이다. 옵션없이 실행시키면 현재 시스템 날짜로 기록된 달을 보여
          준다.
(2) 사용법
   cal [option] [[month] year]
   cal mm yyyy
(3) option
   -j : 1월1일부터 날짜수를 계산하여 출력해준다.
   -y : 올해의 달력을 표시한다.
(4) 사용예
   1) [posein@www posein]$ cal
            May 2003
      Su Mo Tu We Th Fr Sa
             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
       => 현재 시스템이 속한 달의 달력을 보여준다.
   2) cal 2001
       => 2001년도의 달력을 1월부터 12월까지 보여준다.
   3) cal 1 1993
       => 1993년 1월의 달력을 보여준다.
   4) [posein@www posein]$ cal -j
                May 2003
      Sun Mon Tue Wed Thu Fri Sat
                121 122 123
      124 125 126 127 128 129 130
      131 132 133 134 135 136 137
      138 139 140 141 142 143 144
      145 146 147 148 149 150 151
       => 특별한 년월을 지정하지 않으면 현재 속해있는 달의 날짜수를 1월 1일기준으로 계산하여
         출력한다.
   5) cal -y
       => 올해의 달력을 출력한다.

2. date
(1) 설명: 시스템의 날짜와 시간을 표시하거나 변경한다. 도스의 'date'와 'time'명령과 유사하다.
(2) 사용법
   date [option] [MMDDhhmm[[CC]YY][.ss]]
   date [option] [+FORMAT]
    => (설명)
      MM  : 월(01~12)
      DD  : 일(01~31)
      hh  : 시(00~23)
      mm  : 분(00~59)
      CC  : 연도의 앞 두자리
      YY  : 연도의 뒤 두자리
      .ss : 초(00~59)
(3) option
   -s : 시간을 설정하는 옵션이다. 순서는 'hh:mm:ss'이다.
   (참고) 추가적인 옵션은 date --help 로 확인한다.
(4) FORMAT
  1) 설명: +기호와 함께 사용하며 날짜와 관련된 원하는 출력형태를 제공한다.
  2) 종류
    %% : % 기호를 출력한다.
    %a : 요일을 간략하게 출력한다. (예: Wed)
    %A : 요일을 전체단어로 출력한다. (예: Wednesday)
    %b : 월을 간략하게 출력한다. (예 Apr)
    %B   월을 전체단어로 출력한다. (예 April)
    %c : 'Wed May  7 00:54:17 2003' 형태로 날짜와 시간을 출력한다.
    %C : 세기(Century)를 보여준다. 연도를 100으로 나눈 정수값을 보여준다.
    %d : 날짜만 보여준다. (예 07)
    %D : '05/07/03'형태로 날짜를 보여준다.
    %e : 한칸 띄우고 날짜만 보여준다. (예 7)
    %F : '2003-05-07'형태로 날짜를 보여준다.
    %g : 연도끝 두자리만 보여준다. (예 03)
    %G : 4자리수로 연도를 보여준다. (예 2003)
    %h : %b 와 같은 역할을 하는 것으로 월을 간략하게 출력한다. (예 Apr)
    %H : 24시형태(00~23)로 시간만 출력한다. (예 23)
    %I : 12시형태(00~12)로 시간만 출력한다. (예 01)
    %j : 1월 1일을 기준으로 오늘의 날짜수를 계산해준다.
    %k : 24시형태(00~23)로 시간만 출력한다. (예 23) %H와 같다.
    %l : 12시형태(00~12)로 시간만 출력한다. (예 01) %I와 같다.
    %m : 숫자값형태(01~12)로 월을 출력한다. (예 05)
    %M : 분(00~59)을 출력한다. (예 47)
    %n : 줄을 바꾸어준다.(newline)
    %N : 나노초(Nanoseconds)형태로 출력해준다. 지원하지 않을 수도 있다. (예 000000000)
    %p : 오전/오후를 대문자 약어로 표기해준다. (예 AM)
    %P : 오전/오후를 소문자 약어로 표기해준다. (예 am)
    %r : '01:50:01 AM' 형태로 시간을 출력한다.
    %R : 24시 형태로 시간만 출력한다. (예 01:50)
    %s : 1970년 1월 1일 00:00:00 이후의 초값을 출력해준다. (예 1052239845)
    %S : 현재 초값을 출력해준다. (예 01)
    %t : 탭역할을 한다.
    %T : '01:52:37' 형태로 시간을 출력해준다.
    %u : 요일을 숫자값(1~7)으로 출력해준다. 월요일이 1이다. (예 3)
    %U : 올해가 시작한 이래 지난 일요일의 갯수를 출력해준다. (예 18)
    %V : 올해가 시작한 이래 지난 월요일의 갯수(01~53)를 출력해준다. (예 19)
    %w : 요일을 숫자값(0~6)으로 출력해준다. 일요일이 0이다.
    %W : 올해가 시작한 이래 지난 월요일의 갯수(00~53)를 출력해준다. (예 18)
    %x : '05/07/03'형태로 날짜를 출력해준다.
    %X : '01:58:01'형태로 시간을 출력해준다.
    %y : 년도의 마지막 2자리만 출력해준다. (예 03)
    %Y : '2003'형태로 년도를 출력해준다.
    %z : 타임존값을 출력해준다. (예 +0900)
    %Z : 'KST' 형태의 타임존값을 출력해준다.
(5) 사용예
   1) date
      => 현재 설정된 날짜와 시간을 표시한다.
   2) date 0416182501
       => 현재시간을 2001년 4월 16일 오후 6시 25분으로 설정한다. 순서는 다음과 같이
         '월/일/시/분/년도'순으로 두자리씩 차지한다.
   3) date -s 06:40:20
       => 현재시간을 오전 6시 40분 20초로 한다.
   4) [posein@www posein]$ date +%A
      Wednesday
   5) [posein@www posein]$ date +"Today is %A, %B %d, %Y.%nThe time now is %r, %z."
      Today is 금요일, 일월 10, 2003.
      The time now is 11:24:23 오후, +0900.
(6) 관련명령
   clock -w => 현재의 시간을 CMOS의 시계에 맞춘다.

(참고1) 시스템 시간에 대하여
시스템의 정확한 시간 설정을 위해서는 먼저 타임존(Time zone)을 설정해야 한다. 즉 서로 다른
지역에서의 정확한 시간을 위해 GMT(Greenwich Mean Time)에 기초하여 시간을 설정한다. 보통 GMT는
UTC(Universal Time Clock)으로도 많이 알려져 있다. 타임 존 설정을 timeconfig 명령을 실행하여
설정할 수 있고, 하드웨어 클럭을 GMT에 맞게 설정할 수도 있다.

3. rdate
(1) 설명: 원격으로 시간을 맞추어 주는 명령으로 다른 서버의 시간을 참조하여 표준시간으로 설정
          하는 명령이다. 이 명령어는 해당서버의 NTP(Network Time Protocol)서버시간을 참조한다.
(2) 사용법
    rdate option 원격지서버
(3) option
   -p : 원격지서버의 시간을 출력해준다.
   -s : 원격지서버의 시간을 시스템의 시간으로 설정한다.
(4) 사용예
   1) rdate -s time.bora.net
       => bora.net의 시간을 현재 서버의 표준시간으로 맞춘다.
   2) rdate -s time.kriss.re.kr
       => 표준과학연구원의 시간을 표준시간으로 맞춘다.
   3) [root@www root]# rdate -p time.bora.net
      rdate: [time.bora.net]  Fri May  9 16:13:03 2003
        => 원격지서버의 시간을 출력한다.


4. uname
(1) 설명: 시스템 정보를 출력해주는 명령이다. OS의 버젼이나 vender, machine type등을 알 수
          있다.
(2) 사용법
   uname [option]
(3) option
   -m : 기계의 hardware이름을 알려준다. arch 명령과 같다.
   -n : 네트워크상의 nodename을 알려준다. 일반적으로 호스트네임을 말한다.
   -r : OS의 release를 알려준다.
   -s : 시스템 이름을 알려준다. 옵션없이 실행시킨 것과 같다.
   -p : 프로세서의 타입을 알려준다.
   -v : OS의 버젼을 알려준다. 커널의 생성날짜이다.
   -a : 위의 모든 정보를 보여준다.
(4) 사용예
   1) [root@www root]# uname -a
      Linux www 2.4.18-14 #1 Wed Sep 4 13:35:50 EDT 2002 i686 i686 i386 GNU/Linux
        => 시스템의 모든 정보를 보여준다.
   2) [root@www root]# uname -r
      2.4.18-14
        => 커널버전만 출력한다.

5. dmesg
(1) 설명: 부팅시 커널에 출력되는 상태 정보를 볼 수 있도록 하는 프로그램이다.
(2) 사용법
    dmesg

6. sleep
(1) 설명 : 이름 그대로 잠시 쉬게 하는 명령이다.
(2) 사용법
   sleep 시간
    => 기본시간은 초단위이다. 분(m), 시간(h), 날짜(d)도 가능하다.
(3) 사용예
   1) sleep 3
       => 3초간 쉰다.
   2) [posein@www posein]$ ls ; sleep 5 ; ls
       => ls 명령후 5초간 대기한후 다시 ls명령을 실행한다.

7. tty
(1) 설명: 현재 로그온되어 있는 터미널의 장치 이름을 알려준다. 보통 텔넷등으로 동일한 계정으로
          여러 개 로그인했을 경우 확인할 때 유용하다.
(2) 사용법
   tty
(3) 사용예
   [posein@www posein]$ tty
   /dev/pts/3

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

 

1. 압축에 대하여
압축은 파일의 크기를 작게 만드는 것이다. 파일의 크기를 작게 만듬으로써 파일의 전송이나 다운로
드시 시간을 절약할 수 있다. 일반 텍스트 파일인 경우 최대 75%까지 압축이 가능하다. 그러나 바이
너리 파일인 경우에는 압축이 거의 되지 않거나 오히려 파일의 크기가 더욱 커질 수도 있으니 유의해
야 한다.

2. 압축 관련 명령어
(1) bzip2
   1) 설명 : 새로운 리눅스용 압축 프로그램이다. 전통적인 압축 프로그램이 gzip보다 압축율이
            매우 뛰어나다. 보통 gzip으로 압축한 것의 60-70%의 크기로 만든다. 압축으로 생성된
            파일 뒤에 .bz2를 붙이면 된다. 일반적인 사용법과 옵션은 gzip과 유사하다.
   2) 사용법
     bzip2 [options] 파일명
   3) option
     -d : 압축을 푸는 옵션이다.
     -f : bzip2와 bunzip2는 기본적으로 존재하는 파일을 덮어쓰지 않는다. 덮어쓰기 등의 명령을
        내릴 때 사용하는 옵션이다.
   4) 사용예
     ㄱ. [posein@www posein]$ bzip2 www.tar
           => www.tar라는 파일을 압축한다. 특별한 옵션없이 명령을 내리면 www.tar.bz2 라는 파일
             이 생성된다.
     ㄴ. [posein@www posein]$ bzip2 -d www.tar.bz2
           => www.tar.bz2 파일의 압축을 푼다. 기본적으로 bzip2 -d 는 bunzip2 명령과 같다.
(2) bunzip2
   1) 설명: bzip2로 압축된 파일을 풀 때 사용하는 명령이다.
   2) 사용법
     bunzip2 [options] 압축된_파일명
   3) 사용예
     [posein@www posein]$ bunzip2 www.tar.bz2
       => www.tar.bz2라는 파일의 압축을 푼다. www.tar라는 파일이 생성된다.
(3) zip와 unzip: 레드햇 리눅스에서 DOS/WINDOWS 계열의 zip과의 호환성 유지를 위해 사용되는 명
                 령으로 사용법은 다른 압축 프로그램과 유사하다. zip이 압축할 때, unzip은 압축
                 풀 때 사용하는 명령이다.
(4) tar
   1) 설명: 일반적으로 tar는 파일이나 디렉토리를 묶을 때 사용한다. 전통적인 유닉스의 tar는
          묶는 기능만을 할 뿐 압축을 하지 못한다. 그러나, 리눅스의 GNU tar는 GNU gzip 압축을
          위한 z command 이외에 최신의 리눅스 압축프로그램인 bzip2도 -j command을 통하여 지원
          한다. 추가적으로 백업시 필요한 command을 알아본다
   2) 사용법
     tar command 디렉토리
   3) command
     -p : 해당 파일이나 디렉토리의 퍼미션을 그대로 유지한다.
     -g list : 증분백업(incremental backup)에 사용되는 옵션으로 백업과 동시에 list라는 파일에
              저장한 목록을 기록한다.
     -C : 묶여진 파일을 풀 때 디렉토리를 변경할 수 있다.
   4) 사용예
    ㄱ. tar cvpf home.tar /home
         => /home 디렉토리의 모든 내용을 퍼미션을 그대로 유지하면서 home.tar로 묶는다.
    ㄴ. tar -g list -cvpf home.tar /home
         => /home이라는 디렉토리를 home.tar라는 파일로 묶고 list파일 목록파일도 만든다. 처음에
           는 전체백업이 된다. 다시 시도하면 증가된 부분만 백업하므로 생성되는 파일명을 변경하
           도록 한다. 예를 들면 "tar -g list -cvpf home1.tar /home"
    ㄷ. tar xvpf home.tar -C /home
         => home.tar의 퍼미션을 그대로 유지하면서 /home이라는 디렉토리에 푼다.

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

 

1. tar
(1) 설명 : 파일들을 하나의 파일로 묶는 명령이다. 파일을 묶을 때 디렉토리를 지정하면 그 디렉
           토리의 모든 파일과 서브디렉토리들이 함께 묶여진다. 또한 파일의속성, 하드링크,
           심볼릭 링크등도 고스란히 보존된다. 보통 압축명령 gzip명령과 함께 쓰여 tarball파일
           (.tar.gz)을 생성한다.
(2) 사용법
   tar command file(s)
(3) command : 일반적으로 -(dash)를 사용하지 않아도 된다.
   c : 지정한 파일이나 디렉토리를 하나로 묶어 새로운 tar 파일을 생성한다.
   x : 기존의 생성된 tar파일을 푼다.
   v : 어떤 명령을 실행할 때 대상이 되고 있는 파일들을 보여준다. 예를 들면 c명령과 같이 쓰면
      묶여지는 동안 파일의 이름을 보여준다.
   f filename : 작업 대상이 되는 tar파일의 이름을 지정한다. filename대신 '- '를 쓰면 표준입
               력/표준 출력이 된다. '-'는 파이프를 이용한 명령에서 많이 쓰인다.
   r : 기존의 tar파일 뒤에 파일을 추가한다.
   t : tar파일안에 들어 있는 파일들의 리스트를 보여준다.
   h : 심볼릭 링크가 가리키고 있는 파일을 저장한다. 원래 tar는 심볼릭링크가 있는 경우, 그 링크
      를 그대로 저장하는데, 이 옵션을 주면 링크 자체 대신에 링크가 가리키고 있는 파일을 저장
      한다.
   p : 파일의 생성되었을 때의 권한을 그대로 유지하게 해준다.
   z : zip옵션으로 최근에 추가되었다. 묶는 것과 동시에 압축을 해준다. 보통 .tgz(.tar.gz)이라는
      확장자를 사용한다.
(4) 사용예
   1) tar cvf cc.tar *.c => 현재디렉토리에서 *.c로 된 모든 파일을 cc.tar
                           파일로 묶어라.
   2) tar cvf posein.tar posein/ => posein이라는 디렉토리와 서브디렉토리의 모든파일을 posein
                                   .tar로 묶는다.
   3) tar xvf cc.tar => 현재 디렉토리에 cc.tar파일을 푼다.
   4) tar tvf cc.tar => cc.tar의 내용을 보여준다.
   5) tar rvf cc.tar test.txt => 현재 디렉토리에 있는 test.txt라는 파일을 cc.tar라는 파일에
                                추가하여 묶는다.
   6) tar cvfz ccc.tgz *.c => 현재 디렉토리에서 *.c로 끝나는 파일을 모두 묶어서 ccc.tgz라는
                             파일로 압축한다.
   7) tar zxvf php-4.0.4.tar.gz => 압축해제와 묶여짐을 동시에 푼다.
(5) 참고: tar 어원의 유래
    원래 tar는 테이프 관련장치를 백업할 때 사용하는 명령이었다. 그래서 tar의 어원도 tape
   archive의 약어이다.

2. compress/uncompress/zcat
(1) 설명 : 전통적으로 유닉스에서 쓰여왔던 압축 프로그램이지만 압축률이 낮아 현재는 많이 쓰이
           지는 않는다.
(2) 사용법
   compress [option] file
     => 파일을 압축하는 명령이다.
   uncompress [option] file
    => 압축된 파일을 푸는 명령이다.
   zcat file
    => 압축되어 있는 텍스트파일의 내용을 풀어서 보여주는 명령이다.
(3) option
   -c : 표준 출력으로 쓴다. 일반 출력시는 생략가능하지만, tar 등과 병행해서 사용시는 반드시
       표기해야 한다. zcat은 uncompress -c와 똑같다.
   -v : 압축율을 화면에 보여준다.
(4) 특징 : 파일 이름이 생략되면 표준입력을 사용하고, 이때 출력 역시 표준 출력으로 보내진다.
           압축된 파일은 이름 뒤에 .Z가 붙게되고 원래파일은 지워진다. uncompress는 파일 이름을
           써줄때 무조건 파일 이름 뒤에 .Z를 붙여서 해석하므로 파일 이름 뒤에 .Z가 붙지 않은
           파일은 압축을 풀 수가 없다.
(5) 사용예
   1) [posein@www posein]$ compress text.txt
       => compress 명령을 옵션없이 사용하면 기본적으로 파일이름뒤에 .Z 를 붙여 압축파일을
        생성한다. 즉'text.txt.Z' 라는 파일이 생성된다.
   2) tar cvf - * | compress > backup.tar.Z
       => 현재 디렉토리의 모든 파일을 tar로 묶어 압축한 다음 결과를 backup.tar.Z로 저장한다.
   3) uncompress -c backup.tar.Z | tar xvf -
       => backup.tar.Z라는 파일을 압축을 푼 후 결과로 나온 tar파일을 현재 디렉토리에 푼다.
         'zcat backup.tar.Z | tar xvf -' 와 같다.
   4) [posein@www posein]$ zcat text.txt.Z
      I love linux
      I love windows
      I love unix
       => 압축되어 있는 text.txt.Z 파일의 내용을 보여준다.
   5) compress txt.tar
       => txt.tar파일을 압축한다. 결과로 txt.tar.Z이라는 파일이 생성된다.
   6) zcat txt.tar.Z
       => 묶여져 있는 텍스트파일의 내용을 화면상으로 보여준다.

3. gzip
(1) 설명 : GNU에서 만든 압축 프로그램으로 유닉스 표준 압축프로그램은 아니지만, 압축율이 뛰어
           나다. 이것 역시 파일을 묶는 기능이 없으므로, 여러 개의 파일들을 묶으려면 tar와 같이
           써야한다.
(2) 사용법
   gzip [option] file
    => 파일이름이 생략되면 표준 출력을 사용하며 원래 파일이름뒤에 .gz라는 이름을 붙이고 압축을
      해제하거나 압축할 때 기존의 파일을 지운다.
(3) option
   -d : 압축을 푸는 옵션이다.
   -1 : 파일을 압축하는 시간을 줄인다. 이 옵션을 사용하면 압축은 빠르지만 압축율이 떨어진다.
   -9 : 파일을 최대로 압축한다. 시간이 많이 걸린다.
   -r : 서브디렉토리까지 압축을 한다.
   -c : 출력을 표준 출력으로 보낸다. tar등과 병행해서 쓸 경우 꼭 필요하다.
(4) 사용예
   1) gzip -9 -r * => 현재 디렉토리와 서브디렉토리의 모든 파일을 최대효율로 압축한다.
   2) gzip -cd aa.tar.gz | tar xvf -
       => aa.tar.gz이라는 파일의 압축을 해제후 tar를 사용하여 현재디렉토리에 푼다.
(5) 참고
   1) 압축을 할때 : gzip 파일명
   2) 압축을 풀때 : gzip -d 파일명 = gunzip 파일명
   3).tgz파일 : .tar.gz로 인식하여 .tgz가 붙는 파일을 풀면 .tar가 붙은 파일이 생기게 된다.

4. gunzip
(1) 설명: gzip으로 압축된 파일을 풀 때 사용한다.
(2) 사용법
   gunzip [option] file
(3) option
   -d: 압축을 풀 때 사용한다. 생략해도 기본값이다.
(4) 사용예
   1) [posein@www posein]$ gunzip *.gz
       => 현재디렉토리에서 *.gz으로 끝나는 파일 전부푼다. gzip -d 사용한 것과 같다.
   2) [posein@www posein]$ gunzip -d *.gz
       => 현재디렉토리에서 *.gz으로 끝나는 압축파일의 압축을 푼다. 위와 동일하다.

(참고) tar 로 묶은 후에 gzip 명령으로 압축하는 것과 tar의 z 옵션사용 비교
1. tar 후에 gzip 명령을 이용하여 압축
   [posein@www posein]$ tar cvf text.tar *.txt
   a.txt
   aaa.txt
   b.txt
   bbb.txt
   c.txt
   err.txt
   passwd.txt
   samba.txt
   snort.txt
   [posein@www posein]$ gzip text.tar
   [posein@www posein]$ ls -l text.tar.gz
   -rw-rw-r--    1 posein   posein       4381  5월  6 23:37 text.tar.gz
2. tar의 z 옵션을 이용하여 한번에 실행
   [posein@www posein]$ tar zcvf text.tar.gz *.txt
   a.txt
   aaa.txt
   b.txt
   bbb.txt
   c.txt
   err.txt
   passwd.txt
   samba.txt
   snort.txt
   [posein@www posein]$ ls -l text.tar.gz
   -rw-rw-r--    1 posein   posein       4372  5월  6 23:38 text.tar.gz
     => tar와 gzip명령을 따로 하는 것보다 tar의 z옵션을 이용하는 것이 더 효율적이다.

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

 

1. 파일링크의 개요
(1) inode(index node)
  i-node는 파일의 생성과 동시에 임의로 부여되며,  번호확인은 ls -i 로 확인할 수 있다. 또한
리눅스에서는 모든 디바이스나 디렉토리를 파일개념으로 인식하기 때문에 전부 inode를 부여받는다.
만약 inode가 같은 파일이 있다면 파일 이름이 다르더라도 이 파일은 같은 파일이 된다.
(2) Link File의 종류
   1) Hard link : 하나의 파일을 여러 이름으로 사용하는 것(=복사의 의미)으로 원본파일과 대상파
                 일은 같은 파일로 인식한다.
   2) Soft link : 여러 개의 파일명이 하나의 파일명을 가리키게 하는 것으로 원본과 대상파일은
                 완전히 다른 파일로 인식한다.

2. ln
(1) 설명: 하드링크 또는 심볼릭링크 파일을 생성하는 명령이다.
(2) 사용법
   ln [option] 소스파일 대상파일
(3) option
   -s : 심볼릭링크(소프트링크)를 생성한다. 만약 이 옵션이 없으면 하드링크가 생성된다.
   -v : 링크를 만드는 정보를 자세히 출력한다.
(4) 사용예
   1) ln aa.txt aa
     => aa.txt라는 파일을 aa라는 파일로 하드링크시킨다.
   2) ln -s aa.txt aa
     => aa.txt라는 파일을 aa라는 파일로 심볼릭링크시킨다.

3. 하드링크와 소프트링크
(1) 하드링크
   1) 사용법
     ln 소스파일 대상파일
   2) 특징
     ㄱ. ls -i 명령으로 inode번호를 확인해 보면 두개의 파일이 서로 같다.
     ㄴ. 두 개 파일의 크기와 내용이 같다.
     ㄷ. 하드링크로 생성된 파일은 한쪽을 수정하면 같이 수정되나 링크된 파일이나 원본을
        삭제해도 다른 한쪽은 아무런 영향을 받지 않는다.
     ㄹ. 하드링크를 해야만 ls -l명령시 나오는 링크의 숫자가 올라간다.
   3) 사용예
     ln /etc/passwd passwd
      => /etc/passwd 라는 파일의 하드링크파일을 현재디렉토리의 passwd라는 이름으로 생성한다.
   4) 하드링크시 유의점
     ㄱ. 파티션이나 드라이브를 가로질러 사용할 수는 없다.
     ㄴ. 같은 파일시스템내에서 사용해야 한다.
     ㄷ. 디렉토리는 하드링크를 사용할 수 없다.
(2) Soft link(=symbolic link)
   1) 사용법
     ln -s 소스파일 대상파일
      => 하드링크에 -s 옵션만 추가하면 되고 aa가 aa.txt를 가리키기만 한다.
   2) 특징
     ㄱ. 전혀 다른 inode번호를 값을 갖는다.
     ㄴ. 소프트링크된 파일의 크기는 매우 작다
     ㄷ. 소프트링크를 하면 ls -l했을때 나타나는 권한 맨 앞쪽에 l이라구 표시된다.
     ㄹ. 소프트링크도 한쪽이 변경되면 다른쪽도 변경된다.
     ㅁ. 링크된 파일이 삭제되면 원본파일에 아무런 영향이 없지만, 원본이 삭제되면 링크된 파일은
        아무 구실을 못한다.
     ㅂ. 디렉토리를 링크하면 윈도우즈의 바로가기 기능과 같다.
     ㅅ. 디렉토리를 링크해도 기본 개념은 파일이다. 즉 삭제할 때 rm 같은 파일삭제 명령어를 사용
        해야 한다.
   3) 사용예
     ㄱ. /etc/xinetd.d 라는 디렉토리를 자주간다면 현재 나의 홈디렉토리에 링크해보자.
        ln -s /etc/xinetd.d xx
         => /etc/xinetd.d라는 디렉토리를 현재 디렉토리의 xx라는 것으로 링크한다. ls xx하면
           ls /etc/xinetd.d의 내용과 동일한 내용이 나타나고 또한 cd xx하면 그 디렉토리안으로
           들어간 것과 같다.
   4) 참고 : 소프트링크의 퍼미션
     소프트링크를 걸면 해당 파일의 퍼미션값이 777이 된다. 그러나 이 값은 원래 파일의 퍼미션 값
    과는 다르다.

우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
Tips! (1)
OpenSource (1)
«   2018/01   »
  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)