메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

LPI 레벨 1 속성 과정: 가장 중요한 15개 팁

한빛미디어

|

2001-07-12

|

by HANBIT

10,704

by 제프리 딘(Jeffrey Dean), LPI Linux Certification in a Nutshell의 저자
LPI Linux Certification in a Nutshell
LPI(Linux Professional Institute) 레벨 1(101, 102) 시험을 치르려 한다면, 리눅스에 대한 어느 정도의 경험과 지식이 필요하다. 필자는 최근에 출간한 LPI Linux Certification in a Nutshell에서 LPIC 자격증을 따는데 필요한 포괄적인 정보를 제공했다. 하지만 바로 내일 시험을 치뤄야 하는 사람도 있고, 마지막으로 핵심만 암기해야 하는 사람도 있을 것이다. 이 글은 바로 내일 시험을 보는 사람들을 위한 글로, 시험에 출제되는 빈도수가 가장 높은 부분만을 간략히 다룰 것이다. 1. 패키지 관리 툴 리눅스 배포판은 패키지 관리 툴을 사용하여 소프트웨어를 설치 제거한다. 소프트웨어는 "패키지" 형태로 배포되는데, 이에는 이진 데이터, 문서화, 그리고 다른 정보가 들어 있다. 이 관리 툴은 하나의 패키지가 다른 패키지에 의존하는 패키지 의존성도 처리한다. 그래서 동적으로 링크된 프로그램을 사용하려면 우선 필요한 라이브러리를 설치해야 한다. 리눅스 시스템에서 사용하는 두 가지 주요 패키지 관리 툴은 다음과 같다. 일상 업무에서는 한 가지만을 사용하겠지만, 두 가지를 모두 사용해 보는 것이 102 시험에 합격할 확률이 높다. Dpkg와 rpm에 관해 자세한 사항을 알고 싶으면, 샘플 챕터 4장, Linux Installation and Package Management를 참조하자. 2. 자신에게 맞는 커널과 모듈 구축 커널을 만들려면, 컴파일러, 어셈블러, 링커, 메이크, 커널 소스, 커널 헤더가 필요하다. 이는 /usr/src/linux에서 행해지는 전형적인 커널 컴파일 단계이다.
  1. make oldconfig(이미 셋업되어 있을 때), make config(기본적인 대화식 텍스트 프로그램), make menuconfig(대화식 텍스트 메뉴 프로그램), make xconfig(그래픽 프로그램)로 설정한다. 각각의 메소드는 커널 옵션이 포함된 .config 파일을 만든다.
  2. 필요하면, makefile의 EXTRAVERSION을 수정한다.
  3. make dep으로 의존성(dependencies)을 생성한다.
  4. make clean으로 이전 결과를 지운다.
  5. make bzImage로 커널을 만든다.
  6. make modules로 모듈을 만든다.
  7. make modules_install로 모듈을 설치한다.
  8. /boot에 새로운 이미지를 복사한다.
  9. 새로운 이미지를 위해 /etc/lilo.conf를 업데이트한다.
  10. lilo 명령어로 부트 로더를 업데이트한다.
3. 명령행(Command Line) 명령행으로 작업하는 데는 문제 없어야 한다. 명령 구조를 잘 이해하고 셸 세션이 작동하는 원리를 알아야 한다.
  • 셸은 명령 프롬프트를 제공하고 명령을 해석(interpret)한다.
  • 셸 변수는 셸 프로그램에 접근하는 값을 가진다.
  • PATH는 디렉토리 목록을 포함하는 셸 변수이며, 이 디렉토리에는 실행 가능한 프로그램이 있다.
  • 명령은 배시가 내장되어야 하며, 흔히 PATH에서 발견할 수 있다. PATH에 없을 경우에는 명시적으로 지정해야 수행된다.
  • 셸 변수가 익스포트(export)되면, 환경의 일부가 된다.
명령 입력 명령은 유효한 명령, 캐리지 리턴, 선택적인 옵션과 인자로 구성된다. 대화식 명령에는 셸 스크립트에서 더 자주 사용하는 루프 구조가 있다. 셸 세션은 대화식으로 볼 수 있다. 히스토리, 확장, 편집이 이러한 대화를 더욱 효과적으로 만들어 준다. 명령은 다시 입력할 수 있고, 수정, 편집될 수 있다. 명령 대체(Command substitution)로 명령이 셸 변수가 될 수 있다. 명령어는 디렉토리 계층을 통해 반복적으로 실행하기 위해 -r 이나 -R 옵션을 포함하는 경우가 많다. Find 명령어는 본질적으로 반복적이며, 특정 속성이나 실행 명령이 있는 파일을 검색하며 디렉토리를 따라 내려간다. 다음 프로그램을 위해서는 맨 페이지를 체크하자(이 프로그램은 파일과 표준 입력에서 텍스트를 수정하거나, 실행한다).
  • cut: 하나 이상의 파일에서 선택한 칼럼이나 필드를 없앤다
  • expand: 파일에서 탭을 스페이스로 바꾼다
  • fmt: 행을 채우거나, 뉴라인 문자를 없애서 파일 텍스트의 길이를 맞춘다
  • head: 파일의 처음 몇 줄을 인쇄한다
  • join: 같은 join 필드를 가진 file1과 file2에서 각각 하나씩 입력 라인의 각 쌍에 대한 라인을 보여 준다
  • nl: 출력에 연결된 파일의 라인 수
  • od: 8진, 16진, ASCII 등의 형식으로 된 덤프 파일
  • paste: 하나 이상의 라인을 해당하는 수직 칼럼에 붙임
  • pr: 텍스트 파일을 헤더와 페이지 추가하여, 페이지 수가 매겨진 컬럼 버전으로 바꿔 준다
  • split: infile을 지정된 라인 그룹 번호로 쪼갠다. 그러면 출력은 outfileaa, outfileab 등으로 이어진다
  • tac: 역라인 순으로 표준 출력에 대한 파일을 보여 준다
  • tail: 하나 이상의 파일에서 마지막 몇 문장을 보여 준다
  • tr: 문자열1에서 문자열2에 있는 해당 문자를 매핑함으로써 문자를 변경한다
  • wc: 파일의 문자, 단어, 라인의 수를 보여 준다
  • sed: 모든 유닉스 시스템에 있는 텍스트 필터링 프로그램
4. 파일시스템 관리 파일시스템 생성이란 디스크 파티션을 사용하기 위한 포맷을 의미한다. 리눅스는 대개 ext2 파일시스템을 사용한다. 리눅스 파일시스템은 계층적 구조로 구성되어 있고, 보통 루트 디렉토리, 즉 /로 시작한다. 루트 아래에 디렉토리와 파일이 트리구조를 이룬다. 파일시스템 개체의 정보 식별은 이의 inode에 저장되는데, inode에는 위치, 변경 사항, 보안 정보가 있다. 파일시스템은 정해진 수의 inode와 함께 생성된다. 파일 및 디렉토리 관리 명령 다음 명령은 파일 및 디렉토리 관리에 필수적이다. 맨 페이지를 확인하자.
  • cp: file1을 file2로 복사하거나, 파일을 디렉토리에 복사한다
  • mkdir: 하나 이상의 디렉토리를 생성한다
  • mv: 파일이나 디렉토리를 이동하거나, 이름을 변경한다
  • rm: 파일시스템에서 하나 이상의 파일을 지운다. -r 옵션으로 반복적으로 사용하면, rm 역시 디렉토리를 지울 수 있다
  • rmdir: 비어있는 디렉토리를 지운다
  • touch: 현재 시간을 디폴트로 정해, 접근이나 파일 수정 시간을 바꾼다
디스크 드라이브와 파티션 IDE 디스크는 /dev/hda, /dev/hdb, /dev/hdc, /dev/hdd로 알려져 있다. SCSI 디스크는/dev/sda, /dev/sdb, /dev/sdc 등으로 알려져 있다. 파티션에는 다음과 같은 세 가지 유형이 있다.
  1. 주(Primary): 파일시스템 컨테이너. 하나의 디스크에 하나 이상, 4개까지 있을 수 있다. /dev/hda1, /dev/hda2와 같은 형식으로 1에서 4까지 번호로 구별한다.
  2. 확장(Extended): 주 파티션이 변화한 형태이지만, 파일시스템은 없다. 대신 하나 이상의 논리(logical) 파티션을 가지고 있다. 하나의 확장 파티션만 존재하며, 주 파티션에 대해 4개의 스팟(spot) 중 하나를 취할 수 있다.
  3. 논리(Logical): 확장 파티션 내에 생성된다. 논리 파티션은 1에서 12까지 생성할 수 있다. /dev/hda5, /dev/hda10와 같은 형식으로 5에서 16까지 번호를 붙인다. 하나의 디스크에 파일시스템이 있는 15깨까지의 파티션이 가능하다.
루트 파일시스템과 마운트 포인트 파일시스템의 꼭대기에는 루트 파일시스템이 있다. 다른 파일시스템은 그 아래에 마운트되어 있으며, 고유한 파일시스템을 생성한다. /etc, /lib, /bin, /sbin, /dev는 루트 파일시스템의 일부이다. 다음 명령은 파일시스템을 복구 및 관리할 때 사용한다.
  • fdisk: 명령어 기반 텍스트 인터페이스 장치(device)에 대한 파티션 테이블을 조작 및 디스플레이한다. 여기에서 장치는 /dev/hda1와 같은 파티션이 아니라, /dev/hda와 같은 실제 디스크를 말한다.
  • mkfs: 파일시스템이나 장치를 만든다.
  • mkswap: 스왑(swap) 영역으로 사용할 파티션을 준비한다.
파일시스템 통합 다음 명령은 파일시스템을 관리하는 데 사용한다.
  • df: 디렉토리에 있는 마운트된 파일시스템의 디스크 사용 정보를 보여 준다
  • du: 디렉토리에 대한 디스크 사용 정보를 보여 준다
  • fsck: 파일시스템에 에러가 있는지 확인하며, 선택적으로 정정도 한다
마운팅(Mounting)과 언마운팅(Unmounting) /etc/fstab에는 파일시스템에 대한 마운트 정보가 있다. 각각의 라인은 6개 필드로 구성된 하나의 파일시스템 엔트리가 들어 있다. 자세한 사항은 fstab 맨 페이지를 참고하자. 다음 명령은 파일시스템을 마운트 및 언마운트하는 데 사용한다.
  • mount: 파일시스템을 계층적으로 마운트한다. 첫 번째와 두 번째 형식은 /etc/fstab에서 부가적인 정보를 참조한다
  • unmount: 디바이스에 대한 파일시스템을 마운트하거나, 디렉토리에 대한 파일시스템을 언마운트한다
파일시스템 유형 리눅스에서도 사용할 수 있는 파일시스템 유형은 다음과 같다.
  • ext2: 표준 리눅스 파일시스템
  • iso9660: 표준 CD-ROM 형식
  • msdos: MS-DOS FAT 파일시스템
  • nfs: 원격 서버
  • proc: 커널 매개 변수에 접근하는 시스템 추상화(abstraction)
  • swap: 파티션을 스왑한다
  • vfat: 가상 FAT, msdos 대신 사용, "긴" 파일이름을 지원
파일 퍼미션 접근 제한은 inode에 저장된 접근 모드(access mode)라는 특성의 집합으로 구현한다. 세 가지 계층의 사용자가 정의되어 있다.
  • User/Owner: 파일을 소유한 사용자
  • Group: 파일을 소유한 그룹
  • Other: 시스템에 있는 모든 사용자
위 계층의 사용자에게 퍼미션은 주어질 수도 안 주어질 수도 있다.
  • Read: (r) 파일 내용과 디렉토리 목록에 접근할 수 있다
  • Write: (w) 파일을 작성하거나 디렉토리 내에 파일을 생성할 수 있다
  • Execute: (x) 파일을 실행하며 디렉토리 내에 파일을 읽기/쓰기 할 수 있다
이렇게 해서 모두 9개의 모드, 즉 User rwx, Group rwx, and Other rwx이 나타난다. 다른 세 가지 모드가 더 있다.
  • SUID: 프로세스에 실행 가능한 파일 소유자라는 권리를 부여한다
  • SGID: 프로세스에 실행 가능한 파일의 그룹이라는 권리를 부여한다
  • 스티키 비트(Sticky bit): 아무도 파일을 지우지 못하게 한다
이러한 12가지 모드 비트는 의사 기호(mnemonic) 구조나 팔진 표기로 나타낸다. 모드 비트는 lsstat와 같은 명령으로 보여 준다. 접근 모드(access mode) 세팅 새로운 파일은 umask가 나타내는 최초의 접근 모드를 부여 받는다. umask는 최초의 모드 세팅에서 특정 비트를 제거한다. 전형적인 umask는 002와 022이다. 현재의 파일 모드는 기호나 8진 모드 명세와 함께 chmod를 써서 변경한다.
기호: [ugoa][-+=][rwxXst]
8진 비트: user r, w, x, group r, w, x, other r, w, x

rwxrwxrwx = 111111111 = 777
rwxr-xr-- = 111101100 = 751
  • chmod: 기호나 8진 모드를 사용하여 파일에 있는 접근 모드를 변경한다
파일 소유권 접근 모드는 파일 소유권과 연관되어 있다. 파일은 개인 혹은 그룹 소유가 되는데, 다음의 명령은 소유권을 변경한다.
  • chown user-owner.group-owner 파일: 파일의 소유자, 혹은 그룹을 사용자-소유자, 혹은 그룹-사용자로 바꾼다
  • chgrp group-owner 파일: 파일의 그룹 소유권을 그룹-소유자로 바꾼다. chgrp 기능은 chown에 포함된다.
하드 및 심볼릭 링크 링크는 다른 파일로 가기 위한 길이며, 파일시스템에서 아주 적은 공간만을 차지한다. 심볼릭 링크는 다른 파일에 대한 포인터가 있는 작은 파일이다. 심볼릭 링크는 파일시스템을 연결할 수 있다. 하드 링크는 파일 디렉토리 엔트리의 복사본이다. 양 디렉토리 엔트리는 같은 inode를 가리키므로, 데이터, 소유권, 퍼미션이 모두 같다. ln에는 다음과 같은 구문이 있다.
  • ln: 파일에 링크를 생성하거나, 모든 파일에 대한 디렉토리 내에 링크를 생성한다. 심볼릭 링크는 -s 옵션을 사용해서 만든다.
디스크 레이아웃 디렉토리의 큰 부분을 다른 파일 시스템의 디렉토리 트리에 분산함으로써 /를 작게 만들어야 한다. 커널을 위한 실린더 1024 아래의 작은 /boot 파티션을 쪼갠다. /var를 파티션으로 쪼개 로그가 /를 채우게 한다. /tmp를 쪼갠다. NFS를 통해서 다른 시스템 사이에서 읽기만 가능하다면 /usr를 쪼갠다. 주 메모리 크기를 생각해 스왑(swap) 크기를 설정한다. 5. 배시(bash) 와일드카드(파일 글로브라고도 한다)는 한번에 여러 파일의 스펙을 가능하게 해 준다. 와일드카드를 위한 배시 맨 페이지를 확인하자. 리눅스와 유닉스의 중심되는 개념은 파일이다. 여러 시스템 장치는 시리얼 포트를 위한 /dev/ttyS0처럼 장치 파일을 사용하여 파일시스템으로 나타난다. 표준 I/O 셸은 표준 I/O 능력을 제공하는데, 이 때 세 가지 파일 종류로 프로그램을 구동한다. 표준 입력(stdin)은 텍스트 입력 스트림으로, 디폴트 값으로 키보드에 붙어 있다. 표준 출력(stdout)은 정상적인 프로그램 출력을 위한 출력 스트림이다. 표준 에러(stderr)는 에러 메시지를 나타내는 부가적인 출력 스트림이다. 한 프로그램의 출력과 다른 프로그램의 입력을 연결할 수 있다. 이는 파이프(pipe)라고 하는 것으로, 파이프를 나타내는 | 를 사용하여 명령을 결합함으로써 생성된다. 파이프는 특별한 형태의 재지정(redirection) 형태로, 입력 스트림의 원본과 출력 스트림의 수신지를 관리해 준다. 재지정 구문은 셸에 따라 조금씩 차이가 난다. 셸은 상호 작용 텍스트 유저 인터페이스(Textual User Interface), 운영 환경, 프로그램을 시작할 수 있는 기능, 프로그래밍 언어를 제공한다. 셸은 대개 본 셸(Bourne shell), 배시를 비롯한 sh, tcsh와 같은 C-셸에서 파생된 군으로 나눈다. 셸은 커널과 달리, 사용자 프로그램으로 구동된다. 함수를 조작해서 사용자에 맞게 커스터마이즈하며, 시작시 설정 파일을 사용한다. 환경 변수를 다른 셸을 포함한 자식 프로세스에 전달해 준다. 배시는 sh가 시간이 지나면서 변화한 형태이다. 셸 변수 셸 변수는 로컬 셸에서만 사용하며, 다른 프로세스로 넘어가지 않는데 반해, 환경 변수는 다른 프로세스에도 전달된다. 셸 변수가 익스포트되면 환경 변수로 되는데, 셸 변수 설정은 다음과 같이 한다.
# PI=3.14
다음은 셸 변수를 환경 변수로 바꿔 준다.
# export PI
다음은 위의 두 가지를 한 번에 한다.
# export PI=3.14
셸 앨리어스(alias)는 새로운 명령어를 쉽게 생성하거나 현재 명령어를 수정한다.
# alias more="less"
스크립트를 위해서, 그리고 스크립트의 요청으로 함수가 정의된다. 다음은 lsps라는 함수를 생성한다.
# lsps () { ls -l; ps; }
설정 스크립트 배시 셸은 시작시 /etc/profile, /etc/bashrc와 같은 설정 스크립트를 사용한다. /etc/profile에 들어 있는 명령어는 로그인 때 실행되며, /etc/bashrc에 들어 있는 명령어는 배시를 부를 때마다 실행된다. 이러한 설정 파일을 변경하면 시스템의 모든 사용자에게 영향을 미친다. 6. 프로세스 LPI 시험에 프로세스 관련 문제가 자주 나오므로, 프로세스 감시 명령, 작업 제어, 프로세스 실행 우선순위에 관해 잘 이해하고 있어야 한다. 프로세스 감시 명령어
  • ps: 표준 출력에 현재 프로세스에 대한 하나의 스냅샷을 생성한다
  • pstree: 프로세스의 계층적 구조를 트리 형식으로 보여 준다
  • top: 터미널이나 터미널 윈도우 내에 계속적이며 정형화된, 실시간 프로세스 활동을 디스플레이한다
  • kill: pids에 sigspec를 보낸다
작업 제어 셸은 실행 중인 백그라운드나 터미널에 붙어 있는 포그라운드에서 프로세스를 운영한다. 이렇게 처리되는 프로세스를 작업(job)이라고 하는데, 작업은 다음과 같은 작업 제어 명령어로 조작한다.
  • bg [jobspec]: &가 나타나면 백그라운드에 jobspec을 위치시킨다
  • fg [jobspec]: jobspec를 현재의 작업으로 만들면서 포그라운드에 위치시킨다
  • fg [jobspec]: 표준 출력에 jobspecs을 나열한다
실행 우선 순위 프로세스의 실행 우선 순위는 커널에서 관리하지만, 사용자가 -20에서 +19의 범위(디폴트는 0이다) 내에서 nice 숫자를 지정해 주면 실행 우선 순위가 변한다. +의 nice 숫자는 우선 순위를 감소시키며, -의 nice 숫자는 우선 순위를 높여 주며 슈퍼유저를 위해 예약되어 있다.
  • nice -adjustment[명령]: 명령을 실행하는 프로세스에 nice 숫자 조정(adjustment)을 적용한다.
  • renice [+|-]nicenumber targets: nicenumber를 변경해서 하나 이상 구동 타깃 프로세스의 스케줄 우선 순위를 변경한다.
7. 정규 표현식 정규 표현식은 텍스트를 매치하는 데 사용하는데, 패턴 자체는 물론, 텍스트 매칭 언어를 가리키기도 한다. 종종 regex나 regexp라고 부른다. 정규 표현식은 메타문자(특별한 의미가 있는)와 철자(메타문자가 아닌 모든 것)로 구성된다. 위치 앵커(Position Anchors) 다음의 연산자(operator)는 라인 위치를 검사한다
  • ^: 라인의 앞을 검사한다
  • $: 라인의 끝을 검사한다
문자 셋 나열된 문자나 어떤 범위를 나타내는 문자에서 하나의 문자를 검사한다.
  • [abc]
  • [a-z]
나열된 문자나 범위가 아닌 부분에서 하나의 문자를 검사한다.
  • [^abc]
  • [^a-z]
단어를 검사한다(빈칸이 없어야 함)
뉴라인을 제외한 하나의 문자를 검사한다
  • . (A single period, or dot)
뒤따라 오는 메타문자의 특별한 의미를 없애 버린다(escape)
변경자(Modifiers)
  • *: 앞에 나오는 없거나, 여러 개인 문자를 검사한다
  • ?: 앞에 나오는 정규 표현식의 없거나, 하나인 인스턴스를 검사한다
  • +: 앞에 나오는 정규 표현식의 하나 이상의 인스턴스를 검사한다
  • ₩{n,m₩}: 현재 구조 앞에 나오는 하나의 문자나 정규 표현식의 어커런스(occurrences) 범위를 검사한다
  • |: |의 왼쪽이나 오른쪽으로 문자, 혹은 표현식을 검사한다
8. 검색 파일시스템 계층 표준(FHS)은 리눅스 배포판에서 파일시스템 레이아웃을 표준화하는 데 사용한다. FHS는 데이터를 사용하는 두 가지 범위를 정의하는데, 각각에는 반대되는 하위 유형(subtype)이 있다.
  • 데이터 공유: 네트워크의 여러 호스트 시스템에서 공유 가능 데이터(sharable data)를 사용할 수 있다. 공유 불가 데이터(non-sharable data)는 특정 호스트 시스템에서만 사용할 수 있다.
  • 데이터 변경: 변수 데이터(variable data)는 계속 일어나는 프로세스에 의해 꾸준히 변한다. 정적 데이터(static data)는 일정 기간 동안 아무 변화 없이 그대로 있는다.
파일 시스템에서 파일을 찾는 데에는 다양한 방법이 있다.
  • which: 명령의 위치를 판단해서 실행 가능한 프로그램의 전체 경로를 보여 주면, 셸에서 실행한다.
  • find: 경로에서 시작해서 계속 나타나는 표현식을 검사하는 파일을 검색한다.
  • locate: 이전에 생성된 파일의 인덱스를 검색해서 하나 이상의 패턴에 매치하는 파일을 찾는다
  • updatedb: 대개 크론(cron)을 통해서 slocate 데이터베이스를 수정(혹은 생성)한다
  • whatis: 키워드로 whatis 데이터베이스를 검색하는데, 정확한 매치만을 찾는다
  • apropos: 키워드로 whatis 데이터베이스를 검색하는데, 검색어의 일부만 있어도 찾는다
9. 부팅과 구동 LPI 시험에는 리눅스를 부팅 및 구동하는 것도 나온다. 그러므로 리로, 커널 매개 변수, 모듈 설정, 그리고 다양한 실행 레벨을 잘 익혀야 한다. 리로(LILO), 리눅스 로더(Linux Loader) LILO는 리눅스 커널을 메모리(혹은 다른 운영체제)에 로드해서 이를 시작하는 유틸리티이다. 두 가지 부분으로 나뉘어 지는데, 부트 로더는 커널을 찾아 로드하는 두 단계로 된 프로그램이다. 첫 단계는 디스크 부트 섹터에 있으면서 시스템 바이오스(BIOS)에 의해 시작된다. 그러면 디스크 다른 부분에 있는 더 큰 두 번째 단계를 찾아서 시작한다. lilo 명령은 The map installer라고도 하는데, 리로 부트 로더를 설치 및 설정한다. /etc/lilo.conf를 읽어 들여 해당 맵 파일을 작성한다. /etc/lilo.conf 파일은 옵션과 커널 이미지 정보가 있다. 자주 사용하는 지시자는 다음과 같다.
  • boot: 부트 섹터가 있는 하드 디스크 파티션 이름
  • image: 특정 커널 파일을 나타냄
  • install: 새로운 부트 섹터로 설치되는 파일
  • label: 각각의 이미지에 라벨이나 이름을 제공
  • map: 맵 파일이 있는 디렉토리
  • prompt: 부팅 전에, 그리고 사용자가 키를 누르지 않을 때 입력(커널 매개 변수나 실행 레벨과 같은)할 수 있도록 사용자를 프롬프트함
  • read-only: 루트 파일시스템은 원래 read-only로 마운트되어야 한다
  • root: 이미지를 검색하면서 루트로 마운트되어야 하는 장치 지정
  • timeout: 시간의 양, 1초의 10분의 1, 이 시스템은 사용자 입력을 기다림
커널 매개 변수와 모듈 설정 LILO는 name=value 쌍으로 커널 매개 변수를 넘겨 준다. 리눅스 커널은 필요할 땐 모듈로 사용할 수 있도록 컴파일되는 일부 커널 기능을 가진 모듈러(modular)이다. 모듈에 대한 매개 변수는 /etc/conf.modules에서 지정한다. 커널은 부트할 때, 세부 상태 정보를 제공한다. 이 정보는 /var/log/messages와 같은 시스템 로그나 dmesg 명령으로 볼 수 있다. 실행 레벨(Runlevels) 실행 레벨은 구동하는 서비스를 제어해서 시스템을 사용하는 방법을 지정한다. 실행 레벨은 0에서 6까지 번호를 부여 받는데, 문자도 함께 사용할 수 있다. 실행 레벨 0은 시스템 셧다운을 말하며, 실행 레벨 6은 시스템 재부팅을 말한다. 0과 6 사이의 실행 레벨은 배포판마다 의미가 다른데, 실행 레벨 1(s나 S로도 표기함)은 대개 단일 사용자(유지보수) 모드를 가리킨다. 실행 레벨 2에서 5는 X 로그인 스크린을 포함한 다중 사용자 상태를 나타낸다. 실행 레벨 1은 유지보수(maintenance)를 위한 베어 본즈(bare-bones) 운영 환경이다. 원격 로그인은 불가능하고, 네트워킹도 불가능하며, 대부분의 데몬은 셧다운 상태이다. LILO 프롬프트에서 single, 혹은 1 매개 변수로 단일 사용자 모드가 된다. init 1을 사용하면 단일 사용자 모드로 변한다. /etc/rc.d 파일에는 여러 리눅스 배포판에서 부트 프로세스를 제어하는 초기 스크립트와 링크가 있다. rc.sysinit는 부트시 init로 시작되는 스타트업 스크립트이다. rc.local는 로컬 스타트업을 커스터마이즈하는 스크립트로, 시스템이 구동되면 자동으로 시작된다. rc 스크립트는 실행 레벨을 바꿔 준다. init.d 디렉토리는 시스템 서비스를 시작하고 종료하는 스크립트를 가지고 있다. rc0.d에서 rc6.d까지의 디렉토리는 init.d의 스크립트에 대한 링크를 가지고 있다. 이러한 링크의 이름은 다음과 같다.
[K|S][nn][init.d_name]
K와 S 접두사(prefixe)는 각각 kill과 start를 의미한다. nn은 스타트업과 셧다운 순서를 제어하는 시퀀스 숫자이다. init.d_name는 링크된 스크립트의 이름이다. 디폴트 실행 레벨은 initdefault가 있는 라인의 /etc/inittab에 있다.
id:n:initdefault:
n은 3과 같은 유효한 실행 레벨 숫자이다. 실행 레벨 명령이 실행 레벨을 결정하는데, 이는 이전 및 현재의 실행 레벨을 보여 준다. 이전 실행 레벨에서 N은 실행 레벨이 스타트업 후 바뀌지 않았다는 뜻이다. 실행 레벨은 init n을 사용해서 실행 레벨 n으로 바꾼다. 셧다운 명령을 사용해서 시스템을 안정하면서도 단계적으로 셧다운한다. 시간은 반드시 명기해 줘야 하는데, hh:mm, now , n 분은 +n과 같은 형식으로 나타낸다. 10. 사용자 사용자 계정 정보는 /etc/passwd에 있다. /etc/passwd의 각 라인에는 사용자이름, 패스워드, UID, GID, 사용자의 이름, 홈 디렉토리, 디폴트 셸이 있다. 그룹 정보는 /etc/group에 있다. /etc/group의 각 라인에는 그룹 이름, 그룹 패스워드, GID, 그룹 멤버 리스트가 있다. passwdgroup은 모두가 읽을 수 있다. 섀도우 파일 사용자가 passwdgroup에서 암호화된 패스워드를 받을 수 있으므로 새도우 파일이 필요하다. 암호화된 패스워드는 새로운 파일로 옮겨 져서 루트만 읽을 수 있게 된다. /etc/passwd에 대한 섀도우 파일은 /etc/shadow이며, /etc/group에 대한 섀도우 파일은 /etc/gshadow이다. 다음 명령어는 매뉴얼 유저 및 그룹 관리를 위해 자주 사용된다.
  • useradd: 사용자 계정을 만든다
  • usermod: 사용자 계정을 변경한다
  • userdel: 사용자 계정을 없앤다
  • groupadd: 그룹을 추가한다
  • groupmod: 그룹의 매개 변수를 변경한다
  • groupdel: 그룹을 없앤다
  • passwd: 사용자이름에 대한 패스워드를 쌍방향으로(interactively) 설정한다
  • gpasswd: 그룹이름에 대한 패스워드를 쌍방향으로 설정한다
  • pwconv: 표준 패스워드 파일을 섀도우 설정으로 바꾼다
  • pwunconv: 섀도우 패스워드 설정에서 다시 원래대로 바꾼다
  • grpconv: 표준 그룹 파일을 섀도우 설정으로 바꾼다
  • grpunconv: 섀도우 그룹 설정에서 다시 원래대로 바꾼다
  • chage: 사용자에 대한 패스워드의 존속 기간과 만료 시간 세팅을 변경한다
11. 시스템 관리 syslog는 메시지를 설명해 주는 시스템 이벤트를 보여 주고 기록한다. 메시지는 로그 파일의 콘솔이나 사용자의 텍스트 스크린에 있다. syslog는 /etc/syslog.conf으로 설정하는데, 형식은 facility.level action처럼 하면 된다.
  • facility: 메시지를 생성한다. auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, or local0에서 local7까지 중에서 선택한다.
  • level: 메시지가 로그되는 엄격성 한계(severity threshold)를 지정하며, debug, info, notice, warning, err, crit, alert, or emerg 중의(가장 낮은 엄격성에서 가장 높은 엄격성까지) 하나이다. 특별 수준인 none은 기능을 멈추게 한다.
  • action: 주어진 선택자(selector)에 부합하는 메시지의 최종 수신지. 파일명, @호스트명, 콤마(,)로 구분하는 사용자의 리스트, 혹은 로그인한 모든 사용자를 의미하는 애스터리스크(*)가 될 수 있다.
대부분의 syslog 메시지는 /var/log/messages로 간다. 대부분의 시스템 로그 파일은 회전(rotate)해서 오래된 정보를 없애고, 디스크가 꽉 차는 것을 막는다. Logrotate가 로그 회전을 수행하는데, /etc/logrotate.conf로 설정한다. /var/log에 있는 파일(메시지) 등은 tail, less, grep 같은 유틸리티로 검사한다. syslog 로그 파일에 있는 정보는 날짜, 시간, 원래의 호스트명, 메시지 보낸 사람(sender), 설명 텍스트를 포함한다. 로그 파일 정보를 사용하여 문제를 디버그하려면, 우선 호스트명과 보낸 사람을 보고, 그 다음에 메시지 텍스트를 보도록 한다. 자동화 cron과 at은 미래의 작업을 스케줄한다. 실행 가능 프로그램이나 스크립트는 작업을 스케줄할 수 있다. cron은 crond, cron 데몬, 작업 스케줄 정보를 가지고 있는 crontab 파일로 구성된다. cron은 일정 기간마다 명령을 실행하며, crond는 매 분마다 crontab 파일을 검사한다. 시스템 사용자는 개인 crontab 파일을 통해 cron에 접근한다. crontab 명령을 사용하면 crontab 파일을 편집하고 볼 수 있다. View나 -e로는 crontab 파일을 편집할 수 있다. crontab 파일의 엔트리는 다음과 같은 형태이다.
minute  hour  day  month  dayofweek  command
시간 필드의 애스터리스크는 모든 값에 매치한다. 개인 crontab 파일과 함께 시스템만의 crontab 파일이 있는데, /etc/crontab과 /etc/cron.d에 있는 파일이다. at은 나중에 실행할 명령을 한번 셋업한다. 명령을 입력하면, at 명령은 상호 작용하는 세션에 들어가게 된다. 시간은 hh:mm, midnight, noon과 같은 형식으로 쓴다. cron 접근은 cron.allowcron.deny에 있는 사용자 리스트를 사용해서 제어한다. at 접근은 at.allowat.deny에 있는 사용자 리스트를 사용해서 제어한다. 12. 컴파일 소프트웨어는 압축 tar 아카이브 파일에 들어 있는 경우가 많다. 대용량 소스 코드 패키지에는 설정 스크립트가 들어 있어 제대로 소프트웨어를 컴파일하는지 확인한다. 그러면 make가 소프트웨어를 구축한다. make/usr/local/bin와 같은 디렉토리에 소프트웨어를 설치하기도 한다. 공유 라이브러리(Shared Libraries) 시스템 라이브러리는 프로그램에 필요한 여러 기능을 제공한다. 라이브러리에 실행가능 코드를 포함하고 있는 프로그램은 정적으로 링크되어 있다. 이 프로그램은 자립적(stand-alone)이며, 실행할 때 필요한 모든 코드를 가지고 있기 때문이다. 정적 링킹은 더 큰 실행 가능 파일과 더 많은 리소스 소모(consumption)로 인해, 동시에 여러 실행 중인 프로그램 에서 시스템 라이브러리를 공유할 수 있다. 외부의 공유 라이브러리를 참조하는 프로그램은 실행시간에 동적 링커 ld.so에 의해 동적으로 링크된다. 공유 라이브러리에서 새로운 위치는 LD_LIBRARY_PATH 변수에 덧붙이는데, 라이브러리 파일 디렉토리를 나열하는 /etc/ld.so.conf에 덧붙이기도 한다. 그러면 ldconfig를 사용해서 파일을 바이너리 인덱스 /etc/ld.so.cache에 해석(translate)한다. 커널 모듈 리눅스 커널은 모듈러이며, 디바이스 드라이버 소프트웨어는 필요할 때 구동중인 커널에 삽입된다. 모듈 파일은 개체(object)로, /lib/modules에 저장된다. 커널 모듈은 다음과 같은 명령으로 관리한다.
  • lsmod: 모듈 리스트
  • insmod: 모듈을 커널에 삽입한다
  • rmmod: 커널에서 모듈을 제거한다
  • modinfo: 모듈에 관한 정보를 보여 준다
  • modprobe: 모듈과 모듈이 필요로 하는 것을 함께 삽입한다
모듈은 /etc/conf.modules/etc/modules.conf에서 설정된다. modprobemodules.dep 파일을 사용하여 모듈 의존성을 판단한다. 이 파일은 부트시 depmod로 생성한다. 13. X GUI X는 클라이언트 서버 GUI 시스템이다. Xfree86은 리눅스에서 사용하는 X 구현이다. X 서버는 소프트웨어일 수도 하드웨어일 수도 있는데, 디스플레이 장치에 그래픽 출력을 가능하게 한다. X 클라이언트의 출력은 X 서버에 의해 디스플레이되며, 대개 윈도우 매지저가 관리한다. X 윈도우 매니저는 프레임과 컨트롤을 다른 클라이언트 윈도우에 적용하는 클라이언트이다. XFree86 설정은 소프트웨어 버전, 사용하는 비디오 칩셋, 모니터 성능에 따라 다르다. XFree86은 리눅스 배포판 패키지(.rpm, .deb), 이미 컴파일되었거나 소스에서 컴파일된 바이너리로 설치한다. XFree86의 설정은 XF86Config 파일로 하는데, 이 파일에는 입력 장치, 모니터, 그래픽 모드 등이 정의되어 있다. XF86Config 파일은 XFree86 버전 3.x과 4.x 사이에 차이점이 있다. X 서버는 X 폰트로 X 클라이언트의 폰트 요청을 만족한다. 폰트는 /etc/X11/XF86Config에 나타난 정적 리스트나, xfs와 같은 폰트 서버를 통해 열거한다. xfs는 설정 파일인 /etc/X11/fs/config로 설정한다. .Xresources 파일에 설정되어 있는 X 리소스는 클라이언트 프로그램 매개 변수를 제어한다. 다음과 같은 라인은 xterm에 검은 색 배경으로 나타내라는 의미가 된다.
xterm*background: Black
X Display Manager인 xdm은 로컬과 네트워크에서 실제 디스플레이에 대한 X 세션을 처리한다. xdm은 인증을 처리하며, /etc/X11/xdm에 있는 일련의 파일이 이를 설정한다. xdm은 대개 실행 레벨 5에서 /etc/inittab에 적절한 세팅을 해 주면 자동으로 시작된다. /etc/X11/xdm/Xresources에 있는 리소스를 변화시켜 개인에게 맞게 할 수도 있다. X 서버의 명령행 옵션은 /etc/X11/xdm/Xservers 파일에 추가한다. X 서버는 작업 사용자 환경을 제공하지 않는다. X를 시작하면 X 서버 뿐 아니라, 윈도우 매니저와 다른 클라이언트도 시작하게 된다. 기본적인 twm과 같은 디폴트 윈도우 매니저는 startx 스크립트와xinit를 결합하면 시작된다. xinit은 또한 윈도우 매니저와 디폴트 클라이언트를 포함하는 스크립트를 요청한다. 디폴트 시스템 X 설정은 사용자의 홈 디렉토리에 있는 파일로 변경할 수 있다. 윈도우 매니저 윈도우 매니저와 데스크탑 환경은 나름대로의 설정 방식이 있다. twm은 사용자의 홈 디렉토리에서 .twmrc를 사용한다. 이 파일이 없으면, 시스템에 상관없는 /etc/X11/twm/system.twmrc를 사용한다. 윈도우 매니저 설정 파일에는 폰트와 색상 설정, 동작(마우스 클릭과 같은)과 응답 사이의 바인딩, 메뉴 정의가 들어 있다. 터미널 에뮬레이터는 GUI 윈도우에서 명령행 인터페이스를 제공하는 프로그램이다. xterm은 표준 터미널 에뮬레이터로, /usr/lib/X11/app-defaults/Xterm를 이용해서 설정한다. X 애플리케이션은 공유 X 라이브러리에 의존한다. GTK와 Qt를 비롯한 여러 그래픽 툴킷을 사용하여 X 클라이언트 애플리케이션을 개발한다. 특정 라이브러리에 의존하는 소프트웨어는 라이브러리를 설치해야만 구동할 수 있다. 그러므로 사용자는 어떤 라이브러리를 설치해야 하는지 ldd로 알아 봐야 한다. X 클라이언트는 원격 X 서버에서 디스플레이할 수 있다. DISPLAY 환경 변수를 사용해 X 클라이언트 디스플레이를 위해 수신지를 지시한다. 호스트가 원격 호스트명이거나 IP 주소일 때, DISPLAY는 [host]:display[.screen]와 같은 형식이 된다. display는 디스플레이 타깃(0부터 시작)이며, screen은 스크린으로 멀티헤드(multiheaded) 디스플레이에서 사용한다. DISPLAY는 익스포트되어야 한다. 14. 네트워킹 서비스 inetd는 인터넷 슈퍼 데몬으로, 여러 인바운드 포트를 감시하며, 적절한 자식 데몬을 시작시켜 요청에 응답한다. inetd는 TCP 래퍼(tcpd)를 사용하여 서비스에 접근 보안을 첨가한다. Inetd/etc/inetd.conf에서 설정한다. /etc/inetd.conf에 선언을 해 주기만 하면, inetd가 관리하는 인바운드 서비스를 제거할 수 있다. TCP 래퍼를 이용해서 관리자는 호스트에 대한 접근 규칙을 정의한다. 설정 파일은 /etc/hosts.allow/etc/hosts.deny이다. 센드메일(Sendmail) sendmail은 Mail Transfer Agent(MTA)이다. /etc/sendmail.cf에서 sendmail을 설정한다. 파일은 대개 설정하기 어려운데, smart host 매개 변수를 사용해서 로컬 sendmail 데몬을 설정하여 메일을 사이트의 공식 메일 시스템으로 전송한다. /etc/aliases는 인바운드 메일 주소의 앨리어스(alias)를 저장하는 파일이다. 메일을 하나 이상의 사용자에게 재지정할 수 있다. /etc/aliases가 수정될 땐 newaliases가 실행되어야 한다. 각 사용자는 홈 디렉토리에서 이메일 주소를 계속 포워딩하면서, .forward 파일로 자신의 메일을 포워딩할 수 있다. 네트워크나 다른 문제로 인해 트랩된 아웃바운드 메일은 대기 상태로 남아 있는데, 이는 mailq 명령으로 검사할 수 있다. 아파치 아파치 웹 서버는 httpd.conf, srm.conf, access.conf로 설정한다. 일부 설치 과정에서는 httpd.conf와 결합시켜야 한다. 설정 파일에는 키워드와 인자 리스트로 구성되며, 하나의 라인에 하나가 있는 설정 지시자가 있다.
DocumentRoot /home/httpd/html
위는 시스템에서 HTML 파일을 위한 루트 디렉토리를 설정한다. 아파치는 대개 시스템의 스타트업 메소드를 사용하여 부트 과정에서 시작된다. NFS 지금까지 유닉스 파일 공유는 썬 마이크로시스템즈에서 개발한 NFS로 하고 있다. NFS는 클라이언트 서버 패키지로, 모든 시스템은 클라이언트와 서버라는 두 역할을 동시에 한다. 디렉토리와 가능한 시스템 리스트, NFS 옵션으로 구성된 /etc/exports 파일에 한 줄을 삽입해서 NFS와 로컬 파일시스템을 익스포트(공유)한다.
/usr    (ro) orion.mydomain.com(rw)
/home   *.mydomain.com(rw)
원격 NFS 파일시스템은 마운트 명령으로 마운트한다.,
# mount -t nfs server1:/home /mnt/server1 
NFS는 시스템의 스타트업 메소드를 사용하여 부트시 시작된다. 삼바 삼바는 마이크로소프트와 IBM LAN에서 사용하는 서버 메시지 블록(SMB) 프로토콜을 구현한다. smbd는 파일과 프린터 공유, 인증을 처리한다. nmbd는 WINS 서비스를 구현한다. 삼바는 /etc/smb.conf에서 설정한다. 파일은 섹션으로 나뉘어 지는데, 각 세션에는 일련의 keyword = value pairs가 있다. 삼바 2.0과 이후 버전에는 SWAT라는 웹 기반 설정 툴이 있는데, 대개 inetd로 감시하도록 설정돼 있다. 기본적인 DNS DNS는 이름을 IP 주소로 해석하는 분산 데이터베이스이다. 네트워크로 연결된 애플리케이션은 도메인 네임이 IP 주소로 번역해야 할 때 리졸버(resolver)를 사용한다. 리졸버는 로컬 파일, NIS, DNS를 사용하여 /etc/resolv.conf에서 관리하는 호스트명을 리졸브한다. 도메인 네임은 인터넷의 도메인 네임 레지스트러(registrar) 중의 하나가 있는 등록 절차를 통해 할당된다. DNS 서버 데몬은 named로 BIND 패키지의 일부이다. 비허가 캐싱만을 사용하는 네임 서버를 동작시켜 named를 설정하면 로컬 시스템의 속도를 높일 수 있다. named/etc/named.conf를 사용하여 설정한다. nslookup, host, dig 유틸리티를 사용하여 DNS 서버에서 정보를 검색한다. BIND 버전 4와 버전 8은 파일에 포함된 정보는 유사하지만, 설정 파일 포맷은 크게 다르다. 15. 보안 /etc/hosts.allow/etc/hosts.deny를 사용하여 TCP 래퍼(tcpd)를 설정하면, inetd가 제어하는 데몬의 보안을 강화할 수 있다. 모든 서비스에 대한 모든 시스템의 접근을 막기 위해 tcpd를 설정하는데, 그러면 특정 시스템이 서비스(제한된)에 합법적으로 접근할 수 있도록 지정된다. syslog를 사용하는 tcpd 로그는 대개 /var/log/secure에 저장된다. 실행 가능한 SUID 파일 찾기 find는 -perm 옵션을 사용하여 SUID와 같은 파일 속성을 검색한다. 패키지 검증 RPM 패키지는 Verify 모드로 검증하는데, 이 모드는 -V(대문자) 모드를 사용한다. 각각의 패키지에 대한 출력에는 속성이 바뀌지 않으면 점(dot)으로 설정되는 8개의 문자열이 있다. 행(column)은 MD5 checksum, symlink attributes, 파일의 mtime, device file change, user/owner change, group change, and mode change 등의 속성을 나타낸다.
제프리 딘(Jeffrey Dean)은 펜실베니아주 필라델피아에서 프리랜스 작가, 편집자이자 컨설턴트로 활동하고 있다. IT 관리, 리눅스, 솔라리스, VMS, AS/400, 윈도우 NT/2000 시스템 관리에 대해 강의한 경험도 있다. 피츠버그 대학에서 전기 엔지니어링 학부를 이수했으며, 펜실베니아 주립대학에서 컴퓨터 디자인 엔지니어링 박사 학위를 취득했다. 또한 LPIC(Linux Professional Institute) 레벨 1 인증과 RHCE(Red Hat Certified Engineer) 인증을 취득했다.
TAG :
댓글 입력
자료실

최근 본 상품0