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

출처 : 대전국제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 라고 입력해도 된다.

Trackback
Reply

출처 : 대전국제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을 사용하는 경우 메뉴를 이용하여 전원을 재부팅하거나 종료시킬 수 있다.

Trackback
Reply

출처 : 대전국제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을 실행시키면 된다.

Trackback
Reply

출처 : 대전국제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는 루트파티션이 설치된 영역을 말한다. 설치시 나눈 파티션에 맞게 값을
     입력하면 된다.

Trackback
Reply

출처 : 대전국제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'를 실행시키면 된다.

Trackback
Reply

출처 : 대전국제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

Trackback
Reply

출처 : 대전국제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로 쉘을 변경한다.

Trackback
Reply

출처 : 대전국제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파일안에서 확인할 수 있다.

Trackback
Reply

출처 : 대전국제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) : 리눅스 배포판업체, 관리자들이나 사용자의 모임의 메일링리스트
                                를 통해 질문과 답변, 리눅스관련 정보를 얻을 수 있다.

Trackback
Reply

출처 : 대전국제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'이고
                매직키가 사용불가하다.

Trackback
Reply

출처 : 대전국제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 만큼 증가시켜 수행하고
    실행한 명령을 자동으로 백그라운드로 보내지 않으므로 직접 명령행 뒤에 '&'를 붙여 백그라운드
    로 보내주어야 한다.

Trackback
Reply

출처 : 대전국제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

Trackback
Reply

출처 : 대전국제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이라는 디렉토리에 푼다.

Trackback
Reply

출처 : 대전국제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옵션을 이용하는 것이 더 효율적이다.

Trackback
Reply

출처 : 대전국제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이 된다. 그러나 이 값은 원래 파일의 퍼미션 값
    과는 다르다.

Trackback
Reply

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

 

1.vi편집기란?
vi는 visual의 약자로 유닉스의 표준 편집기이다. ex라는 editor를 바탕으로 만들어진 스크린 편집
기로, 프로그램의 사이즈도 작고 기능이 많다. 윈도우의 editor에 익숙한 사용자에겐 불편하게 느껴
지겠지만, 아주 편리한 환경과 막강한 기능을 제공하는 편집기이다.
(참고) vi는 full screen editor이므로 정확한 단말기 특성이 /etc/termcap안에 있어야 하며, 환경
      변수 $TERM이 정확히 정의되어 있어야 한다.

2.vi 편집기 시작하기
(1) 사용법
   vi [option] [filename]
(2) option
   -c  : -c옵션은 시작하면서 어떠한 명령을 실행한다.
   -r  : 손상된 파일을 복구할 때 쓴다. 파일을 편집하던 중 갑작스런 사고 등으로 인해 시스템이
        다운되었을 경우 대개 이 명령으로 복구 할 수 있다.
   +n  : 파일을 열면서 n번째 줄로 커서를 이동시킨다.
   +   : 파일을 열면서 마지막 줄에 커서를 이동시킨다.
   -wn : 기본적인 윈도우 크기를 n라인으로 한다.(기본값은 20라인)
(3) 사용예
   1) vi                 
       => 빈문서로 시작한다.
   2) vi index.html      
       => 주어진 파일(index.html) 이름으로 편집을 시작한다. 만약 파일이 존재하지 않으면 새로
         만들게 된다.
   3) vi +15 index.html   
       => index.html 파일을 열면서 커서를 15번째 줄로 보낸다.
   4) vi -c 15 index.html 
       => -c옵션은 시작하면서 어떠한 명령을 실행하라는 뜻이다. 따라서, -c 15 라고 쓰면 +15
         옵션과 동일한 결과를 얻는다.
   5) view index.html     
       => index.html파일을 읽기 전용으로 파일을 연다. 참고로 저장할 때 ':wq!'형식으로 ! 표를
         붙이면 읽기전용이라도 저장된다
   6) vi + index.html     
       => index.html파일을 열면서 커서의 위치를 마지막라인에 둔다.
   7) vi +/posein /etc/passwd
       => /etc/passwd 라는 파일을 열면서 posein이라는 문자열이 있는 위치에 커서를 둔다.

3. vi 종료하기
(1) 설명: 모드에 대한 설명이 아래에 나오지만 미리 종료에 대해 설명하면 일단 [ESC]키를 눌러
          명령모드로 전환한 후, 필요에 맞게 다음 중 하나의 키워드를 사용하면 된다.
(2) 명령
   :wq => 파일을 저장한 후 종료한다. 같은 명령으로는 ZZ 또는 :x 가 있다.
   :q! => 편집하여 변경된 내용을 저장하지 않고 강제 종료한다.
   :q  => 편집중인 내용이 없는 경우, vi를 종료한다.
   :w  => 편집중인 파일 내용을 저장한다. vi는 종료하지 않는다.

4. vi편집기의 모드
(1) 설명: vi편집기에는 크게 2가지모드로 구분된다. 첫번째는 명령모드(command mode)이고, 두번째
          는 입력모드(input mode)또는 편집모드라고 한다. 또 명령모드는 다시 일반명령모드와
          ex명령모드로 구분된다. 명령모드상태에서 입력명령(i,I,a,A,o,O)을 실행하면 입력모드로
          전환된다. 입력모드에서 타이핑한 문자들이 문서에 삽입된다. 여기에서 다시 [ESC]키를
          누르면 명령모드로 돌아온다. 명령 모드에서 ':'를 입력하면 화면 아래쪽에 ':'라는 프롬
         프트가 나타나게 되는 데 이것이 ex명령모드이다.
참고)입력모드 키워드가 위 나열한 것외에 (c,C,s,S,R)등이 있다.

(2) 모드
   1) 명령모드 : vi라고 입력한뒤 처음 접하는 모드
    ㄱ. 커서 이동 명령
       h           : 왼쪽으로 이동
       j           : 아래로 이동
       k           : 위로 이동
       l           : 오른쪽으로 이동
       w           : 다음 단어의 처음으로 이동
       -           : 앞 라인의 첫문자로 이동
       ^           : 라인의 첫 문자로 이동
       $           : 라인의 맨 끝으로 이동
       +           : 다음 라인의 첫문자로 이동
       0(zero)     : 첫번째 열로 이동
       G           : 제일 끝줄로 이동
       nG          : n번째 행으로 이동
       gg          : 파일의 처음으로 이동
       (           : 문장의 처음으로 이동
       )           : 다음 문장의 처음으로 이동
       {           : 문단(paragraph)의 처음으로 이동
       }           : 다음 문단의 처음으로 이동
       H           : 화면의 첫 라인으로 이동
       M           : 화면의 중간으로 이동
       L           : 화면의 끝라인으로 이동
       ctrl+b(back)    : 한 화면 위로 이동
       ctrl+f(forward) : 한 화면 아래로 이동
       ctrl+u(up)      : 반 화면 위로 이동
       ctrl+d(down)    : 반 화면 아래로 이동
       e           : 한 단어 뒤로 이동
       b           : 한 단어 앞으로 이동
       :0(zero)     : 줄의 제일 처음으로 이동
       :$           : 줄의 제일 끝으로 이동
    ㄴ. 편집상태로 진입 : 입력모드로 전환하는 키워드이고 하단에 'INSERT' 등과 같은 문자열이
                         표시된다.
       i   : 현재 커서 위치에 삽입
       a   : 현재 커서 위치 다음에 삽입
       o   : 현재 커서가 위치한 줄의 아랫줄에 삽입
       I   : 현재 커서가 위치한 줄의 제일 앞에 삽입
       A   : 현재 커서가 위치한 줄의 제일 뒤에 삽입
       O   : 현재 커서가 위치한 줄 위에 삽입
       ESC : 명령모드로 재전환
    ㄷ. 복사하기와 붙이기
       Y     : 현재 커서가 위치한 줄을 버퍼에 복사한다.
       yy    : Y와 같다.
       yw    : 현재 커서가 위치한 단어를 버퍼에 복사한다.
       'n'Y  : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 버퍼에 복사한다.
       'n'yy : nY와 같다.
       'n'yw : 현재 커서가 위치한 단어로 부터 뒤로 n개의 단어를 버퍼에 복사한다.
       yh    : 커서의 왼쪽 문자를 복사한다.
       yl    : 커서가 위치한 문자를 복사한다.
       yB    : 커서의 왼쪽 비공백 단어를 복사한다.
       yW    : 커서의 오른쪽 비공백 단어를 복사한다.
       y0    : 커서 왼쪽부터 라인의 처음까지 복사한다.
       p     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 아래에 붙인다.
       P     : 버퍼에 들어 있는 내용을 현재 커서가 위치한 줄의 위에 붙인다.
    ㄹ. 지우기
       x     : 현재 커서 위치의 문자를 지운다.(dh와 동일)
       X     : 커서 왼쪽의 문자를 지운다.(dl과 동일)
       dd    : 현재 커서가 위치한 줄을 지운다. (단어 뒤의 스페이스 포함)
       'n'dd : 현재 커서가 위치한 줄에서 아래로 n개 만큼의 줄을 지운다.
       dw    : 현재 커서가 위치한 단어를 지운다.
       db    : 현재 커서의 왼쪽 단어를 지운다.
       'n'dw : 현재 커서가 위치한 단어로 부터 뒤로 n개 만큼의 단어를 지운다.
       dB    : 현재 커서 왼쪽 비공백 단어를 지운다.
       dW    : 현재 커서 오른쪽 비공백 단어를 지운다.
       d$    : 현재 커서가 있는 라인부터 끝까지 지운다.(D와 동일)
       - d0  : 커서 왼쪽부터 라인의 처음까지 지운다.
    ㅁ. 바꾸기
       r    : 현재 위치의 문자를 바꾼다.
       R    : 현재 커서 위치부터 원하는 만큼 다른 문자로 바꾼다.
       cb   : 현재 커서 왼쪽 단어를 바꾼다.
       cw   : 현재 위치의 단어를 바꾼다.
       cc   : 현재 커서가 위치한 줄을 바꾼다.
       c$   : 커서부터 라인의 끝까지 바꾼다.(C와 동일)
       c0   : 커서 왼쪽부터 라인의 처음까지 바꾼다.
       C    : 현재 커서가 위치한 곳으로부터 줄의 끝까지 바꾼다.
      'n'cw : 현재 위치로부터 'n'개의 단어를 바꾼다.
      'n'cc : 현재 위치로부터 'n'개의 줄을 바꾼다.
    ㅂ. 기타
       ctrl+g   : 현재 편집하고 있는 파일의 정보를 보여준다.
       shift+v  : 블록을 지정한다.
       u        : 방금 한 명령을 취소한다.
       U        : 현재 커서가 위치한 줄에 대한 편집 명령을 취소한다.
       .        : 방금한 명령을 되풀이 한다.
       'n'.     : 방금한 명령을 n번만큼 되풀이 한다.
       J        : 현재 줄과 다음 줄을 합한다.
       ZZ       : 현재 내용을 저장하고 끝낸다.
       /exp     : 'exp'와 같은 내용을 현재 위치 다음부터 찾는다.
       ?exp     : 'exp'와 같은 내용을 현재 위치부터 위쪽으로 찾는다.
       n        : 앞에서 찾은 내용을 현재 위치 다음부터 찾는다.
       N        : 앞에서 찾은 내용을 반대 방향으로 계속 찾는다.
       >>       : 현재 커서 위치 줄을 오른쪽으로 한 열씩 이동한다.
       <<       : 현재 커서 위치 줄을 왼쪽으로 한 열씩 이동한다.
       ~        : 현재 커서가 위치한 문자의 대소문자를 서로 변환한다.
       ctrl+l   : 화면 다시 그린다.
       !        : vi편집중에 shell명령을 내린다.
   3) ex명령모드 : ex란 초기 유닉스에서부터 쓰이던 line editor이다. vi는 자체 명령어외에
                  ex편집기 명령어를 지원한다. 명령모드에서 ':'누르면 화면 아래쪽에 ':'라는
                  프롬프트가 나타나면서 ex명령모드로 들어간다.
    ㄱ. 명령
       :w              => 현재 내용을 저장한다.
       :w filename     => 현재 내용을 지정된 파일 이름으로 저장한다.
       :w!             => 강제로 덮어쓰기를 한다.
       :q              => 그냥 종료한다. 약간이라도 변경사항이 있으면 종료안된다.
       :wq             => 현재 내용을 저장하고 종료한다.
       :wq filename    => filename 으로 저장하고 종료한다. 새이름으로 저장할 때 쓴다.
       :q!             => 현재 내용을 저장하지 않고 종료한다.
       :e filename     => 새로운 파일을 편집한다.
       :r filename     => 현재 커서 위치 다음에 파일을 읽어 삽입한다.
       :14 r filename  => 14행 이후에 파일을 읽어 삽입한다.
       :10             => 10번째 줄로 커서를 이동시킨다.
       :10, 20d        => 10번째 행에서 20번째 행까지 지운다.

     (참고) 줄 번호를 쓸 때 '.'는 현재 줄을, '$'는 끝줄을 의미하므로 ':3,$d'는 3번째행에서
           끝행까지 지운다는 의미가 된다. 또 첫줄부터 현재 커서가 위치한 줄까지를 지우려면
           ':1,.d'라고 쓰면 된다.

    ㄴ. 문자열의 치환
      :s/문자열/새문자열       => 커서가 위치하고 있는 줄의 첫번째 해당문자열을 새문자열로
                                 치환한다.
      :s/문자열/새문자열/g     => 커서가 위치하고 있는 줄의 모든 해당문자열을 새 문자열로 치
                                 환한다.
      :1,$ s/문자열/새문자열/g => 파일 전체에 대해 해당문자열을 새문자열로 치환한다.
                                :%s/문자열/새문자열/g 와 같다.

5. vi편집기의 환경설정
(1) 설명 : vi환경설정을 위해서는 명령모드에서 :set을 사용한다.
(2) 사용법
   1) 설정
     set [환경변수][=값]
   2) 해제
     set no환경변수
(3) 환경변수
   1) ignorecase : 문자열을 검색할 때 대소문자에 관계없이 검색한다.
   2) number     : 행의 앞에 행번호를 붙여준다. 약자로 'nu'라고 해도 된다.
   3) autoindent : 라인변경시 커서의 위치를 바로 위라인의 수준과 같이 해준다. 프로그램작성시에
                 용이하다. 약자로 'ai'라고 해도 된다.
   4) showmatch  : '}'또는 ')'를 입력하였을 경우 짝이되는 '{','('를 찾아 커서가 1초동안 머무르
                 다 돌아온다. 이 기능은 C등의 프로그램을 작성할 때 편리하다. 약자로 'sm'이라고
                 해도 된다.
   5) showmode   : 화면 아래쪽에 현재 모드를 표시한다. 즉 편집모드인 경우에 'INSERT'등의 값으
                  로 표시해준다. 기본값으로 설정되어 있다.
   6) tabstop    : 탭의크기를 표시한다. '=n'를 붙이면 탭의크기를 n값에 따라 부여할 수 있다.
(4) 사용예
   1) :set 
       => 여러가지 환경 변수를 설정한다. set all하면 현재 설정되어 있는 환경변수를 보여준다.
   2) :set nu
       => 행의 앞에 행번호를 표시한다. ':set number'와 같다.
   3) :set nonu
       => 행의 앞에 붙은 행번호 표시를 없앤다.
   4) :set ai
       => [Enter]키를 입력하면 행을 바꾸었을 경우 위 줄과 같은 열에 커서를 위치시킨다.
   5) :set noai
       => 'ai'설정을 해제한다. ':set noautoindent'와 같다.
   6) :set ignorecase
       => 명령모드에서 문자열을 검색시에 대소문자를 구분하지 않는다. 즉 '/linux'라고 입력하면
         linux, Linux, LINUX 등의 모든 문자열을 찾아준다.
   7) :set noignorecase
       => 검색시에 대소문자를 구분하도록 한다.
   8) :set tabstop
       => 현재 설정된 탭의 크기(기본값은 4)를 보여준다.
   9) :set tabstop=8
       => 탭의 크기를 10으로 바꾼다.
   10) :set noshowmode
       => 리눅스에서는 기본적으로 모드를 표시해준다. 즉 입력모드인 경우에는 화면하단에INSERT
         등을 표시해준다. 위와 같이 명령을 내리면 모드전환을 해도 표시해주지 않는다.
(5) 관련파일 : .exrc
   1) 설명: set명령을 사용자의 홈 디렉토리의 .exrc(또는 .vimrc)안에 써 놓으면 vi가 시작될 때
          디폴트로 설정되어 시작하게 된다.
   2) 사용법
     set [환경변수] [값]
   3) 사용예
     [posein@www posein]$ cat .exrc
     set nu
     set ai
       => vi편집기 실행할 때마다 각 행 앞에 행번호를 붙여주고 autoindent를 적용한다. ':'는
         적지 않는다.

Trackback
Reply

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

 

1. dumpe2fs
(1) 설명: dumpe2fs는 파일시스템의 슈퍼블록과 블록 그룹에 대한 정보를 보여주고 이 명령어는 BSD
          Fast File System의 dumpfs와 유사하다. ext2 파일시스템과 ext3파일시스템에서 사용가능
          하다.
(2) 사용법
   dumpe2fs [options] 장치명
(3) 사용예
   dumpe2fs /dev/hda7

2. debugfs
(1) 설명: ext2 파일시스템 디버거로 파일시스템의 상태를 조사하고 변화시킬 수 있는 명령이다.
          대화형 디버거로 해당 명령을 알아야 하고 ext3 도 일부지원한다.
(2) 사용법
   debugfs [option] [장치명]
(3) option
   -w : 쓰기가 가능한 상태로 파티션을 만들어준다.
(4) debugfs의 명령어
   1) cat 파일명: 파일의 내용을 보여준다.
   2) cd 디렉토리: 작업디렉토리를 변경한다.
   3) chroot 디렉토리: 지정한 디렉토리를 루트디렉토리로 변경한다.
   4) close : 현재 열려진 파일시스템을 닫는다.
   5) clri 파일명: 파일에 해당하는 아이노드의 내용을 지운다.
   6) dump 파일명 출력파일명: 아이노드의 내용을 파일로 덤프한다.
   7) expand_dir 파일명: 디렉토리를 확장한다.
   8) find_free_block 목표: 목표로부터 시작해서 첫번째 블록을 찾아 할당한다.
   9) find_free_inode 디렉토리 : 빈 아이노드를 찾아서 할당한다.
   10) freeb 블록: 블록을 할당되지 않은 것으로 표시한다.
   11) freei 파일명: 파일명에 해당하는 아이노드를 해제한다.
   12) help :debugfs가 인식하는 명령어 목록을 출력한다.
   13) icheck 블록: 블록의 아이노드 변환을 수행한다.
   14) iname 아이노드: 아이노드에 해당하는 파일명을 출력한다.(현재 구현되지 않는다. ncheck를
                      참고할 것)
   15) initialize 장치명: 장치명에 ext2 파일시스템을 생성
   16) kill_file 파일명: 파일을 삭제하고 사용한 블록을 해제한다.
   17) ln 원본파일 링크파일: 링크를 만든다.
   18) ls : 디렉토리나 파일의 목록을 보여준다.
   19) modify_inode : 파일명에 해당하는 아이노드의 내용을 수정한다.
   20) mknod : 특별한 장치파일을 생성한다.
   21) ncheck 아이노드: 아이노드의 이름을 변환한다.
   22) open 디바이스명 : 해당 디바이스의 파일시스템을 연다.
   23) pwd : 현재 작업디렉토리를 출력한다.
   24) quit : debugfs를 종료한다.
   25) rm 파일명: 파일을 삭제한다.
   26) rmdir 디렉토리명: 디렉토리를 삭제한다.
   27) setb 블록: 블록을 할당된 것으로 표시한다.
   28) seti 파일명: 파일명에 해당하는 아이노드를 사용중이라고 표시한다.
   29) show_super_stats : 슈퍼블록의 내용을 보여준다.
   30) stat 파일명: 파일에 해당하는 아이노드의 내용을 덤프한다.
   31) testb 블록넘버: 블록이 할당되어 있다고 표시되어 있는 확인한다.
   32) testi 파일명: 해당파일에 아이노드가 할당되어 있는지 표시한다.
   33) unlink 파일명 : 파일의 링크를 지운다.
   34) write 원본파일 파일명: 파일명을 갖는 파일 시스템에 파일하나를 만들고 나서 원본파일의
                             내용을 복사한다.
(5) 사용예
   1) [root@www root]# debugfs /dev/hda7
       => /dev/hda7 디바이스를 debugfs로 디버깅한다. 기본 읽기전용이다.
   2) [root@www root]# debugfs -w /dev/hda7
       => /dev/hda7 디바이스를 debugfs로 디버깅하는데 쓰기가 가능하도록 한다.
(6) command 사용예
   1) debugfs:  ls -l
       128258   40750 (2)      0      0    4096  5-Feb-2003 21:56 .
            2   40755 (2)      0      0    4096  5-Feb-2003 16:43 ..
       128259  100644 (1)      0      0   66420 27-Dec-2002 01:13 install.log
       128260  100644 (1)      0      0    4096 27-Dec-2002 00:48 install.log.syslog
        32102   40700 (2)      0      0    4096  5-Feb-2003 11:13 .gconfd
       132579  100644 (1)      0      0      24 11-Jun-2000 06:00 .bash_logout
       132578  100644 (1)      0      0    1126 24-Aug-1995 04:02 .Xresources
        48673   40700 (2)      0      0    4096 26-Dec-2002 19:24 .kde
       177385   40700 (2)      0      0    4096  5-Feb-2003 11:13 .gconf
       132580  100644 (1)      0      0     234  6-Jul-2001 03:23 .bash_profile
       132581  100644 (1)      0      0     176 24-Aug-1995 04:04 .bashrc
       132582  100644 (1)      0      0     210 11-Jun-2000 06:09 .cshrc
        => (설명) 총 8개의 필드로 구성되어 있다.
                 1. Inode 번호
                 2. 맨 앞 두 숫자는 inode의 종류를 의미하고 남은 4개의 숫자는 운영체제에서
                   정해진다. 또한 (1)은 파일을, (2)는 디렉토리를 의미한다.
                    2 : 문자디바이스
                    4 : 디렉토리
                    6 : 블록 디바이스
                    10 : 일반 파일
                    12 : 심볼릭 링크
                 3. 소유자의 UID
                 4. 소유그룹의 GID
                 5. 파일이나 디렉토리의 크기(바이트)
                 6. 날짜
                 7. 시간
                 8. 파일이나 디렉토리명
   2) debugfs:  quit
       => debugfs를 종료한다.
(7) 참고 : ext2 파일시스템에서 파일 복구하기 (ext3에서는 안됨)
   1) 가정 : /home/doc.txt 라는 파일이 존재하고 문서를 삭제했다고 가정하자.
   2) 복구절차
    ㄱ. debugfs -w /dev/hda6
        => /dev/hda6 파티션을 디버깅한다. (/home의 파티션을 /dev/hda6이라고 가정)
    ㄴ. debugfs: 프롬프트에서 'lsdel' 이라고 친다.
        debugfs:  lsdel
         Inode  Owner  Mode    Size    Blocks   Time deleted
        48730    500 100644   9232    3/   3 Thu Jan 30 00:02:05 2003
        16346    500 100644   8947    1/   3 Sun Feb  2 16:50:44 2003
         => 그럼 지워진 목록이 나온다. 시간과 파일명을 알고 있어야 한다.
    ㄷ. debugfs에서 'dump <아이노드번호> 경로를_포함한_파일명'을 입력한다.
        debugfs: dump <16436> /home/doc.txt
         => 파일이 복구되었음을 알 수 있다.

3. tune2fs
(1) 설명: ext2파일시스템을 튜닝하고 조정하는 명령어이다.
(2) 사용법
   tune2fs [option] 장치명
(3) option
   -j : ext2파일시스템을 ext3파일시스템으로 바꾼다.
   -c 마운트횟수: ext2파일시스템에서는 어느 정도의 수를 마운트한 뒤에는 자동으로 파일시스템을
                 체크하도록 되어 있다. 이 마운트횟수를 지정하는 옵션이다. 0으로 하면 마운트횟
                 수의 제한이 없다.
   -i 점검시간[d|w|n] : 파일시스템의 점검시간을 설정한다. 접미어를 쓰기않거나 'd'를 사용하면
                       날짜단위로 설정하는 것이고, 'm'은 달, 'w'은 주 단위로 설정한다. 값을
                       0으로하면 시간 점검을 하지 않는다.
(4) 사용예
   1) [root@www root]# tune2fs -j /dev/hda6
       => /dev/hda6을 ext3파일시스템으로 바꾼다.
   2) [root@www root]# tune2fs -c 0 -i 0 -j /dev/hda7
       => /dev/hda7을 마운트횟수제한이 없고 기간제한이 없도록 하고 ext3파일시스템으로 바꾼다.
   3) [root@www root]# tune2fs -L /backup /dev/hda8
       => /dev/hda8에 backup이라는 레이블을 설정한다.
(5) 주의 : 이 명령을 이용하여 파일시스템을 조정할 경우에는 마운트가 되지 상태에서 해야한다.

4. stat
(1) 설명: 파일이나 파일시스템의 상태를 보여준다.
(2) 사용법
   stat [options] 파일이름
(3) 사용예
    [root@www root]# stat /etc/passwd
      File: "/etc/passwd"
      Size: 2386            Blocks: 8          IO Block: 4096   Regular File
    Device: 307h/775d       Inode: 225622      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: Sun Jan 12 19:33:00 2003
    Modify: Mon Jan  6 00:54:42 2003
    Change: Mon Jan  6 00:54:42 2003
      => 파일명, 사이즈, 파일타입, 권한, 접근시간, 수정정보, 변경정보 등을 알 수 있다.

5. mkfs.ext2
(1) 설명: ext2 파일시스템 생성해주는 명령이다.
(2) 사용법
   mkfs.ext2 장치명
(3) 사용예
   mkfs.ext2 /dev/hdb1

6. mkfs.ext3
(1) 설명: ext3파일시스템을 생성해주는 명령이다.
(2) 사용법
   mkfs.ext3 장치명
(3) 사용예
   mkfs.ext3 /dev/hdb1

7. lsattr
(1) 설명: ext2 와 ext3파일시스템은 파일의 권한이외에 속성을 조작할 수 있는 명령을 제공한다.
          이 명령은 해당 파일의 속성을 보여주는 명령이다.
(2) 사용법
   lsattr [option] [파일명]
(3) option
   -R : 서브디렉토리까지 한꺼번에 파일속성을 확인할 수 있다.
   -a : .으로 시작되는 숨김파일과 디렉토리까지 모두 속성을 확인할 수 있다.
   -V : 프로그램의 버전을 확인할 수 있다.
   -v : 파일생성과 관련된 넘버를 확인할 수 있다.
(4) 사용예
   [posein@www posein]$ lsattr /etc/passwd
   -------------- /etc/passwd
    => 현재 이 파일은 어떠한 속성도 설정되어 있지 않다.

8. chattr
(1) 설명: 이 명령은 파일의 속성을 변경시키는 명령이다. 참고로 몇가지 속성은 리눅스커널에서
         지원하지 않을 수도 있다.
(2) 사용법
   chattr [option] mode 파일명
(3) option
   -R : 서브디렉토리까지 그 속성을 변경할 때 지정한다.
   -V : 프로그램의 버전을 출력해준다.
   -v : 지정된 파일에 넘버를 설정할 수 있다.
(4) mode: 기호와 속성으로 이루어진다.
   1) 기호
     + : 해당 속성을 부여한다.
     - : 해당 속성을 해제한다.
     = : 해당 속성만 부여하고 나머지는 해제한다.
   2) 속성
     A : 파일수정시에 atime을 수정하지 않는다.
     a : 해당 파일에 추가만을 할 수 있는 속성이다.
     d : 이 속성이 설정된 파일은 dump로 백업되지 않는다.
     i : 이 속성이 지정되면 해당 파일의 변경, 삭제, 이름변경, 파일추가 및 링크파일도 불가능해
        진다.
     c : 이 속성이 설정되면 커널에 의해 디스크상에 자동적으로 압축된 상태로 저장이 되어 있다.
        파일을 읽을 경우에는 압축을 해제한 상태로 되돌려주며 쓰기시에는 디스크에 저장하기 전에
        파일을 압축한다.
     j : 이 속성을 지정되면 저장할 때 저널링 파일시스템으로 데이타를 저장한다.
     s : 이 속성이 설정된 파일은 파일삭제가 될 경우에 해당블록이 모두 0으로 되어 버리고 디스크
        에 다시 쓰기가 발생한다. 따라서 보안상 안전한 삭제가 이루어진다.
     S : 이 속성이 설정되면 파일이 변경될 경우 디스크동기화가 일어나는 효과를 누릴 수 있다.
     u : 이 속성을 가진 파일이 삭제되면 그 내용이 저장되어 삭제되기 전의 데이터로 복구가 가능
        하다.
(5) 사용예
   1) [root@www root]# chattr +i test.txt
       => test.txt 불변의 속성(i)을 지정하였다.
         (확인) [root@www root]# lsattr test.txt
                ---i---------- test.txt
         (제거) [root@www root]# rm test.txt
                rm: remove write-protected regular file `test.txt'? y
                rm: cannot remove `test.txt': 명령이 허용되지 않음
   2) [root@www root]# chattr +a /var/log/messages
       => /var/log/messages 파일에 삭제는 불가하고 추가만 가능하게 설정하였다.

9. badblocks
(1) 설명: 장치의 배드블록(Bad Block)을 검색한다.
(2) 사용법
   badblocks [option] 장치명
(3) option
   -b 블록사이즈: 블록의 크기를 바이트수로 나타낸다.
   -o 출력파일 : 배드블록의 목록을 지정한 파일에 기록한다.
   -v : 자세히 보여준다.
   -w : 쓰기 모드 테스트를 해서 배드블록을 찾아낸다. 이 옵션을 사용하면 파일시스템의 내용이
       지워지므로 주의를 요한다.
(4) 사용예
   1) [root@www root]# badblocks /dev/fd0H1440
      8
      9
      10
      11
      60
      171
      1438
      1439
        => 배드블록의 목록을 보여준다.
   2) [root@www root]# badblocks -o badblock /dev/fd0H1440
        => 배드블록의 목록을 badblock이라는 파일에 저장한다.

10. mknod
(1) 설명: 블록디바이스나 캐릭터디바이스 같은 특별한 파일을 만들 때 쓰는 명령어이다.
(2) 사용법
   mknod  파일명 type [major minor]
(3) type
   b : block 장치 파일을 생성한다.
   c : character 장치 파일을 생성한다.
   p : FIFO 장치파일을 생성한다.
(4) 사용예
   mknod myfd0 b 2 0
    => myfd0라는 블록디바이스 파일을 생성하고 major 넘버는 2이고 minor넘버는 0이다.
      현재 이 설정은 첫번째 플로피디스크에 대한 설정이다. 즉 /dev/fd0 와 같다. 이 장치파일로
      마운트시킬 수 있다.

11. hdparm
(1) 설명: HDD Parmeters의 약자로 하드디스크의 설정을 보여주거나 설정을 조절할 수 있는 명령어
          이다. 하드디스크의 튜닝하여 최적의 성능을 발휘하도록 할 때 사용한다. 잘못사용하면
          하드디스크의 자료를 잃어버릴 수 있으니 사용에 주의를 요한다.
(2) 사용법
   hdparm [option] 디바이스명
(3) option
   -i : 부팅시에 확인되는 정보를 표시해준다.
   -t : 비교를 목적으로 벤치마크를 위해 장치의 읽는 시간을 잰다.
   -T : 비교를 목적으로 벤치마크를 위해 캐쉬의 읽는 시간을 잰다.
   -d 값 : 직접 메모리 접근(DMA)옵션의 on/off를 지정한다. 1이면 on, 0이면 off
   -c 값 : 32bit 입출력(I/O)기능을 켜거나 끌 수 있다. 0이면 16bit, 1 이면 32bit, 3이면 동기배
          열(Sync Sequence)을 포함한 32bit 입출력을 한다.
   -m 값 : 다중섹터(MultSec)의 값을 지정한다.
   -X 값 : IDE의 전송모드를 설정한다. PIO 모드는 8을 기본으로 해서 더하고, 일반 DMA 모드는 32
          를 기본으로 더하고, UltraDMA인 경우에 는 64를 기본으로 더한다. -i 옵션으로 나온 결과
          를 토대로 지원여부를 확인한다.
   -a 값 : 미리읽기(Read-ahead) 섹터값을 설정한다. 기본값은 8이다.
   -u 값 : unmaskirq 설정유무를 지정한다. 1이면 on, 0이면 off 이다.
(4) 사용예
   1) [root@www root]# hdparm /dev/hda

      /dev/hda:
       multcount    = 16 (on)
       IO_support   =  0 (default 16-bit)
       unmaskirq    =  0 (off)
       using_dma    =  0 (off)
       keepsettings =  0 (off)
       readonly     =  0 (off)
       readahead    =  8 (on)
       geometry     = 2481/255/63, sectors = 39865392, start = 0
        => 하드디스크에 대한 정보를 보여준다.
          (주요설정 설명)
           multcount : 한번에 읽는 섹터의 수
           IO_support : 하드디스크의 동작모드(16/32/32sync)
           unmaskirq : 한 디스크 인터럽트를 처리할 때 다른 인터럽트를 언마스크하도록 허용할 것
                      인지를 지정한다. 요청된 데이터를 디스크가 리턴하기를 기다리는 동안, 시스
                      템이 다른 인터럽트와 관련된 작업을 처리하도록 한다. 이것은 전체적인 반응
                      시간(response time)을 향상시켜 주지만 주의해야 한다.
           using_dma : DMA 기능 사용여부를 표시한다.
           keepsettings : 소프트 리셋(Soft Reset)후의 설정을 유지하도록 한다.
           readonly : 장치가 읽기전용인지 아닌지를 시스템에 알려준다. 일반적으로 CD-ROM에만
                     1로 설정한다.
           readahead    =  8 (on)
           geometry : 하드디스크의 물리적인 정보를 보여준다. 실린더/헤드/섹터
   2) [root@www root]# hdparm -i /dev/hda

      /dev/hda:

       Model=SAMSUNG SV2042H, FwRev=PK100-12, SerialNo=0273J1FNB12589
       Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
       RawCHS=16383/16/63, TrkSize=34902, SectSize=554, ECCbytes=4
       BuffType=DualPortCache, BuffSize=426kB, MaxMultSect=16, MultSect=16
       CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=39865392
       IORDY=yes, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
       PIO modes:  pio0 pio1 pio2 pio3 pio4
       DMA modes:  mdma0 mdma1 mdma2
       UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
       AdvancedPM=no WriteCache=enabled
       Drive conforms to: ATA/ATAPI-4 T13 1153D revision 17:  1 2 3 4 5 6
         => (주요설정 설명)
             MaxMultSect : 하드디스크가 한번에 읽을 수 있는 최대 섹터(Sector)의 수
             MultSect : 현재 한번에 읽는 섹터의 수
             PIO & DMA & UDMA modes : 하드디스크가 지원하는 모드를 나타내고 *로 표시된 것이
                                     현재 사용 하는 모드이다.
             AdvancedPM : APM(Advanced Power Management: 고급전원관리)지원여부를 표시한다.
             WriteCache : 쓰기 캐쉬의 지원여부이다.
   3) [root@www root]# hdparm -t /dev/hda

      /dev/hda:
       Timing buffered disk reads:  64 MB in 18.67 seconds =  3.43 MB/sec
        => 하드디스크의 읽는 시간을 잰다.
   4) [root@www root]# hdparm -Tt /dev/hda

      /dev/hda:
       Timing buffer-cache reads:   128 MB in  0.25 seconds =520.16 MB/sec
       Timing buffered disk reads:  64 MB in 18.54 seconds =  3.45 MB/sec
        => 디스크와 캐쉬의 읽는 시간을 잰다.
   5) hdparm -d 1 /dev/hda
        => DMA를 사용한다.
   6) hdparm -c 1 /dev/hda
        => 32bit I/O로 세팅한다.
   7) hdparm -m 8 /dev/hda
        => MultSec의 값을 8로 설정한다.
   8) hdparm -X34 /dev/hda
        => 일반 DMA모드인 mdma2로 설정한다.
   9) hdparm -X69 /dev/hda
        => UltraDMA모드인 umda5로 설정한다.
   10) hdparm /dev/cdrom
        => CD-ROM드라이브의 정보를 보여준다.
(5) 관련파일 : /etc/sysconfig/harddisks
    hdparm 명령의 실행시 설정과 관련된 파일이다.

12. e2label
(1) 설명: ext2 파일시스템을 사용하는 하드디스크 디바이스에 label을 부여하거나 확인하는 명령어
          이다.
(2) 사용법
   e2label 장치명 [새로운 label]
(3) 사용예
   1) [root@linux245 root]# e2label /dev/hda5
      /home
       => /dev/hda5에 부여된 레이블을 확인한다.
   2) [root@linux245 root]# e2label /dev/hda8 /backup
       => /dev/hda8의 레이블을 backup로 부여한다.
(4) 참고: 레이블을 부여하면 /etc/fstab파일에서 디바이스명 대신에 레이블을 사용해서 등록할 수
          있다.
    예) LABEL=/backup           /backup                 ext3    defaults        0 0

13. mkinitrd
(1) 설명: make init ramdisk의 약자로 초기화 램디스크 이미지를 만들어주는 명령이다. 보통 부팅
          할 때 필요한 블록 디바이스 모듈을 이미지로 만들때 사용하는 명령이다.
(2) 사용법
   mkinitrd 이미지파일명 커널버전
(3) 사용예
   mkinitrd /boot/initrd-2.4.21.img 2.4.21

Trackback
Reply

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

 

1. 파일시스템의 개요
(1) 파일시스템이란? : 운영체제가 파티션이나 디스크에 파일들이 연속되게 하기 위한 구성 방식을
                      말한다.
(2) 리눅스의 파일시스템 : 현재는 ext2과 ext3파일시스템을 사용하며 계층적인 트리 구조형태로
                          되어 있다.
   1) ext3파일시스템
     ㄱ. 초기의 리눅스 파일시스템을 확장한 형태의 파일시스템이다.
     ㄴ. 파일에 들어있는 데이터는 저장 디스크의 데이터 블록에 저장되는 형태로 되어있다.
   2) 리눅스가 현재 지원하는 파일시스템의 종류
     ext2, ext3, minix, msdos, vfat, proc, smb, nfs, iso9660, sysv, hpfs, ufs등

2. mount
(1) 설명: 영어로 mount는'오르다'또는 '어떠한 장비를 설치하다.(탑재하다)'라는 뜻으로
          유닉스에서는 보조기억장치(HDD,FDD,CD-ROM등)를 디렉토리로 만들어 쓰게 해주거나
          파일시스템이 다른 디스크에 접근하기 위한 진입점을 만들어 준다. mount명령은
          /etc/fstab의 설정을 기초로 수행하며 기본적으로는 루트권한자에게만 가능한 명령이다.
(참고1) 파일시스템에 대하여
       DOS, Windows95초기버젼      : FAT16(리눅스에서는 msdos)
       Windows 95 OSR2, Windows 98 : FAT32(리눅스에서는 vfat)
       Windows NT, 2000계열        : ntfs
       Linux                       : ext2, ext3
       CD-ROM                      : iso9660
(2) 사용법
   mount [option] [device] [directory]
    => 옵션없이 mount 명령만 입력하면 현재 마운트된 내용을 보여준다.
(3) option
   -a : /etc/fstab에 명시된 시스템을 마운트할 때 쓰이는 옵션이다.
   -t 파일시스템타입: 파일시스템의 타입을 지정하는 옵션으로 이 옵션을 지정하지 않으면
                    /etc/fstab 파일에서 참조한다. 보통 5가지타입이 있다.
      * 파일시스템타입
       msdos   => 긴 이름을 지원하지 못하는 타입으로 파일이름도 최대 8.3구조이다. MS-DOS, 윈도
                 우95 파일시스템을 마운트할 때 사용한다.
       vfat    => 긴 이름의 디렉토리를 지원하는 타입으로 요즘 윈도우타입이다. 윈도우98 파일시
                스템을 보기 위해선 보통 이 타입으로 설정하면 된다.
       ntfs    => 윈도우 NT, 2000 계열 파일시스템이다.
       ext2,ext3   => 리눅스 파일시스템 타입이다.
       iso9660 => CD-ROM파일시스템이다.
   -o 옵션: 마운트할 때 ro(읽기전용)와 rw(읽기/쓰기)를 지정한다. 또는 시스템을 다시 마운트할때
       사용한다.
     * 옵션
      ro : 읽기전용으로 마운트한다.
      rw : 읽기/쓰기 모드로 마운트한다. 기본값이다.
      remount : 해당 파티션을 다시 마운트한다. 파티션 정보를 바꾸었을 때 사용한다.
      loop : loop 디바이스로 마운트할 때 쓴다. CD 이미지인 iso이미지등을 마운트해서 사용할 때
            쓴다.
      noatime: 노트북에서 사용하는 옵션으로 디스크 접근에 따른 배터리시간을 늘려준다.
   --bind : 커널 2.4부터 지원하는 옵션으로 이미 마운트되어 있는 디렉토리를 추가로 다른 디렉토
           리로 마운트시켜준다.
(4) devive
   1) 설명: 장치를 말하며 대부분 유닉스에서는 /dev라는 디렉토리에서 모든 장치를 파일화하여
           관리한다.
   2) 사용예
     fdd    : /dev/fd0, /dev/fd1 등
     CD-ROM : /dev/cdrom
     HDD    : /dev/hda1 등
(5) 관련파일 : /etc/fstab
   1) 설명: 이 파일은 다양한 파일시스템에 관한 정보를 알려주고 있는 파일로서 mount, umount,
           fsck 등의 명령들과 밀접한 관계를 가지고 있다. 파일의 기본 내용은 다음과 같다.
   2) 기본설정
     /dev/sda2               /                       ext2    defaults        1 1
     /dev/cdrom              /mnt/cdrom              iso9660 noauto,owner,ro 0 0
     /dev/fd0                /mnt/floppy             auto    noauto,owner    0 0
     none                    /proc                   proc    defaults        0 0
     none                    /dev/pts                devpts  gid=5,mode=620  0 0
     /dev/sda1               swap                    swap    defaults        0 0
   3) /etc/fstab의 필드설명: 6개의 필드로 구성되어 있고 다음과 같다
    ㄱ. 첫번째필드: 디바이스를 가리킨다. 현재 커널 2.4 버전에서는 LABEL 처리되고 있다.
    ㄴ. 두번째필드: 마운트될 디렉토리를 가리킨다.
    ㄷ. 세번째필드: 파일시스템의 타입을 나타낸다.
    ㄹ. 네번째필드: 마운트될 때의 옵션을 나타낸다.
       auto: -a 옵션을 이용한 마운트를 가능하게 한다.
       noauto: 명시적으로만 마운트가 가능하다. 즉 -a 옵션을 이용한 마운트는 되지 않는다.
       owner: 로컬(Local)에서 일반사용자가 마운트할 수 있는 권한을 할당하는 값이다. user라고
             입력해도 된다. 예를 들면 로컬에서 posein이라는 일반사용자권한으로 'mount
            /mnt/cdrom' 이라고 명령을 내리면 마운트가 된다.
       default: rw, suid, dev, exec, auto, nouser, async가 적용된다.
         rw    : 읽기 및 쓰기 파일시스템으로 마운트된다.(read-write)
         suid  : setuid와 setgid를 사용할 수 있다.
         dev   : 문자장치와 블록장치를 모두 지원한다.
         exec  : 실행파일을 만들 수 있다.
         auto  : mount -a 명령으로 마운트할 수 있다.
         nouser: 슈퍼유저만이 파일시스템을 마운트할 수 있다.
         async : 파일을 비동기적으로 관리할 수 있다.
       usrquota: 사용자의 용량을 제한하는 disk quota를 사용할 때 해당 파티션에 적는다.
       grpquota: 사용자의 용량을 제한하는 disk quota를 그룹별로 사용할 때 해당 파티션에 적는다.
       noquota: 해당파티션에서 사용자들의 quota를 설정하지 않는다.
       nosuid: 해당파티션에서 SUID나 SGID를 설정을 허용하지 않는다.
       nodev: 해당파티션에서 문자나 특별한 장치(디바이스)를 허용하지 않는다.
       noexec: 해당파티션에서 모든 실행 파일들을 실행할 수 없다.
       suid: 해당 파티션에서 SUID나 SGID의 사용을 허가한다.
       ro: 해당파티션을 읽기전용(read-only)으로 설정한다.
       rw: 해당파티션을 읽고 쓰기(read-write)모드로 설정한다.
    ㅁ. 다섯번째필드: 쌓여있을 필요가 있을지 없을지를 정의한다. 1이면 데이터등이 쌓여 있을 것을
                     나타내고, 0이면 버린다.즉 0인 경우에는 dump명령으로 백업되지 않는다.
    ㅂ. 여섯번째필드: fsck 명령의 순서를 정한다. 1을 포함하고 있으면 먼저점검하고 2의 값이면
                   두번째로 점검한다. 0은 체크하지 않는다.

(6) 사용예
   1) 다른 파일시스템 디스크 사용하기
    ㄱ. 설명: 원래는 파일시스템이 다른 디스크는 사용이 불가능하지만 리눅스에서는 mount라는
            명령을 이용하여 다른 파일시스템을 서브디렉토리처럼 이용할 수 있다.
    ㄴ. 사용법
       mount -t 파일시스템 장치명 마운트할_디렉토리
    ㄷ. 사용예
     a. 디스크의 앞부분에 windows98 운영체제가 설치 되어있으면 /win 과 같이 디렉토리를 만든 후
       에 해당디렉토리로 마운트시켜 윈도우영역도 사용가능하다.
        mount -t vfat /dev/hda1 /win
          => /dev/hda1 이라는 파티션이 vfat파일 시스템을 사용하는데 이를 /win라는 디렉토리로
            사용하겠다는 뜻이다.

   2) 플로피디스크 사용하기
    ㄱ. 사용예 윈도우에서 사용하던 플로피디스크 사용하기
       mount -t vfat /dev/fd0 /mnt/floppy
        => 플로피디스크를 /mnt/floppy라는 디렉토리로 쓴다.
    ㄴ. 참고
     a. 설명: 리눅스에서는  mount를 위해 기본적으로 플로피디스크와 CD-ROM 디렉토리를
             /mnt/floppy 및 /mnt/cdrom으로 제공한다. 그러나, 꼭 이 디렉토리를 사용하지 않아도
             된다. 디렉토리생성후 그 디렉토리로 마운트하면 된다.
     b. 사용예 : /fdd라는 디렉토리로 플로피디스크 마운트하기
       mkdir /fdd
         => 마운트하고자할 디렉토리를 생성한다.
       mount -t vfat /dev/fd0 /fdd
         => 해당 디렉토리로 마운트한다.
   3) CD-ROM드라이브 사용하기
    ㄱ. 설명: CD-ROM은 iso9660이라는 파일시스템을 가지고 디바이스는 /dev/cdrom이다.
    ㄴ. 사용예
       mount -t iso9660 /dev/cdrom /mnt/cdrom
        => cdrom을 /mnt/cdrom이라는 디렉토리로 사용하라는 명령이다.
   4) 기타 사용예
    ㄱ. mount
         => 현재 설정된 마운트 목록을 보여준다.
    ㄴ. mount -a -t ext2
         => /etc/fstab에 명시된 파일시스템중에서 ext2된 된 파일시스템을 마운트한다.
    ㄷ. mount -t ext3 -o ro /dev/hdb1 /disk
         => 파일시스템이 ext3인 /dev/hdb1 을 /disk로 마운트하되 읽기전용으로 한다.
    ㄹ. mount -o remount /home
         => /home파티션을 다시 마운트한다.
    ㅁ. mount /mnt/cdrom
         => CD-ROM을 /mnt/cdrom디렉토리로 마운트한다.
           원칙적으로는 'mount -t iso9660 /dev/cdrom /mnt/cdrom'이라고 명령을 내려야 한다.
           그러나, mount명령은 /etc/fstab파일의 내용을 참고해서 명령을 수행하므로 위와 같이
           간략하게 해도 마운트된다. 참고로 위와 같은 명령은 로컬에서 일반사용자도 수행가능
           하다.
    ㅂ. mount /mnt/floppy
         => 플로피디스크도 위 예제인 CD-ROM 드라아브와 마찬가지로 형식에 맞추어서 명령을 내려
           야 하지만, /etc/fstab파일에 명기되어 있으므로 간략하게 가능하다.
    ㅅ. mount -L /backup /backup
         => label이 설정되어 있을 경우에 label값으로 마운트한다.
           mount LABEL=/backup /backup 과 같다.
    ㅇ. mount -t iso9660 -o ro,loop /iso/redhat.iso /mnt/image
         => redhat.iso라는 CD이미지를 읽기전용이고 루프백장치로 /mnt/image라는 디렉토리로 마운
           트한다.
    ㅈ. mount --bind /backup /backup2
         => 이미 마운트되어 있는 /backup 이라는 파티션을 추가로 /backup2로 마운트한다. 물론
           /backup2 라는 디렉토리는 생성되어 있어야 한다.

3. umount

(1) 설명: 마운트된 디렉토리를 제거해주는 명령이다. 이 명령을 사용하지 않으면 cdrom안에 들어있
          는 디스크를 꺼낼수 없다.
(2) 사용법
   umount 언마운트될_디렉토리
(3) 사용예
   1) umount /mnt/cdrom
       => /mnt/cdrom으로 마운트된 파일시스템을 언마운트하는 것이다. 마운트 포인트에 관한 것은
         /etc/fstab파일에 명기되어 있다. umount하기전에 mount명령을 내려 마운트된 파일시스템을
         확인해야 한다.
   2) umount -a -t iso9660
       => 파일시스템이 iso9660으로 마운트된 것들을 모두 언마운트한다.

4. df(disk free)
(1) 설명: 현재 마운트된 디스크의 남은 공간 등 사용정도를 보여주며 파티션들에 대한 정보도 보여
          준다.
(2) 사용법
   df [option] [file or filesystem]
(3) option
   -h : 용량의 단위 표시(KB,MB,GB)를 해준다.(human readable)
   -k : kilobyte단위로 보여준다. 기본값이다.
   -m : megabyte단위로 보여준다.
   -T : 각 파티션에 대한 파일시스템의 유형을 보여준다.
   -i : inodes의 사용량을 보여준다. 'No space left on device'라는 메시지가 떴을 때 대부분
       inodes를 다 써버린 경우이다.
(4)사용예
   1) [posein@www posein]$ df -h
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/hda5            1004M  108M  896M  11% /
      /dev/hda6             988M  289M  649M  31% /home
      /dev/hda8              15G  7.2G  7.0G  51% /usr
      /dev/hda1              19G   97M   18G   1% /var
   2) [posein@www posein]$ df -T
      Filesystem    Type   1k-blocks      Used Available Use% Mounted on
      /dev/hda5 reiserfs     1028092    110172    917920  11% /
      /dev/hda6     ext2     1011928    295928    664596  31% /home
      /dev/hda8     ext2    15757248   7525416   7431396  51% /usr
      /dev/hda1     ext2    20161172     98392  19038640   1% /var
   3) [posein@www posein]$ df -i
      Filesystem            Inodes   IUsed   IFree IUse% Mounted on
      /dev/hda10            384768   17277  367491    5% /
      /dev/hda5               6024      14    6010    1% /boot
      /dev/hda6             513024    3243  509781    1% /home
      /dev/hda12            128768      11  128757    1% /opt
      /dev/hda13             72288      11   72277    1% /secu
      /dev/hda11            256512      29  256483    1% /tmp
      /dev/hda7             384768   82743  302025   22% /usr
      /dev/hda9             384768   21873  362895    6% /usr/local
      /dev/hda8             384768    2210  382558    1% /var

5. du(disk usage)
(1) 설명 : 파일들이 디스크에서 차지하고 있는 크기들을 보여준다.
(2) 사용법
   du [option] [filename(s)] => 파일 이름을 지정해 주지 않으면 현재 디렉토리에 대한 정보를
                               보여준다.
(3) option
   -a : 디렉토리에 존재하는 모든 파일에 대해 각각의 크기를 보여준다.
   -s : 파일들의 전체 크기를 합한 값만 보여준다.
   -r : System V계열에서만 쓰이는 옵션으로 서브디렉토리까지 계산한다. BSD계열에서는 자동적으
      로 계산한다.
   -h : 용량을 보기 좋게(KB, MB, GB단위로) 표시해 준다.(human readable)
   -b : 결과값을 Byte단위로 출력한다.
   -k : 결과값을 KB단위로 출력한다.
   -m : 결과값을 MB단위로 출력한다.
(4) 사용예
   1) [posein@www posein]$ du -sh
      9.9M    .
        => 현재 디렉토리의 총 용량을 나타낸다.
   2) [posein@www posein]$ du -h
        => 현재 디렉토리의 모든 파일과 디렉토리에 대해 크기를 단위(KB,MB 등)을 붙여 보여준다.
(참고4) 유닉스에서 파일의 크기 정보를 출력해주는 수치는 byte단위가 아니고 block단위이다.
        유닉스에서는 디스크상의 데이터들을 512byte, 1024byte등을 1block으로 관리한다. 이것은
        도스의 cluster와 비슷한 개념이다. 리눅스에서는 기본값으로 kilobyte단위로 출력한다.

6. fdformat
(1) 설명 : 플로피디스켓을 low-level format하는 프로그램이다. 참고로 플로피디스크를 마운트할
           필요가 없다.
(2) 사용법
    fdformat [option] 장치명
(3) option
   -n : 포맷한 후에 디스크 표면 검사를 하지 않는다.
(4) 사용예
   1) fdformat /dev/fd0H1440
       => 플로피디스켓을 1.44MB 포맷으로 포맷한다. 기본적으로 첫번째플로피가 3.5" 드라이브이므
         로 'H1440'을 생략하고, 'fdformat /dev/fd0'라고 해도 사용가능하다. 그러나 자동검색하지
         못하면 지정해야 한다.
   2) fdformat -n /dev/fd0H1440
       => 디스크 표면검사를 통한 배드블록 조사를 하지 않는다.

7. mkfs
(1) 설명 : make filesystem의 약자로 새로운 파일시스템을 만드는 명령이다. 루트권한자만 사용
           가능하다 참고로 플로피디스크를 마운트할 필요없이 수행가능하다.
(2) 사용법
   mkfs -t 파일시스템타입 [option] 디바이스
(3) option
   -c : bad block을 체크한 후 파일시스템을 구축한다.
   -v : 결과를 상세히 출력한다.
   -l 파일명: badblocks 라는 명령을 이용하여 작성된 '파일명'으로부터 bad blocks 리스트를 읽어
            들인다
(4) 사용예
   1) mkfs -t ext2 /dev/hdb1
       => /dev/hdb1 을 리눅스파일시스템인 ext2로 만든다.
   2) mkfs -t ext2 /dev/fd0
       => 플로피디스크의 파일시스템을 리눅스파일시스템인 ext2로 만든다.
   3) mkfs -t ext2 -c /dev/fd0H1440
       => 플로피디스크의 bad block을 체크하면서 파일시스템을 만든다.

8. mke2fs
(1) 설명: ext2 파일시스템으로 만드는 명령이다. mkfs와 사용법이 유사하다.
(2) 사용법
   mke2fs [option] 디바이스
(3) option
   -j : ext3 파일시스템인 저널링(journaling) 파일시스템으로 만든다.
(4) 사용예
   1) mke2fs /dev/fd0
       => 플로피디스켓의 파일시스템을 ext2로 만든다.
   2) mke2fs -j /dev/hda6
       => /dev/hda6 파일시스템을 ext3파일시스템으로 만든다.

9. fsck
(1) 설명: 'file system check'의 약자로 리눅스 파일시스템에서 파일을 체크하고 수리하는 명령
          이다. 도스의 chkdsk나 scandisk명령과 유사하다.
(2) 사용법
   fsck [option] 장치명
   fsck [option] 마운트포인트
(3) option
   -a : 명령 수행에 대한 확인 질문 없이 무조건 수행한다.
   -r : 명령 수행에 대한 확인 질문을 한다. 여러개의 fsck가 병렬모드형태로 작동하고 있을 때
       유용하다.
   -A : /etc/fstab에 정의되어 있는 모든 파일 시스템을 체크한다.
   -P : -A옵션을 사용할 때, 루트 파일시스템을 다른 파일시스템과 병렬로 함께 체크한다.
   -R : -A옵션을 사용할 때, 루트 파일시스템은 체크하지 않고 건너 뛴다.
   -N : 실행을 하지 않고 단지 어떤 것이 실행되어지는 지 보여준다.
   -T : 검사를 시작할 때 제목을 보여주지 않는다.
   -s : fsck동작은 시리얼화한다. 대화형모드에서 여러 파일시스템을 점검할 때 유용하다.
   -V : 실행되는 각 파일시스템용 명령을 포함해 자세한 출력을 수행한다.
   -v : 버전 정보를 보여준다.
   -t fstype : 점검할 파일시스템의 유형을 지정한다. 파일시스템 앞에 no를 붙이면 지정한 파일
              시스템을 제외한 나머지를 검사하고, -A옵션이 설정돼 있는 경우 /etc/fstab에서
              파일시스템 유형이 맞는 것만 검사한다.
(4) 사용예
   1) [root@www /root]# fsck -v
      Parallelizing fsck version 1.19 (13-Jul-2000)
   2) fsck /   => / 마운트포인트의 파일시스템을 체크한다.
   3) fsck /dev/hda2 => /dev/hda2파티션의 파일시스템을 체크한다.
(5) 참고 : fsck명령은 손상된 디렉토리나 파일을 수정할 때 임시로 /lost+found 디렉토리에 연결한
           뒤에 오류를 수정한다. 작업이 끝나면 사라진다.
(6) 종료코드
   0 : 에러없음
   1 : 파일시스템 에러 고쳐짐
   2 : 에러는 수정되었으나 리부팅이 필요함
   4 : 파일시스템 에러를 고치지 않고 그대로 둠
   8 : 실행중 에러 발생
   16 : 사용법과 문법에 대항 에러 발생
   128 : 공유 라이브러리에 대한 에러 발생
(7) 유의점 : fsck를 사용하기 전에 리눅스를 single모드로 부팅해 검사하는 것이 좋다. 또한
             마운트되어 있는 파일시스템을 fsck로 검사하는 것은 좋은 방법이 아니다. 현재 실행중
             인 파일시스템이 손상될 우려가 있으므로 fsck로 검사하기 전에 반드시 마운트되어
             있는 파일시스템은 언마운트한 다음에 검사하도록 한다.

10. e2fsck
(1) 설명 : 리눅스 파일시스템중 ext2(Linux second extend)파일시스템을 체크한다. 현재 리눅스에
          서 ext2를 사용하므로 이 명령을 내려 사용하면 된다. fsck명령을 내려도 자동으로 이 명
          령으로 전환된다. 사용법은 fsck와 유사하다.
(2) 사용법
   e2fsck [option] 장치명
   e2fsck [option] 마운트포인트
(3) option
   -n : 상황이 발생했을 때 물음에 대해 'no'라고 인식하여 처리한다.
   -y : 상황이 발생했을 때 물음에 대해 'yes'라고 인식하여 처리한다.
   -c : BAD Block을 체크한다.
   -f : 깨끗한 파일시스템까지 강제적으로 체크한다.
(4) 사용예
   1) e2fsck -y /dev/hda2
       => /dev/hda2 의 파일시스템을 체크하는데 상황발생시 물음에 대해 모두 'yes'라고 인식하여
         처리한다.
   2) e2fsck /home
       => /home 파티션의 파일시스템을 체크한다

11. dd
(1) 설명: Data Dumper의 약자로 디스크를 이미지형태로 백업하거나 파일의 포맷 즉, 형식을 바꾸는
          명령으로 텍스트파일의 대소문자변환과 부팅디스크를 만들때도 쓰인다.
(2) 사용법
   dd if=입력파일 [conv=conversion type] of=출력파일 [bs=] [count=] [skip=]
(3) option
   if= : 입력파일을 지정
   of= : 출력파일을 지정
   conv= : 변환하는 데이터지정
   bs= : 출력되는 블록사이즈를 지정, 즉 한번에 얼마나 많은 데이터가 변환되는지를 지정
   count= : 변환되는 블록의 수 지정
   skip= : 입력파일의 시작되는 블록지정. 데이터를 나누어 이미지를 뜰 때 사용
(4) 사용예
   1) dd if=/tmp/aaa.txt conv=ucase of=/tmp/bbb.txt
     => /tmp/aaa.txt 파일에서 모든 글자를 대문자로 바꾼뒤 /tmp/bbb.txt파일로 저장하라.
   2) dd if=ccc.txt conv=lcase of=ddd.txt
     => 현재디렉토리의 ccc.txt 파일의 모든 글자를 소문자로 바꾼뒤 현재디렉토리의 ddd.txt파일로
     저장하라. 참고로 대소문자 변환시 if와 of의 파일명을 같게 해서는 안된다. 같게 하면 파일의
     크기가 0인 파일로 바뀐다.
   3) dd if=/boot/vmlinuz of=/dev/fd0
       => 부팅이미지인 /boot/vmlinuz 를 /dev/fd0 즉, 플로피 디스크에 저장하라는 명령으로 부팅
         디스크를 만드는 것이다
   4) dd if=/mnt/cdrom/images/boot.img of=/dev/fd0
       => 리눅스설치 디스크용 이미지를 플로피디스크에 저장한다. 리눅스 설치디스크가 만들어진
         다.
   5) dd if=/dev/hda of=/dev/hdb
    => /dev/hda 를 그대로 /dev/hdb로 디스크 백업한다.
   6) 4개의 620MB 이미지를 만드는 경우
    dd if=/dev/hda of=/mnt/data/disk1.img bs=1M count=620
    dd if=/dev/hda of=/mnt/data/disk2.img bs=1M count=620 skip=621
    dd if=/dev/hda of=/mnt/data/disk3.img bs=1M count=620 sklp=1241
    dd if=/dev/hda of=/mnt/data/disk4.img bs=1M count=620 skip=1861
     => 특정디스크의 내용을 백업할 때 CD로 구울 수 있는 620MB의 크기로 나눈 것이다. 여기서 of
       에 기록되어 지는 디스크는 다른 디스크(예를 들면 /dev/hdb같은)이어야 한다.
(5) 정리: dd 명령을 사용하는 경우
   1) 텍스트파일의 문자들을 대/소문자로 전환할 때 사용한다.
   2) 부팅디스크 또는 설치디스크를 만들 때 사용한다.
   3) 디스크 단위로 백업할 때 사용한다.

(참고) 리눅스 설치디스크 만들기
(1) 설명: 요즘 나오는 시스템은 바이오스에서 CD-ROM부팅을 지원하지만 CD-ROM부팅이 지원하지
         않는 경우에는 플로피 디스크로 부팅해서 리눅스를 설치해야 한다. 예를 들면 펜티엄초기
         모델중에는 플로피디스크나 하드디스크만 부팅이 되는 시스템이 있다 .이 경우에는 CD-ROM
         으로 제공되는 리눅스를 설치하려면 설치디스크를 만들어 부팅한 후 설치해야 한다.
(2) 방법
   1) 윈도우에서 만들기
    ㄱ. 리눅스 배포판 1번 CD-ROM을 삽입하고 CD-ROM 드라이브로 이동한다. 만약 CD-ROM이 F:인경우
       'F:\>CD DOSUTILS' 명령을 내린다.
    ㄴ. 'F:\DOSUTILS>rawrite' 를 실행시킨다.
    ㄷ. 'Enter disk image source file name :' 이라고 나오면
         '..\images\boot.img' 또는 'F:\images\boot.img'
         라고 입력한다.
    ㄹ. Enter target disk drive : 이라고 나오면
        'a:'
        라고 입력한다.
    ㅁ. Please insert a formatted diskette into drive A: and press -ENTER- : 가 나오면
        플로피 디스크를 삽입하고 [ENTER]키를 누른다.
    ㅂ. 리눅스용 설치디스크가 만들어진다.
   2) 리눅스에서 만들기
    ㄱ.리눅스설치 1번 디스크를 CDROM에 삽입한다.
    ㄴ. mount /mnt/cdrom
         => CD-ROM 을 마운트한다.
    ㄷ. cd /mnt/cdrom/images
         => CD-ROM 의 images 디렉토리로 이동한다.
    ㄹ. dd if=boot.img of=/dev/fd0
         => dd 명령을 이용하여 부팅이미지를 플로피디스켓에 넣는다.
(3) 리눅스설치: 만들어진 설치디스크로 부팅한 후 리눅스설치 CD-ROM으로 설치한다.

12. fdisk
(1) 설명 : 디스크 파티션을 만들고 삭제하는 명령이다.
(2) 사용법
   fdisk [option] 장치명
(3) option
   -l : 파티션 테이블 목록을 보여준다.
   -s partition : 해당파티션의 크기를 보여준다. 역시 단위는 block이다.
   -v : fdisk의 버전을 보여준다.
(4) 사용예
   1) fdisk -l
     => 현재 디스크의 파티션 테이블 목록을 보여준다.
   2) fdisk /dev/hdb
     => Primary의 Slave 디스크 파티션을 설정한다.
   3) [root@www root]# fdisk -s /dev/hda9
      4024251
       => /dev/hda9의 크기를 보여준다.


- 파일시스템 관련 명령어(1) - 실습

1. 리눅스서버를 사용중인데 사용자가 증가하여 /home 파티션의 공간이 부족하게 되었다. 그래서,
   새로운 하드디스크를 서버에 추가로 장착하여 파티션을 하나로 만들어 /home2로 사용하고자 한다.
   어떠한 절차를 거쳐야 하는가? (참고로 새로운 하드디스크는 IDE 타입으로 Primary의 Slave로
   장착하였다.)

   => (방법)
     1. fdisk 를 한다.
       1) 설명: 새로운 하드디스크를 장착하면 가장 먼저 해야 한다. 또한 새로이 장착한 하드디스
               크가 Primary Slave에 위치하므로 리눅스에서 장치명은 /dev/hdb 가 된다.
       2) 사용예
         [root@www root]# fdisk /dev/hdb
           => fdisk를 이용하여 파티션을 하나로 만든다.
     2. mkfs를 이용하여 파일시스템을 생성한다.
       1) 설명: fdisk 후에는 파일시스템을 생성해줘야 한다. 위에서 새로이 장착한 하드디스크를
               하나의 파티션으로 만들었으므로 정확한 장치명은 /dev/hdb1이 된다.
       2) 사용예
         [root@www root]# mkfs -t ext3 /dev/hdb1
           => /dev/hdb1을 ext3 파일시스템으로 만든다. mkfs 대신에 mke2fs, mkfs.ext2, mkfs.ext3
             등의 명령을 이용하여 파일시스템을 만들 수 있다.
     3. mount 한다.
       1) 설명: /home2로 사용하려면 해당디렉토리가 존재해야 하고 그 디렉토리로 마운트하면
               된다.
       2) 사용예
         [root@www root]# mkdir /home2                      // 미리 디렉토리를 생성한다.
         [root@www root]# mount -t ext3 /dev/hdb1 /home2
     4. 참고 : /etc/fstab 이용하기
       1) 설명: 명령어 상태를 mount명령을 내리면 시스템 재부팅시 해당 파티션이 마운트되어 있지
               않는다. 재부팅시에도 언제라도 /home2 파티션을 사용하려면 /etc/fstab파일에 등록
               해야 한다.
       2) 사용예 : /etc/fstab파일에 아래와 같이 등록한다.
         /dev/hdb1          /home2                  ext3    defaults        1 2


2. 리눅스 설치시에 파티션을 swap과 '/ ' 두 개로 나누어서 설치하였다. 현재 /home 디렉토리로
   사용중인 공간을 확인하려면 어떻게 해야 하는가?

    => (방법)
      1. 설명: 일반적으로 파티션별 사용공간과 관련된 명령어는 남은 공간을 보여주는 df 이지만
              실제 리눅스에서 사용하는 파티션을 '/' 하나로만 분할하였기 때문에 df 명령은 사용
              할 수 없고 du 명령을 사용해야 한다.
      2. 방법
        1) 해당디렉토리로 이동한다.
          [root@www root]# cd /home
        2) du -sh 명령을 내린다.
          [root@www home]# du -sh
          985M    .
           => 현재 /home 디렉토리에서 사용중인 공간은 985M 이다.



3. 현재 /home 디렉토리의 공간이 과도하게 사용중이다. 사용자 쿼터(Quota)를 설정하지 않아 각
   사용자들은 현재 서버에 사용공간에 제한이 없다. 특정사용자인 posein 이라는 사용자가 사용중
   인 공간을 확인하고 싶다. 어떻게 해야 하는가?

   => (방법)
     1. 설명: 특정사용자가 사용중인 공간을 확인하는 방법도 사실 위 문제2와 같다. 해당사용자의
             홈디렉토리로 이동후에 du -sh 명령을 내리면 된다.
     2. 방법
       1) posein 이라는 사용자의 홈디렉토리로 이동한다.
         [root@www root]# cd ~posein
       2) du -sh 명령을 내린다.
         [root@www posein]# du -sh
         550M    .



4. posein 이라는 사용자가 공간을 많이 차지하고 있다. 어떤 파일이나 디렉토리가 얼마만큼 차지
   하는지 알고 싶다면 어떻게 해야 하는가?
   => (방법)
     1. 설명: 사용자의 디렉토리로 이동한 뒤에 du -sh * 명령을 내리면 파일이나 디렉토리단위로
            차지하는 공간을 나열해서 보여준다.
     2. 방법
       [root@www posein]# du -sh *

Trackback
Reply

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

 

1. 개요
일반적으로 유닉스에서는 3계층(사용자, 그룹, 기타사용자)에 3가지권한(읽기, 쓰기, 실행)를 부여
한다. 쉬운 방법으로 8진수방법을 많이 이용하는 데 'chmod 755 a.out'라 하면 사용자에게는 모든
권한를 부여하고, 그룹사용자와 기타 사용자는 읽기와 실행권한만 부여한다. 이런 방법이 일반적이
지만 사실은 8진수 4자리를 이용한다.

2. 8진수를 이용한 허가권
(1) 4개의 8진수를 이용한 허가권표
  

8진수의 값 8진수 1번째자리 8진수 2번째자리 8진수 3번째자리 8진수 4번째자리
4 set-UID r r r
2 set-GID w w w
1 sticky-bit x x x
  Special User group Others


(설명) 첫번째 8진수는 특수 허가권 설정에 사용되고, 두번째는 파일의 소유자에 대한 허가권, 세번
       째는 그룹에 대한 허가권, 네번째는 나머지 모든 사용자에 대한 허가권을 설정하는 데 사용된
       다. 보통 사용시에는 첫번째인 특수허가권이 빠지고, 3자리만으로 소유권을 부여하는 데 이런
       경우에는 특수허가권에 대한 값이 0이다.

(2) 허가권 값의 예
   1) 0400 => 파일의 소유자에게 읽기(r)만을 허가함. 400과 동일하다.
   2) 0755 => 파일의 소유자에게는 읽기, 쓰기, 실행권한을 부여하고, 나머지 모든 사용자에게는
          읽기와 실행권한만을 부여함 755와 동일하다.
   3) 4755 => set-UID 허가권이 지정되어 있다는 점을 제외하고는 755와 동일함. set-UID허가권을
             가진 파일을 실행할 경우 프로세스는 이 프로세스를 실행한 사용자의 권한이 아니라,
             파일 소유자와 동등한 권한을 가지게 된다. 따라서, 소유자가 루트이고 파일이 set-UID
             허가권이 있으면 이 파일을 실행시킬 수 있는 사람은 누구라도 슈퍼유저의 권한을 가진
             다. set-UID는 보안상의 허점이 발견될 수 있으니 지정시 주의해야 한다.
   4) 2755 => 755와 비슷하지만 set-GID허가권이 설정되어 있다는 점이 다르다. set-GID 허가권을
             가진 파일이 실행되면 그 파일의 그룹이 가지는 모든 권한을 가지게 된다.
   5) 1755 => 755와 비슷하지만 sticky-bit를 지정한다는 점이 다르다. sticky-bit는 프로그램의
             실행이 종료된 뒤에도 실행코드를 계속해서 메모리에 남겨두어 다음번에 그 프로그램을
             다시 실행시킬 때 상대적으로 실행속도를 빠르게 하는 역할을 하고 공식적으로는 텍스
             트모드저장 허가로 알려져 있다. 실질적으로는 공유모드로 사용된다.

3. 문자열을 이용한 허가권
(1) 문자열을 이용한 허가권표

set-UID(s) read(r) read(r) read(r)
set-GID(s) write(w) write(w) write(w)
sticky-bit(t) excute(x) excute(x) excute(x)
Special User(u) Group(g) Others(o)


   (설명) 허가권을 각각 u(사용자), g(그룹), o(다른 사용자) 또는 a(all=전체)로 허가권을 부여
         한다. 또한 허가권을 r(읽기), w(쓰기), x(실행), s(set-UID 또는 set-GID), 또는
         t(sticky-bit)로 부여한다. 허가권 부여의 기호는 +로, 허가권의 회수는 -를 사용한다.
(2) 사용예
   chmod a+rw * => 모든 사용자에게 현재 디렉토리의 모든파일에 대하여 읽기와 쓰기권한을 부여함.
   chmod a+rx,u+w a.out => a.out이라는 파일에 대해 모든 사람에게 읽기와 쓰기권한을 부여하고,
                          소유자에게는 쓰기권한까지 부여한다.
   chmod u+s aa => aa라는 파일에 set-UID를 지정한다.
   chmod g+s aa => aa라는 파일에 set-GID를 지정한다.

4. Set-Bit 이해하기
(1) Set-Bit : Set-Bit란 기본권한이외에 특수한 목적을 위해 부여되는 특수권한이다. Set-Bit에는
              Set-UID, Set-GID, Sticky Bit이 있으며, 이러한 권한은 시스템운영에 꼭 필요하지만
              보안상의 위험을 초래할 수 있으므로 정확한 이해가 필요하다.

(참고1) 'ls -l'을 이용한 파일의 종류확인하기
  보통 'ls -l' 명령을 내리면 다음과 같이 나온다.
   -rwxrw-r--    1 posein   posein         95  4월  9 15:13 a.out
  파일의 권한과 관련된 부분이 -rwxrw-r--이다. 처음 -부분이 파일의 종류를 나타내는 것이다.
    - : 일반파일
    d : 디렉토리
    l : 링크파일
    b : 블럭디바이스(디스크 드라이버)
    c : 캐릭터 디바이스(입출력 관련 특수 파일)
    P : 네임드 파이프
    s : 소켓

(2) set-UID가 부여된 파일을 살펴보기
   1) 설명: Set-UID가 설정된 파일로는 passwd명령이 있다. 이 명령은 보통 패스워드를 변경하는
          명령이다. 이 명령어를 가지고 Set-bit에 대해 알아보자.
   2) 예
    ㄱ. [root@www bin]# cd /usr/bin 한다.
    ㄴ. [root@www bin]# ls -l passwd
        -r-s--x--x    1 root     root        15368  5월 29  2002 passwd
         => 살펴보면 사용자권한의 x자리에 s라는 글자가 있다. 이것이 set-UID가 부여된 것이다.
           이 명령의 소유자는 root이다. 따라서 이 명령어를 실행시킬 수 있는 사람은 root와 동일
          하게 passwd 명령을 이용하는 것이다.
   3) Set-Bit가 필요한 이유
     일반사용자가 자기 자신의 패스워드를 변경한다고 가정하자. 이 경우에 passwd명령으로 패스워
    드변경한 후에 실제적인 기록은 /etc/shadow파일에 변경되어야 한다. 그러나, 일반사용자는
    /etc/shadow파일에 쓰기권한은 물론 읽기권한조차 부여가 되어있지 않다. 이런 경우에는 passwd
    명령을 이용한 순간에는 root권한으로 /etc/shadow라는 파일에 기록할 필요가 있게 된다. 이러한
    이유로 Set-Bit가 필요하다. 보안상 Set-Bit는 위험하지만 꼭 필요한 요소이다.

(3)set-UID를 이용해보기
   1) 설명: Set-Bit가 이해되지 않는다면 와우리눅스 6.2(커널 2.2버전)을 설치하여 다음을 테스트
           해보면 쉽게 이해되리라 생각된다. 현재 리눅스(커널 2.4버전이상)에서는 되지 않는다.
           예전에 백도어(Back Door)로 많이 이용되면 방법이다.
   2) 방법 : 보통 리눅스에서는 bash를 사용한다. 이 bash파일을 이용하여 set-UID를 이용해보자.
    ㄱ. bash의 실행파일이 /bin/bash이므로, /bin디렉토리로 이동하자.
        [posein@house posein]$ cd /bin
    ㄴ. 'ls -l bash' 해본다.
       [posein@house /bin]$ ls -l bash
       -rwxr-xr-x    1 root     root       377960  5월 19  2000 bash*
        => 이 파일의 특성을 살펴보면 소유자는 root이고 실행파일로서 실행권한은 모든 계층에서
          사용가능하게 되어 있다. 다른 것이 있다면 속성은 변경권한은 루트에게만 있다는 것이다.
          이 파일은 모든 사용자들이 로그인과 동시에 사용된다.
    ㄷ. bash파일에 set-UID를 부여해본다. 일단 속성의 변경은 파일의 소유자인 root에게 있으므로
       루트권한을 획득했다고 가정한다.
      [root@house /bin]# chmod u+s bash
    ㄹ. bash파일의 속성을 확인해보자.
       [root@house /bin]# ls -l bash
       -rwsr-xr-x    1 root     root       377960  5월 19  2000 bash*
        => 속성이 바뀌었음을 알 수 있다.
    ㅁ. 이 파일은 모든 사용자들이 사용하는 파일이므로 일반사용자로 로그인해보자. 로그인해보면
       무엇인가 다름을 느낄 수 있다.
       [posein@house posein]#
        => 프롬프트부터 다르다. 리눅스에서 '$'는 일반사용자를 나타내고 '#'은 루트권한자임을
          나타낸다. 리눅스에서 현재접속한 일반사용자는 루트권한자로 처리한다는 것을 알 수 있
          다.
    ㅂ. 명령어를 이용하여 사용자 확인해보자. 먼저, who명령어를 이용해보자.
       [posein@house posein]# who
       posein   pts/0    Jun 25 01:20
        => 접속한 사람은 'posein'이라는 것을 알 수 있다.
    ㅅ. 또 다른 명령인 whoami명령을 이용해보자.
       [posein@house posein]# whoami
       root
        => 루트로 인식함을 알 수 있다.
    ㅇ. 루트의 권한인지 사용해보자.
      파일의 소유자가 루트이고 루트만이 변경가능한 파일인 /etc/inittab파일을 이용하여 테스트해
      보도록 하자.
      [posein@house posein]# vi /etc/inittab
       => 편집을 해보도록 한다. 편집을 시작하자 마자 ex모드 명령줄에서 'Warning: Changing a
         readonly file'라고 경고메시지가 뜬다. 즉 일단은 일반사용자로 인식했기 때문에 읽기전용
         이라는 메시지가 뜬다. 그러나, 무시하고 ':wq!'를 이용하여 저장해보자. 저장이 되서 변경
         됨을 알 수 있다. 즉 루트권한자로서 실행이 가능함을 알 수 있다. 참고로 뛰어난 해커들은
         이런식으로 원본파일에 set-UID속성을 부여하지 않는다. 일단 루트권한을 획득한 뒤 원본파
         일을 다른 이름으로 바꿔서 복사시킨 후에 set-UID를 걸어서 백도어로 사용한다.

(4) sticky bit에 대하여
   1) 설명: sticky bit는 /tmp디렉토리에서 사용되고 있다. 이 디렉토리를 살펴본다.
   2) 방법
    ㄱ. 일단 최상위 디렉토리로 이동해보자.
       [posein@house posein]$ cd /
    ㄴ. 속성의 확인
       [posein@house /]$ ls -l
       drwxrwxrwt    9 root     root         4096  6월 25 01:45 tmp/
        => /tmp디렉토리에 sticky 비트가 설정되어 있음을 알 수 있다. 이 디렉토리에서는 모든
          사용자가 파일이나 디렉토리를 만들고 지울 수 있다. 그러나, 해당파일이나 디렉토리를
          지울 수 있는 것은 그 파일이나 디렉토리의 소유자만 가능한다. 즉 절대로 다른 사람들이
          만든 파일이나 디렉토리등은 지울 수 없다. 그래서 sticky bit를 공유모드라고 한다.

5. umask
(1) 설명 : 새로운 파일 생성시 기본 허가권을 설정하는 명령이다.
(2) 사용법
   umask [option] [값]
(3) option
   -S : umask의 값을 문자로 표기한다.
(4) 사용예
   1) 현재 설정된 umask의 값을 보여준다.
    [posein@house posein]$ umask
    002
   2) 설정된 umask의 값을 문자로 보여줌.
    [posein@house posein]$ umask -S
    u=rwx,g=rwx,o=rx
   3) umask의 값을 바꾼다.
    [posein@house posein]$ umask 022
     => umask의 값을 022로 바꾼다.
   4) 문자값을 이용한 umask의 값 설정
    [posein@house posein]$ umask u=rwx,g=rw,o=rw
  (5) umask값과 기본 허가권과의 관계
    기본적으로 새 파일이 생성되면 보통 0666이라는 허가권을 요청한다. 즉, 모든 사용자에게 실행
   권한을 제외한 모든 권한이 부여된다. 그 후 umask의 설정상태를 참조하여 부여해야 될 권한은
   부여하게 되고 부여하지 않아야 될 권한은 부여하지 않는다. 만약에 umask값이 002라면
   기본값인 0666을 이진수화하면 000 110 110 110 이 되고,
   umask인 002를 이진수화하면  000 000 010이 된다. 여기서 umask값은 역수화 된다. 따라서
   111 111 101이 된다. 기본값과 umask값을 AND연산을 한다.
   000 110 110 110 + 000 111 111 101 = 000 110 110 100 이 된다.
   따라서 생성되는 기본 권한은 'rw-rw-r--'이다.
   (실습) umask값과 기본 권한
     1. 현재 umask값을 확인해 보기
       [posein@house posein]$ umask
       002
     2. 빈 파일을 생성하는 touch 명령으로 파일을 생성한다.
       [posein@house posein]$ touch aaa
     3. 기본 허가권을 확인해본다.
       [posein@house posein]$ ls -l
       -rw-rw-r--    1 posein   posein          0  5월  2 21:24 aaa
       => 기본 권한이 rw-rw-r--인 것을 알 수 있다.
     4. umask값을 변경한다. 022로 변경
       [posein@house posein]$ umask 022
     5. 빈 파일을 생성한다.
       [posein@house posein]$ touch bbb
     6. 기본 허가권을 확인해 본다.
       [posein@house posein]$ ls -l
       -rw-r--r--    1 posein   posein          0  5월  2 23:07 bbb
       => 기본 허가권이 rw-r--r-- 로 바뀐다.

Trackback
Reply

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

 

1. chmod(change mode)
(1) 설명: 모든 파일에는 접근할 수 있는 허가권이 있는데 이 허가권을 설정하거나 해제하는 명령어
         이다.
(2) 사용법
    chmod [option] mode file(s)
(3) option
    -R : 서브 디렉토리까지 설정된다.
(4) mode
   1) 문자모드(symbolic mode) : 특정문자를 사용하여 허가권을 설정하는 방법으로 유연성있게 권한
                               을 설정할 수 있다.
    ㄱ. 기본권한과 문자의 의미

기본권한 file인 경우 directory인 경우
r 읽기 파일의 내용을 볼 수 있는 권한 디렉토리안의 파일을 볼 수 있는 권한
w 쓰기 파일의 내용을 수정할 수 있는 권한 디렉토리안의 파일을 삭제/생성할 수 있는 권한
x 실행 실행파일을 실행시킬수 있는 권한 디렉토리안으로 접근할 수 있는 권한


    ㄴ. 사용자와 문자
      u :  파일의 소유자(user)
      g : 그룹(group)
      o : 다른 사용자(other)
      a  : 전체(all) - 소유자, 그룹, 다른 사용자 전부를 가리킨다.
    ㄷ. 권한지정문자
      + : 설정
      - : 해제
      = : 지정된 계층에서 해당권한만 설정하고 나머지는 해제시킴
   2) 숫자모드(numberic mode) : 숫자(4,2,1,0)를 조합하여 8진수형태의 값을 만들어 권한을 설정한
                               다. 기본계층이 3계층이므로 숫자 3자리(예를 들면 755)로 부여하는
                               데 앞에서부터 각각 소유자(100의 자리), 소유 그룹(10의 자리),
                               다른사용자(1의 자리)의 접근 권한을 나타낸다.
    ㄱ. 숫자와 권한
      4 : 읽기
      2 : 쓰기
      1 : 실행
      0 : 어떠한 권한도 부여하지 않음
    ㄴ. 중복권한: 두가지 이상의 권한을 같이 설정하려면 각 숫자를 더한 값을 지정하면 된다.
       예) 7 : 읽기, 쓰기, 실행
           6 : 읽기, 쓰기
           5 : 읽기, 실행
(5) 사용예
   1) chmod ugo+rwx aa.txt : 모든 사용자에게 모든 권한을 준다.
     = chmod a+rwx aa.txt , chmod 777 aa.txt
   2) chmod 755 aa.txt
     => aa.txt라는 파일에 대해 소유자는 읽기, 쓰기, 실행이 가능하고 그룹과 기타 사용자는
       읽기와 실행만 가능하게 설정된다.
   3) chmod o-r,o-w *
     = chmod o-rw *
      => 현재 디렉토리 안의 모든 파일을 다른 사용자가 읽지도 쓰지도 못하게 만든다.
   4) chmod a+r *.txt
     => *.txt로 끝나는 모든 파일을 모든 사용자가 읽을 수 있게 만든다.
   5) chmod o=r /etc/lilo.conf
     => /etc/lilo.conf라는 파일을 다른 사용자가 읽을 수만 있게 만든다.
   6) chmod -R go-rwx *
     => 현재 디렉토리의 모든 파일과 서브 디렉토리의 모든 파일에 대해 그룹과 다른 사용자가 아무
       것도 할 수 없게 만든다.

2. chown(change owner)
(1) 설명: 파일의 소유자를 바꾼다. 이 명령은 누구나 실행가능하지만, root가 아닌 경우에는
           제약이 많다.
(2) 사용법
   chown [option] newowner file(s)
    => 파일 이름 대신 디렉토리 이름도 가능. newowner에서 사용자의 ID나 사용자 번호를 쓸 수
      있다.
(3) option
   -R : 서브 디렉토리까지 바꾼다.
(4) 사용예
   chown -R posein * => 현재 디렉토리의 모든 파일과 서브 디렉토리의 모든 파일의 소유자를
                       posein로 바꾼다.
(5) 참고 : chown명령을 통해서 파일의 소유권과 그룹의 소유권을 동시에 변경할 수 있다. 이를
          위해서는 다음과 같이 동시에 써준다.
  예) chown medic.terran /home/prehee/data => /home/prehee/data의 파일 소유권은 medic에, 그룹
                                             소유권은 terran이 된다.
      chown 500.500 * => 현재 디렉토리의 모든 파일의 소유자는 UID가 500인 사용자에게, 소유그룹
                        은 500인 그룹으로 넘긴다.

3. chgrp(change group)
(1) 설명: 파일의 소유 그룹을 바꾼다. root가 아니면 거의 쓸모가 없다.
(2) 사용법
   chgrp [option] newgroup file(s)
    => 사용법은 option은 chown과 비슷하다.
(3) 옵션
  -R : 한 디렉토리내의 모든 파일이나 하위 디렉토리의 그룹소유권을 바꾼다.
(4) 사용예
   chgrp eles logo.gif => logo.gif라는 파일의 소유그룹을 eles로 바꾼다.

(참고) 사용자 번호
  모든 사용자는 사용자 번호를 가지고 있으며, 파일들의 소유자도 사용자 번호로 기록되어 있다.
  ls 명령등에서 파일의 소유자를 사용자 ID로 보여주는 것은 /etc/passwd 파일 안에 사용자 번호와
  사용자의 ID가 기록되어 있으므로 유닉스가 참조하여 사용자번호 대신에 사용자 ID를 보여주는 것
  이다. 사용자 번호는 처음 계정을 만들때 시스템이 임의로 부여한다. (대부분 사용자번호는 500부
  터 부여가 됨) 어떤 파일의 소유자가 /etc/passwd파일 안에 등록되어 있지 않은 경우 ls명령을 실
  행하여 파일의 소유자를 프린트하게 한다면 사용자 ID대신에 파일의 소유자 번호를 보여주게 된다.
  파일의 소유 그룹도 비슷한 방식으로 관리되며, 그룹번호와 그룹이름에 대한 정보는 /etc/group에
  들어 있다.

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