[리눅스마스터1급 - 1차] 1과목 - 2. 리눅스 시스템의 이해

2024. 6. 13. 10:57·자격증 & 공부/리눅스마스터 1급

CH.2 리눅스 시스템의 이해

1. 리눅스와 하드웨어

1-1. 하드웨어의 이해
1-2. 하드웨어의 선택
  1) RAID(Redundant Array of Independent Disks) 분류

     - RAID : 여러 개의 하드디스크를 하나의 하드디스크처럼 사용하는 것
     - RAID 0 : 스트라이핑 기능(분배 기록) 사용. 빠른 I/O 성능, 고장 대비 능력 X
      - RAID 1 : 두 개 이상의 디스크를 미러링을 통해 하나의 디스크처럼 사용
      - RAID 2 : ECC(에러 검출 기능) 탑재
      - RAID 3 : 하나의 디스크를 에러검출을 위한 패리티 정보 저장용으로 사용하고 나머지 디스크에 데이터를 균등하게 분산 저장
      - RAID 4 : RAID 3 방식과 같지만 블록 단위로 분산 저장
      - RAID 5 : 하나의 디스크에 패리티 정보를 저장하지 않고 분산 저장(회전식 패리티 어레이)
      - RAID 6 : 하나의 패리티 정보를 두 개의 디스크에 분산 저장. 쓰기 능력은 저하될 수 있지만 고장 대비 능력이 매우 높음. 두 개의 오류까지 검출 가능
      - RAID 7 : 실시간 운영체계를 사용
      - RAID 0+1 : 최소 4개 이상의 디스크를 2개씩 스트라이핑으로 묶고(RAID 0) 미러링으로 결합(RAID 1)한 방식
      - RAID 10 : 두 개의 디스크를 미러링으로 묶고(RAID 1) 스트라이핑(RAID 0)으로 결합한 방식

 

  2) SCSI(Small Computer System Interface)
      - 주변기기를 연결하기 위한 표준 인터페이스
      - 고성능이고 호환성 확장성이 뛰어남


2.리눅스의 구조

  * 리눅스 시스템의 root 패스워드를 잊어버린 상태로 GRUB 환경 설정 파일에서 커널 인자값을 변경하려고 함

    -> 사용하려는 인자값 : ro rhgb quiet LAND=ko KR.UTF-8

          : ro – read only(수정 불가), rhgb(gui 환경 부팅), LAND=ko KR.UTF-8(한국어 사용)

     -> 변경 인자값 : rw init=/bin/sh

          : rw – read write(수정 가능), init=/bin/sh(싱글모드로 부팅)

 

2-1. 부트 매니저
  1) 리눅스 부트로더 LILO/GRUB
      - 부트로더
          : OS가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 OS를 시동하기 위한 프로그램
      - LILO(Linux Loader)
           : 리눅스 배포판의 표준 부트로더
           : 오래된 리눅스용 기본 부트로더
           : 대화형 명령어 인터페이스가 없고 네트워크 부팅 지원하지 않음
      - GRUB(Grand Unified Boot loader)
           : 리눅스, vSTA, DOS 및 기타 OS에서 사용할 수 있는 부트로더
           : 새로운 기본 부트로더
           : 대화형 명령어 인터페이스가 있고 네트워크 부팅 지원함
           : 부트로더에 문제가 있을 시 grub install 명령어를 사용하여 복구

            : default=1 : ‘title’ 항목으로 나타나는 두 번째 운영체제를 의미함

       * grub2–mkconfig

          : GRUB 환경 설정 파일을 수정한 후에 변경된 내용을 저장하기 위해 사용하는 명령

       * grub.conf 파일의 일부

          : default = 1

            timeout = 100

             -> 100초 동안 대기한 후에 메뉴 선택이 없으면 두 번째 항목의 운영체제로 부팅함

 

        * GRUB 모드 3가지

           : [a] : 커널 부분에 파마리터 추가

           : [e] : 메뉴 편집 모드. 일회성으로 설정을 변경해 부팅함

           : [c] : 커멘드 모드. grub.conf 설정이 잘못되어있으면 직접 입력해서 부팅 가능


2-2. 디렉터리 구조 및 디렉터리별 기능
  1) 디렉터리 분류
      - /bin : 기본 명령어들이 저장
      - /sbin : 시스템 관리를 위한 명령어들이 저장
      - /etc : 환경설정에 연관된 파일들과 디렉터리들이 저장
           : /etc/rc.d : 시스템의 부팅과 런 레벨 관련 스크립트들이 저장
           : /etc/inittab : init을 설정하는 파일
           : /etc/issue : 로그인을 위한 프롬프트가 뜨기 전에 출력되는 메시지를 설정하는 파일
           : /etc/issue.net : issue 파일과 기능은 같으나, 원격지 상에서 접속(telnet 등)할 경우에 출력되는 메시지 설정
           : /etc/motd : 로그인 성공 후 쉘이 뜨기 전에 출력되는 메시지를 설정하는 파일
           : /etc/nologin.txt : 사용자의 쉘이 /sbin/nologin으로 지정되어 있을 때, 로그인 거부 메시지를 설정하는 파일
      - /boot : 리눅스 부트에 필요한 부팅 지원 파일들이 저장
      - /mnt : 외부장치를 마운트하기 위해 제공되는 디렉터리
      - /usr : 각종 응용프로그램들이 설치되는 디렉터리
           : /usr/bin : /bin 디렉터리에 없는 다양한 실행파일이 저장
           : /usr/src : 시스템에서 사용하는 각종 프로그램들의 컴파일되지 않은 소스파일들이 저장
      - /lib : 각종 라이브러리들이 저장
      - /dev : 장치 드라이버들이 저장되는 가상 디렉터리
           : /dev/console : 시스템의 콘솔
           : /dev/null : 폐기를 위한 디렉터리. 이 디렉터리로 파일이나 데이터를 보내면 폐기됨
                EX) # find / -perm 4000 2>/dev/null : 명령어 실행 결과에서 오류메시지를 출력하지 않고 폐기
      - /proc : 시스템의 각종 프로세서 프로그램 정보 하드웨어적인 정보들이 저장되는 가상 디렉터리
            : /proc/partitions : 파티션 정보 파일
      - /var : 시스템에서 사용되는 동적인 파일들이 저장
            : /var/log : 프로그램들의 로그 파일들이 저장

 

2-3. 부팅과 셧다운

  * systemctl

     : 서비스들을 관리할 수 있는 유틸리티

      : 현재 관리하고 싶은 서비스들의 상태를 확인할 수 있으며, 시작, 중지 등 다양한 명령을 내릴 수 있음

      : 부팅 시 서비스를 자동으로 실행해주는 등 백그라운드 서비스를 관리할 때 사용

      : 명령어

         - 서비스 시작 : sudo systemctl start ${SERVICE-NAME}

          - 서비스 재시작 : sudo systemctl restart ${SERVICE-NAME}

          - 서비스 중지 : sudo systemctl stop ${SERVICE-NAME}

          - 서비스 상태 확인 : sudo systemctl status ${SERVICE-NAME}

          - 부팅 시 자동시작 활성화 : sudo systemctl enable ${SERVICE-NAME}

          - 부팅 시 자동시작 비활성화 : sudo systemctl disable ${SERVICE-NAME}

          - 서비스 로그 보기 : sudo journalctl ${SERVICE-NAME}

          - systemctl 내에 등록되어 있는 unit 확인 : sudo systemctl list-units

          - systemctl set-default graphical

             : 시스템 부팅 시에 X 윈도 모드로 부팅되도록 설정하는 명령어

 

  * 싱글모드

     : 윈도우의 안전모드와 동일, root 계정으로 로그인 되며, 비밀번호 없이 linux에 진입 가능

     : 보통 root 패스워드 잃어버린 경우 사용

     : 진입 방법

         1) ‘e’ - ‘e’ - ‘single’ or ‘1’ - Enter - ‘b’

         2) ‘a’ - ‘single’ or ‘1’ - Enter


  1) 관련 명령어
      - halt : 시스템 종료. [-f] 옵션으로 강제 종료 가능
      - reboot 시스템 재부팅. [-f] 옵션으로 강제 재부팅 가능
      - shutdown
            : [-h] : 종료 옵션
                EX) # shutdown -h now : 즉시 종료
            : [-r] : 재부팅 옵션
                EX) # shutdown –r +30 : 30분 후에 재부팅
            : [-c] : 명령 취소
            : [-k] : 실제로 종료하지 않고 종료하겠다는 메시지만 사용자들에게 보냄
      - init : 런레벨(RunLevel)을 변경하는 명령어
            EX) # init 0 : 시스템 종료

                   # init 1 : 단일 사용자 모드

                   # init 2 : 다중 사용자 모드, 네트워크 기능 x, XWindow x

                   # init 3 : 다중 사용자 모드, 네트워크 기능 o, XWindow x

                   # init 5 : 다중 사용자 모드, 네트워크 기능 o, XWindow o

                   # init 6 : 시스템 재부팅
      - ntsysv 명령어
            : 부팅할 때 각 런레벨에 따라 자동으로 실행시킬 서비스를 설정하는 명령어

 

  2) 부팅과정
      1. BIOS(Basic Input Output System) 실행, POST(Power On Self Test) 수행
      2. MBR(Master Boot Record) 읽고, 부트로더(LILO/GRUB) 로드
      3. 커널 이미지 로드
      4. 각 장치 드라이버 초기화, 파일 시스템 검사, init 프로세스 호출
      5. /etc/inittab 파일 참조
           - 런레벨 관련 파일
      6. /etc/rc.d/rc.sysinit 스크립트 실행
            - /etc/init/rcS.conf 파일 적용 : 시스템 초기화 관련 설정 파일. rc.sysinit 스크립트를 실행
      7. 해당 런레벨에 맞는 /etc/rc.d/rc#.d/* 스크립트 실행
            - /etc/init/rc.conf 파일 적용 : 런레벨별로 진행되는 내용이 설정된 파일. rc#.d/* 스크립트 실행
      8. /etc/rc.d/rc.local 스크립트 실행
            - 부팅 시 필요한 서비스를 이 스크립트 안에 등록
      9. 로그인 프롬프트 출력

 

2-4. 파일시스템의 이해
  1) 파일시스템 종류

      - ext2

         : 저널링 없음

         : 매직 넘버 : 0xEF53

      - ext3
         : ext2에서 fsck의 단점을 보완하기 위해 저널링 기술을 도입한 파일시스템
         : 저널링(Journaling) 기술 : 데이터를 디스크에 쓰기 전에 로그에 데이터를 남겨 fsck보다 빠르고 안정적인 복구 기
능을 제공하는 기술

              * I-node : 전통적인 유닉스 계열 파일시스템에서 사용하는 일종의 자료구조로 각각의 파일은 하나의 I-node를 할당받아 관리됨
          : 최대 볼륨크기 2TB ~ 16TB / 최대 파일크기 16GB ~ 2TB 지원 / 하위 디렉터리 수 : 32000개
      - ext4
          : ext3의 기능을 향상시킨 파일시스템
          : ext2/ext3 파일시스템과 호환 가능
          : 지연된 할당 : 데이터가 디스크에 쓰여지기 전까지 블록 할당을 지연시켜 향상된 블록 할당이 가능
          : 최대 볼륨크기 1EB / 최대 파일크기 16TB 지원 / 하위 디렉터리 수 : 64000개

          : 매직 넘버 : 0xEF80

               * 매직 넘버 : 마운트하는 소프트웨어에게 ext2 파일 시스템의 슈퍼 블록임을 확인하게 하는 값

          : 하나의 콜에 대해 하나의 블록을 할당하는 대신에 하나의 콜에 많은 블록들을 할당하는 “다중블록 할당자(mballoc)”를 사용함

             -> 많은 오버헤드를 회피함

             -> 성능을 향상시키고 특히 지연된 할당과 extents와 함께 유용함

             -> 디스크 포맷에 영향을 주지 않음

      - XFS
          : 고성능 64비트 저널링 파일 시스템
          : 리눅스 커널 2.4.20 버전에서 커널로 포팅되었음

 

3. X 윈도

3-1. X 윈도의 개념 및 특징

  * X 윈도 시스템

     : 클라이언트-서버 모델을 기반으로 한 그래픽 사용자 인터페이스 시스템

      : 서버는 화면, 키보드 같은 디스플레이 장치를 관리

      : 클라이언트는 사용자가 실행하는 응용 프로그램

 

  * 원격지 X 서버에 응용 프로그램을 전송하기 위해 X 클라이언트에서 진행해야 하는 과정

      -> 환경변수인 DISPLAY의 값을 서버 주소로 변경

      -> 원격지에서 X 클라이언트 응용 프로그램을 실행하려면, 해당 응용 프로그램이 출력을 보낼 X 서버의 위치를 알아야 함

      -> 이를 위해 DISPLAY 환경변수 사용

 

  * DISPLAY 변수

      : X 서버의 호스트 이름과 디스플레이 변수를 포함하는 문자열로 설명되며, 이는 응용 프로그램이 그래픽 출력을 어디로 보낼지를 결정하는데 사용


  1) X 윈도 시스템의 4가지 요소
      - 서버 클라이언트
      - X 프로토콜
          : X 서버와 X 클라이언트의 상호 작용을 위한 메시지 교환에서 메시지 형태와 사용법을 X 프로토콜이라 함
      - Xlib
          : C언어로 작성된 X 클라이언트 라이브러리
          : 저수준 인터페이스이기 때문에 상위 라이브러리인 Xtoolkit을 사용
          : X.org에서는 Xlib 대신 XCB를 사용하고 있음
      - Xtoolkit
          : 상위 라이브러리
          : Qt, GTX 등이 있음

 

  2) XFree86와 X.org
      - 리눅스 유닉스 계열의 X 윈도 시스템 프로젝트
      - XFree86의 라이선스 논란 이후에 X.org 서버가 사용되고 있음
      - 현재 대부분의 리눅스 배포판은 X.org 사용


  3) 관련 명령어
      - startx
           : X 윈도 구동 명령어
               EX) # startx-- :1 : 두 번째 윈도 터미널에 X 윈도를 구동
           : 명령어 오류 발생 시 Xconfigurator을 실행하여 설정

           : 시스템 환경을 초기화시키고 시작하는데 필요한 여러 프로그램을 호출하고 최종적으로 xinit을 호출하는 명령
      - xhost
           : X 윈도 서버의 호스트 접근 제어를 하기 위한 명령어
               EX) # xhost + 192.168.100.100 : 해당 호스트에 대한 접근을 허용


       - xauth

          : X 서버 연결에 사용되는 권한 부여 정보 (.Xauthority 파일의 MIT-MAGIC-COOKIEs 값) 편집/출력 명령어
               EX) # xauth list $DISPLAY : 현재 MIT-MAGIC-COOKIEs 값을 출력
                      # xauth add $DISPLAY .‘쿠키 값’ : .Xauthority 파일에 MIT-MAGIC-COOKIEs 값을 추가


  4) X 윈도 데스크톱 환경 종류
     - KDE(K Desktop Environment)
          : Qt 라이브러리를 사용
      - GNOME(GNU Network Object Model Environment)
           : GTK 라이브러리를 사용
           : GNU 프로젝트의 일부이며 리눅스 계열에서 가장 많이 쓰임

      - GDM(GNOME Display Manager)

            : 윈도잉 시스템 X11과 웨이랜드를 위한 디스플레이 관리자

  5) 디스플레이 매니저
      - X 윈도 상에서 작동하는 프로그램
      - 로그인 창을 통해 사용자 인증을 수행함

      - 런 레벨 5로 부팅할 경우에 사용자 이름과 암호를 요청하고 유효한 값이 입력되면 세션을 시작해주는 역할을 수행함

 

6) X 윈도 소프트웨어
      - Evince(에빈스)
           : 문서 뷰어 프로그램
           : 지원 파일 형식 : PDF, PS, XPS, TIFF 등
      - LibreOffice(리브레 오피스)
           : 오피스 프로그램
           : MS Office 등의 오피스 프로그램과 호환
           : Writer(워드), Calc(스프레드시트/엑셀), Impress(프레젠테이션/파워포인트), Base(DB 관리) 등의 프로그램 지원

      - Cheese Photo Booth(치즈) : 웹캠 프로그램
      - Rhythmbox(리듬박스) : 오디오 플레이어
      - Shotwell(샷웰) : 사진 관리 프로그램

 

4. 쉘

4-1. 쉘의 이해
  1) 쉘 기능 및 종류
     - 쉘(Shell) : 명령어 해석기 커널과 직접적으로 연결되어 해석 결과를 커널로 보냄

                      : 쉘의 특징

                         - bash에서는 명령어 히스토리 기능을 제공함

                          - 표준에러는 쉘에서 숫자값 2로 표기함

                          - 사용자가 로그인 쉘을 변경하려면 chsh 명령을 사용하면 됨

                          - 사용자 로그인 쉘 정보는 /etc/passwd 파일의 7번째 필드에서 확인 가능

                          - bash는 TAB 키를 이용한 자동완성 기능을 제공함

       - 본 쉘(Bourne Shell, sh)
          : 스티븐 본이 개발하였으며, 강력한 명령 프로그래밍 언어 기능을 갖추고 있음
          : 상호 대화형(Interactive) 방식을 사용하지 않음
      - C 쉘 (csh)
           : 빌 조이가 개발하였으며, C 언어와 유사한 언어를 사용
           : 상호 대화형 방식으로 구성
      - 콘 쉘(Korn Shell, ksh)
           : 데이브 콘이 개발하였으며 사용하기 편리하고 기능이 탁월함
           : 명령행 편집 기능을 제공
      - 배시(Bourne Again Shell, bash)
           : 브라이언 폭스가 개발하였으며, sh 호환의 명령어 해석기
           : 처음 로그인 했을 때 디폴트로 주어지는 쉘

 

  2) 특수문자
       - 변수 접근 기호
            EX) $value : 변수 value
                   $SHELL : 환경변수 SHELL. 사용하는 쉘의 위치가 저장되어 있음
       - \ : 이 문자 뒤에 나오는 특수문자는 문자로 처리됨 (escape 처리된다고 말함)
             EX) # echo \$a à $a 문자 출력
                    # echo $a à 변수 a의 값 출력
       - # : 주석 처리 문자
       - * : 0개 이상의 문자가 일치함을 나타내는 치환 문자
             EX) a*e : apple, ace 등의 문자가 포함됨
       - ? : 1개의 문자가 일치함을 나타내는 치환 문자
             EX) a?e : ace, are, age 등의 문자가 포함됨
       - “ (큰따옴표) : `(역따옴표), \ 를 제외한 모든 특수문자를 일반문자로 처리
             EX) # echo “$HOME, $USER” à 환경변수 HOME과 USER의 값을 출력함
                     (실행결과) 예 /home/fedora, fedorauser
       - ‘ (작은따옴표) : 모든 특수문자를 일반문자로 처리
             EX) # echo ‘$HOME, $USER’ à $HOME, $USER을 그대로 출력
       - ` (역따옴표) : 역따옴표로 감싼 문자열을 명령어로 해석
             EX) # echo `pwd` à pwd를 명령어로 해석하여 pwd 명령의 결과를 출력

 

4-2. 쉘 프로그래밍
  1) 프로그래밍에 쓰이는 명령어 정리
      - echo 명령어 : 인수로 지정된 문자열이나 환경변수를 출력
          : [-n] : 개행없이 출력
      - read 명령어 : 인수로 지정된 변수에 값을 입력 받음
      - let / expr 명령어 : 수식 연산을 위한 명령어

 

  2) 특수 변수 / 매개변수 확장
      - $? 마지막으로 실행된 프로세스의 상태 값을 나타냄
      - $0 : 현재 스크립트의 이름
      - $1 : 첫번째 인수
      - 변수 : 문자열의 길이
           EX) # echo ${#value} à value=”333” 이라면 3이 출력
     - 변수 위치 : 위치부터 문자열 출력 (0 부터 시작
            EX) # echo ${value:3} à value=”string” 이라면 ing 출력

     - $# : 인수의 길이

 

  3) 여러가지 함수들
      - [조건문] if 문
          1. 형식 : if [ 조건 ] then
                            명령어
                        elif [ 조건 ] then
                              명령어
                        else
                              명령어
                        fi
            2. 조건문 작성법
              - [ A -lt B ] A가 B보다 작다
               - [ A -eq B ] : A와 B가 같다
               - [ A -qt B ] : A가 B보다 크다
               - [ A -qe B ] : A가 B보다 크거나 같다
               - [ A -le B ] : A가 B보다 작거나 같다
               - [ A -ne B ] : A가 B와 다르다
       - [조건문] case 문
             - 형식 : case 변수 in
                              패턴 1) 명령어 ;;
                              패턴 2 ) 명령어 ;;
                              …
                              *) 명령어 ;;
                         esac
              - “*)” 은 아무 패턴과 일치하지 않을 때 수행되어지는 구간
       - [반복문] for 문
              - 형식 : for 변수 in 값
                          do
                                명령어
                          done
       - [반복문] while 문
             - 형식 : while [ 조건 ]
                           do
                                 명령어
                           done
       - [반복문] until 문
             - 형식 : until [ 조건 ]
                           do
                                 명령어
                           done

 

4-3. 책에 없는 내장 명령어와 기타 내용
  1) 출력 명령어
     - cut 명령어 : 파일에서 필드를 뽑아내서 출력
           : [-f] : 잘라낼 필드를 지정
           : [-d] : 필드를 구분하는 문자를 지정
           : [-c] : 잘라낼 곳의 글자 위치를 지정
                EX) # cut -f 1,3,4 -d : /etc/passwd à /etc/passwd 파일에서 필드를 :로 구분하여 1,3,4번째 필드를 출력
                       # cut –c 1-10 /etc/passwd à /etc/passwd 파일에서 첫 번째 문자부터 10번째 문자까지만 출력
      - more/less 명령어 내용이 많은 파일을 출력할 때 사용하는 명령어
           : [-f] / [SpaceBar] : 한 페이지 뒤로 이동
           : [-b] : 한 페이지 앞으로 이동
      - tail 명령어 : 파일의 내용을 뒷부분부터 출력
           : [-n] : 지정한 줄만큼 출력
      - head 명령어 : 파일의 내용을 앞부분부터 출력
      - cat 명령어 : 파일의 내용을 화면에 출력
           : [-n] : 행 번호를 붙여서 출력
           : [-b] : 행 번호를 붙여서 출력하되 비어있는 행은 제외
           : [-s] : 비어있는 2개 이상의 빈 행은 하나의 행으로 출력
           : [-v] : 탭 문자와 End 문자를 제외한 제어 문자를 ’^’로 출력
           : [-T] : 탭(tab) 문자(‘^’)를 출력
           : [-E] : (End) 행마다 끝에 ‘$’ 문자를 출력
           : [-A] : 모든 제어문자를 출력
           : 옵션 사용 예제

  2) find 명령어
      - 형식 : # find [검색 디렉터리] [옵션]
      - 주요 옵션
            : [-name] : 파일 이름으로 검색
            : [-perm] : 권한 (permission)으로 검색
                  EX) #find / -perm -4000 à 루트 디렉터리 이하에 있는 권한이 최소 4000을 만족하는 파일을 검색
                  EX) # find /etc -perm 777 à /etc 디렉터리 이하에 있는 권한이 777인 파일을 검색
            : [-user] : 사용자 이름으로 검색
            : [-type] : 파일 종류로 검색 (d/f/l/s/…)
            : [-exec] : 검색한 파일 들에 대해 특정 명령을 수행
                  EX) # find / -name “*.c” -exec rm -rf {} \; à 루트 디렉터리 이하에 있는 파일 이름이 .c로 끝나는 파일을 모두 삭제
            : [-ok] : exec와 같은 기능을 수행하지만 명령 실행할 때마다 실행 의사를 물어봄
            : [-mtime] : 파일이 마지막으로 수정된 날짜에 대해 검색을 수행
            : [-atime] : 파일에 마지막으로 접근한 날짜에 대해 검색을 수행
            : [-ctime] : 파일이 마지막으로 권한이 변경된 날짜에 대해 검색을 수행
                   -> +n : n 일 이전 / -n : 오늘부터 n일 전 사이 / n : 정확히 n일 전
                  EX) # find .-name “*.sh” -mtime +1 -> 현재 디렉터리 이하에 있는 파일 이름이 .sh로 끝나는 파일 중 수정
                            시간이 1일 이전인 파일을 검색 오늘이 7월 26일이면 25일 이전에 마지막으로 수정된 파일을 검색

  3) grep 명령어
  - 파일 내의 특정 문자열을 찾을 때 사용하는 명령어
   - 형식 : # grep [옵션] [정규표현식] [검색 대상 파일/디렉터리]
   - 주요 옵션
      : [-n] : 행번호를 같이 출력
       : [-v] : 해당 패턴이 들어가지 않은 행을 출력
       : [-i] : 대소문자 구분 안함
       : [-e] : 정규표현식 사용을 명시
   - 정규표현식
       : ^ : 해당 문자로 시작
           EX) # grep ‘^ap’ test.txt à test.txt 파일 내에서 ap로 시작하는 행을 출력
                 --- apple, api 등이 해당
       : $ : 해당 문자로 끝
            EX) # grep ‘le$’ test.txt à test.txt 파일 내에서 le로 끝나는 행을 출력
                  --- apple, badedale 등이 해당
       : [] : 대괄호 안에 있는 문자 집합 중 하나와 일치
            EX) # grep ‘^[A-Z]’ test.txt à test.txt 파일 내에서 영어 대문자로 시작하는 행을 출력
                  --- Apple, Banana, Car 등이 해당
       : . : 하나의 문자를 의미
            EX) # grep ‘A..le$’ test.txt à test.txt 파일 내에서 A 다음에 두 개의 문자가 나오고 le로 끝나는 문자열로 끝나는 행을 출력
                  --- abc Apple, def Alele 등이 해당
       : * : 선행하는 문자열이 0개 이상 일치
            EX) # grep ‘A..le.* end$’ test.txt à test.txt 파일 내에서 A 다음에 두 개의 문자가 나오고 le로 끝나는
                    문자열 다음에 임의의 문자가 0개 이상 존재하고 하나의 공백 후에 end로 끝나는 행을 출력
                  --- Apple Apple end, Apaleace end 등이 해당

 

4) history 명령어
     - 콘솔에 입력하였던 명령어들의 히스토리를 출력
      - [-c] : 기존 히스토리를 모두 삭제
          EX) history 10 : 최근 10개의 히스토리를 출력
      - 관련 명령
          : !! 바로 전에 사용한 명령을 다시 수행
           : !숫자 : 해당 h istory 번호로 명령을 다시 수행
           : !문자열 : 해당 문자열이 들어간 가장 최근 명령을 다시 수행
                EX) # !find à find가 들어간 가장 최근 명령을 다시 수행

 

5) date 명령어
      - 형식 : # date [옵션] [포맷]
      - 주요 포맷
           : +%Y : 년도를 출력
           : +%m : 월을 출력
           : +%d : 일을 출력
           : +%H : 시를 출력
           : +%M : 분을 출력
              EX) echo `date +%Y%m%d%H%M` à 현재 날짜가 2018년 7월 26일 22시 06분이면 201807262206 출력

 

5. 프로세스

5-1. 프로세스의 개념 및 종류
  1) 프로세스 (process) 정의
     - 프로세스 : 실행 중인 프로그램, 능동적
      - 관련 용어
           : 프로그램(program) : 특정 기능을 수행하기 위한 명령어의 조합
           : 작업(job) : 프로그램과 프로그램 실행에 필요한 입력 데이터
           : 프로세서(processor) 연산을 수행하고 처리하기 위한 자원 (CPU)
           : 프로시저(procedure) : 프로그램의 일부로 공통적으로 사용되는 특정 루틴
           : 스레드(thread) : 프로세스의 일부 특정 데이터만 갖고 있는 가벼운 프로세스
      - 좀비 프로세스(Zombie Process)
           : 프로그램 수행을 마치고 자원도 모두 반납한 상태지만 프로세스는 존재하는 상태
           : 자식 프로세스가 종료되었지만 부모 프로세스가 확인하지 wait(()) 못 하여 남아있는 상태
      - 고아 프로세스(Orphan Process)
            : 자식 프로세스보다 부모 프로세스가 먼저 종료된 상태
            : 이때 자식 프로세스의 부모 프로세스는 init 프로세스가 됨

 

  2) 프로세스 제어 블록 (Process Control Block, PCB)
       - 커널에 등록된 각 프로세스들에 대한 정보를 저장하고 있는 영역
       - 프로세스들은 커널 공간에 자신의 PCB를 하나씩 가짐
       - PCB에 저장되는 정보 : 프로세스 고유 번호, 프로세스 우선 순위, 프로세스 현재 상태, 문맥 저장 영역 등
3) 데몬 프로세스 (Demon)
       - 메모리에 상주하면서 요청이 들어올 때마다 명령을 수행하는 프로세스
       - 백그라운드에서 작동하는 프로세스

       - 유틸리티

         : chkconfig

           - 텍스트 기반의 명령형 프로그램으로 실행레벨에 따른 서비스의 on/off 설정 리스트를 출력하거나 설정함

 
4) 데몬 프로세스 작동 방식
      - standalone 방식
            : 각 데몬 프로세스들이 독립적으로 수행되며 항상 메모리에 상주하는 방식
            : 자주 실행되는 데몬 프로세스에 적용되는 방식
            : /etc/rc.d/init.d 디렉터리에 위치
            : 웹 서비스 데몬 (apached, httpd, mysqld 등), 메일 서비스 데몬(sendmail) 등 NFS 등 서비스 요청이 많은 프로세스들이 standalone 방식으로 작동함
       - (x)inetd 방식 슈퍼 데몬
            : (x)inted 이라는 슈퍼 데몬이 서비스 요청을 받아 해당 데몬을 실행시켜 요청을 처리하는 방식
            : 서비스 속도는 standalone 방식보다는 느리지만, (x)inted 데몬만 메모리에 상주해 있기 때문에 메모리를 많이 필요로 하지 않음
            : /etc/xinetd.d 디렉터리에 위치
            : telnetd, ftpd, pop3d, rsyncd 등의 서비스들이 슈퍼 데몬 방식으로 작동함

 

  * 현재 터미널에서 아파치 웹 서버 데몬을 실행하기 위한 명령

     - /etc/rc.d/init.d/httpd start

     - service httpd start

     - /etc/init.d/httpd start

 

5) 시스템 호출 fork(), exec()
       - 프로세스가 다른 프로세스를 실행하기 위한 시스템 호출 방법
       - fork()
            : 새로운 프로세스를 위한 메모리를 할당 받음
            : 자식 프로세스를 생성하는 시스템 호출 함수
            : 새롭게 생성된 프로세스는 똑같은 코드를 기반으로 실행됨 (복사)
       - exec()
            : 원래의 프로세스를 새로운 프로세스로 대체
            : 새로운 프로세스를 위한 메모리를 할당하지 않고 exec()에 의해 호출된 프로세스만 메모리에 남음

 

5-2. 프로세스 관리의 이해
1) 프로세스 상태
        - 생성 상태 : 프로세스가 처음 생성되는 상태
        - 준비 상태 : 프로세스가 필요한 자원들(기억장치 포함)을 할당 받은 상태에서 프로세서를 할당 받기 위해 기다리고 있는 상태
        - 실행 상태 : 프로세스가 실행되고 있는 상태
        - 대기 상태 : 프로세스가 임의의 자원을 요청한 후 할당 받기 전에 할당 받을 때까지 기다리고 있는 상태
        - 지연 상태 : 프로세스가 기억 장치를 할당 받지 못하고 있는 상태

 

2) 시그널 (Signal) 분류
        - 1 / SIGHUP : 연결 끊기. 프로세스의 설정 파일을 다시 읽는데 사용됨
        - 2 / SIGINT : 인터럽트 발생 [Ctrl + C]

        - 3 / SIGQUIT : 사용자가 터미널에서 종료키를 누를 때 [Ctrl] + [\(역슬래시)]
        - 9 / SIGKILL : 강제 종료
        - 15 / SIGTERM : kill 명령어로 프로세스를 종료할 경우

        - 19 / SIGSTOP : SIGCONT 시그널을 받을 때 사용
        - 20 / SIGTSTP : 프로세스를 백그라운드로 전환하는 경우 정지 [Ctrl + Z]

 

 


해당 블로그를 참고하여 정리했습니다.

https://bangu4.tistory.com/139

 

[Linux Master] 리눅스 마스터 공부법, 기출문제, 요약집

www.ihd.or.kr/main.do KAIT 자격검정 시험접수 정보통신 자격검정 시험 원서등록을 하실 수 있습니다 www.ihd.or.kr 시험에 대한 모든 내용이 홈페이지에 있지만 다시한번 정리하겠습니다. 1급 기준으로 1

bangu4.tistory.com

 

저작자표시 비영리 변경금지 (새창열림)

'자격증 & 공부 > 리눅스마스터 1급' 카테고리의 다른 글

[리눅스마스터1급 - 1차] 2과목 - 4-2. 파일시스템 관리  (1) 2024.06.13
[리눅스마스터1급 - 1차] 2과목 - 4-1. 사용자 관리  (0) 2024.06.13
[리눅스마스터1급 - 1차] 1과목 - 3-2. 네트워크의 이해  (0) 2024.06.13
[리눅스마스터1급 - 1차] 1과목 - 3-1. 네트워크 기초  (0) 2024.06.13
[리눅스마스터1급 - 1차] 1과목 - 1. 리눅스의 개요  (0) 2024.06.13
'자격증 & 공부/리눅스마스터 1급' 카테고리의 다른 글
  • [리눅스마스터1급 - 1차] 2과목 - 4-1. 사용자 관리
  • [리눅스마스터1급 - 1차] 1과목 - 3-2. 네트워크의 이해
  • [리눅스마스터1급 - 1차] 1과목 - 3-1. 네트워크 기초
  • [리눅스마스터1급 - 1차] 1과목 - 1. 리눅스의 개요
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    Flutter
    플러터
    springboot
    시큐리티
    리눅스마스터 1급
    리눅스마스터
    프로그래머스
    DB
    postgresql
    Linux
    CS
    백준
    CS지식
    Java
    Spring Security
    python
    programmers
    Oracle
    backjoon
    리눅스
    pcce 기출문제
    spring
    데이터
    데이터베이스
    baekjoon
    스프링부트
    JPA
    자바
    스프링
    스프링 부트 쇼핑몰 프로젝트 with JPA
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[리눅스마스터1급 - 1차] 1과목 - 2. 리눅스 시스템의 이해
상단으로

티스토리툴바