티스토리 뷰
728x90
안녕하세요. 개발개입니다.
2002회 리눅스마스터(1급) 시험을 준비하게 되어
시험정보와 학습내용을 정리하고 공유하고자 합니다.
<목차>
리눅스 실무의 이해
리눅스 시스템의 이해 [현재글]
리눅스 시스템 관리
네트워크 및 서비스의 활용
네트워크 서비스
네트워크 보안
01 리눅스와 하드웨어
하드웨어의 이해
RAID의 종류
- RAID-0
- 스트라이핑 기술(데이터를 여러 디스크에 걸쳐 저장)을 이용하여 분산 저장
- 여러 디스크에 동시에 쓰므로 처리속도가 빠름
- RAID-1
- 미러링 기술을 이용하여 두 개의 디스크에 동시 기록
- 디스크를 동시에 읽으므로 읽기 속도가 향상
- 디스크 효율이 낮음 (데이터 중복)
- RAID-2
- 비트(bit)레벨의 스트라이핑 기술을 이용하여 최소 3개의 디스크에 데이터 분산 저장
- 오류 정정 부호(ECC)를 기록하는 전용 디스크 있음 (복구 시 추가 연산으로 입출력 속도가 떨어짐)
- RAID-3
- 바이트(byte)레벨의 스트라이핑 기술을 이용하여 분산 저장
- 순차적 쓰기 및 읽기 성능이 우수함
- 패리티(패리티 비트를 추가해 데이터 유실/손상 여부 확인) 기술을 사용하므로 오류 체크 및 복구 가능
- RAID-4
- 블록(block)레벨의 스트라이핑 기술을 이용하여 분산 저장
- 패리티 기술을 사용하여 에러 체크 및 정정 가능
- 데이터 쓸 때마다 패리티 디스크도 접근하므로 쓰기 성능이 좋지 않음
- RAID-5
- 블록(block)레벨의 스트라이핑 기술을 이용하여 분산 저장
- 모든 디스크에 패리티 나누어 저장
- 성능은 RAID-0보다 부족하지만 성능/안정성/용량를 고려해 가장 보편적으로 쓰임
- RAID-6
- RAID-5와 유사하나 2차 패리티가 포함됨 (2개의 디스크 오류에 대처 가능)
- RAID 0+1
- 디스크 2개를 스트라이핑 기술을 사용하는 RAID-0으로 구성하고,
이 RAID-0 세트를 미러링 기술을 사용하는 RAID-1로 구성
- RAID 1+0
- 디스크 2개를 미러링 기술을 사용하는 RAID-1로 구성하고,
이 RAID-1 세트를 스트라이핑 기술을 사용하는 RAID-0으로 구성 - RAID-1보다 성능이 높고 가격이 비쌈
- RAID 5+3
- RAID-3 방식에 스트라이프 배열을 구성하는 방식
- RAID-3보다 성능이 높고 가격이 비쌈
LVM(Logical Volume Manager)
- LVM 구성도
02 리눅스의 구조
부트매니저(=부트로더)
- 운영체제(OS)를 주기억장치로 로드하는 보조기억장치의 프로그램
- LILO(Linux Loader), GRUB(Grand Unified BootLoader)
주요 디렉터리
디렉터리 | 설명 |
/ | 최상위 디렉터리 |
/bin/ | 모든 사용자가 사용할 수 있는 주요 명령어 위치 (ls, mv, cp, mkdir, cat, ...) |
/boot/ | 부팅이 필요한 파일 위치 (커널파일, initrd, grub관련 파일, ...) |
/dev/ | 디파이스 파일 위치 |
/etc/ | 시스템 환경 설정 파일, 시스템 초기화 시 수행되는 스크립트 파일 |
/home/ | 로그인한 사용자 전용 홈 디렉터리 |
/lib/ | 라이브러리 위치 |
/media/ | 이동식 디스크 등 마운트 시 위치 |
/mnt/ | 디바이스 마운트 시 임시 디렉터리 |
/opt/ | 추가 어플리케이션 소프트웨어 패키지 |
/proc/ | 메모리에 존재하는 모든 프로세스들이 파일 형태로 위치 |
/root/ | 루트 사용자의 홈 디렉터리 |
/sbin/ | root가 사용하는 시스템 관리 명령어 위치 (system binary) |
/tmp/ | 공용 디렉터리 (임시 파일 생성 등) |
/usr/ | 사용자가 설치한 주요 명령어 위치 |
/usr/bin/ | 대부분의 사용자 명령어 포함 |
/usr/include/ | 헤더 파일 위치 |
/usr/lib/ | /usr/bin/과 /usr/sbin/의 바이너리에 링크하기 위한 라이브러리 위치 |
/usr/sbin/ | 시스템 관리자가 사용하는 명령어, 상ㄷ적으로 중요하지 않은 명령어 |
/usr/src/ | 바이너리의 소스코드 위치 (리눅스 커널 소스코드 등) |
/usr/X11R6 | X윈도우 관련 파일 위치 |
/var/ | 임시 생성/삭제 되는 데이터 위치 (로그, 스풀 파일 등) |
부팅절차
1 | 시스템 시작 및 하드웨어 초기화 | BIOS 및 시스템 시작 |
2 | 부트 로더 1단계 | MBR의 ILP 시작 |
3 | 부트 로더 2단계 | ILP가 GRUB 부트 로더 시작 |
4 | 커널 | Linux OS |
5 | init 프로세스 | 실행 레벨 |
6 | 사용자 프롬프트 | 명령어 입력 대기 상태 |
실행레벨
레벨 | 설명 |
0 | 시스템 종료 |
1 | 단일 사용자 모드 (시스템 복원 모드) - root 권한 셸을 얻을 수 있음 |
2 | 다중 사용자 모드 (네트워크 기능 X, 텍스트 기반) |
3 | 다중 사용자 모드 (네트워크 기능 O, 텍스트 기반) |
5 | 다중 사용자 모드 (X윈도우) |
6 | 재부팅 |
- /etc/inittab에 부팅과 관련된 실행 레벨 정의
- /etc/rc.d/rc.local에 서버부팅 시마다 자동 실행 명령어 기록되며 부팅 시 가장 나중에 실행
파일시스템
- ext
- minix 개선 파일시스템
- 타임스탬프 기능 없음, 아이노드 수정 기능 없음, 조각화(쓸수록 느려짐) 이슈
- ext2
- ext 개선 파일시스템
- 타임스탬프 기능 생김, 아이노드 수정 기능 생김, 조각화 이슈 해결
- block mapping
- 데이터를 쓰는 동안 전원이 끊어지면 제대로 저장되지 않음
- ex3
- 저널링(로그를 통해 파일시스템 복구) 기술 도입 - 쓰는 동안 전원이 끊어져도 데이터 복구 가능
- block mapping
- ex4
- ex2와 ex3 호환 및 확장
- extends - 큰 파일 처리 개선 및 단편화 현상 줄임 (다중블록할당(malloc)으로 오버헤드 회피)
- 온라인 조각모음 기능
- 슈퍼 블록(super block)
- 파일시스템의 전체 내용을 담고 있는 블록
- 1KB만 사용
- 아이노드(i-node)
- 실제 파일과 디렉터리의 데이터 위치를 알고 있는 자료구조
03 X윈도우
- X윈도우
- X프로토콜을 사용하여 GUI 환경 구현
- startx 명령어로 시작
- X서버
- 디스플레이 제어 및 X클라이언트와 통신, 관리
- X클라이언트
- Xlib을 사용하여 만들어진 응용 프로그램
- X서버에 디스플레이 관련 서비스를 요청하거나 응답받아 처리함
- 관련 명령어/환경변수 : xhost, xauth, DISPLAY 환경변수
- X프로토콜
- X서버와 X클라이언트가 정보를 주고 받기 위한 형식
- Xlib/XCB
- Xlib : X윈도우 시스템 프로토콜 클라이언트 라이브러리
- XCB : Xlib 대체품
- X세션
- X서버에 X클라이언트가 연결되었을 때 생성되는 세션
- 윈도우 매니저
- X윈도우의 위치/이동/크기변경 등을 관리하는 프로그램
- 디스플레이 매니저
- 그래픽으로 구성된 로그인 유저 인터페이스를 사용자에게 제공
- xhost 명령어
- X서버에 접근할 수 있는 클라이언트 지정/해제하는 명령어
04 셸(Shell)
셸 종류
구분 | 셸 | 특징 |
Bourne Shell | sh (bourne shell) | 톰프슨 셸(유닉스 최초의 셸)을 대체하고 오랜기간 유닉스의 기본 셸이었음 |
ksh (korn shell) | 본셸과 호환. history/alias/작업제어 기능 추가 | |
bash (bourne again shell) | 리눅스에서 가장 많이 사용하는 셸 (GPLv3 라이선스) | |
C Shell | csh (C shell) | C언어 기반 |
tcsh (TC shell) | 명령줄 완성/편집 기능 |
로그인셸 비로그인셸
- 로그인 셸 (Login Shell)
- 사용자가 ID와 PW를 입력하여 셸에 진입하는 방식
- 터미널에서 원격 ssh로 접속하는 등
- 비로그인 셸 (Non-Login Shell)
- 로그인 없이 셸을 실행하는 방식
- 이미 로그인한 셸에서 bash 명령어를 사용하여 셸을 다시 실행하거나 X윈도우에서 터미널을 실행시키는 등
셸의 설정 파일
구분 | 설정 파일 | 특징 |
시스템 설정 파일 |
/etc/profile | 시스템 전역 설정 파일 |
/etc/profile.d/* | 로그인 시 해당 디렉터리 안 모든 셸 스크립트 실행 | |
/etc/bashrc | 비로그인 셸을 실행할 때마다 실행 | |
사용자 설정 파일 |
~/.bash_profile ~/.bash_login |
로그인할 때마다 실행. 개별 사용자 설정 파일 |
~/.profile | 로그인할 때마다 실행. bash와 직접 관련 없는 설정 파일 | |
~/.bashrc | 비로그인 셸 실행할 때 실행. alias 등 | |
~/.bash_logout | 로그인한 셸을 로그아웃할 때마다 실행 |
- 로그인 셸인 경우,
- /etc/prifile과 /etc/prifile.d/* (시스템 전역 설정 파일) 실행
- ~/.bash_prifile이나 ~/.bash_login과 ~/.profile (각 사용자별 실행 파일) 실행
- 비로그인 셸인 경우,
- 인터랙티브 셸 유무 확인 후
- 인터랙티브 셸인 경우 /etc/bashrc 실행
- ~/.bashrc실행
- 모든 셸에 접근 가능한 변수를 선언하고자 할 때,
- 사용자 변수인 경우 .bashrc에 선언
- 시스템 변수인 경우 /etc/bash.bashrc에 선언
명령어 치환 기능
- 명령어 실행 결과를 명령어 인자로 넘기는 기능
- $(command)
- `command`
표준입출력
구분 | 약어 | 파일 디스크립터 |
표준 입력 | stdin | 0 |
표준 출력 | stdout | 1 |
표준 에러 | stderr | 2 |
리다이렉션
> | 프로그램 출력을 표준 출력에서 지정한 출력으로 변경 |
>> | 프로그램 출력을 표준 출력에서 지정한 출력으로 변경하고 추가 |
< | 프로그램 입력을 표준 입력에서 지정한 입력으로 변경 |
<< | 프로그램 입력을 표준 입력에서 지정한 입력으로 변경하고 추가 |
- e.g.
- ./run-batch.sh >> batch.log : run-batch 쉘 프로그램의 출력을 batch.log 파일로 지정하고 출력 내용을 추가
파이프
- 프로그램의 출력 결과를 다른 프로그램의 입력으로 전달
- e.g.
- ls -l | grep tomcat : 현재 디렉터리의 파일 목록 중 tomcat이라는 글자를 포함한 파일만 출력
참고사항
- chsh 명령어
- chsh -l : 시스템이 지원하는 셸 목록 조회
- chsh -s : 사용하는 셸 변경
- alias
- 입력하기 복잡하거나 자주 사용하는 명령어의 별칭을 생성
- /dev/null
- 실제 존재하지 않는 논리적 장치(null)
- 출력을 /dev/null로 지정하는 경우 출력하지 않는 것을 의미
- 스크립트 실행 방법
- #sh script.sh
- #. script.sh
- #source script.sh
- #./script.sh (실행권한이 있는 경우)
셸스크립트
- 조건문
if [ 표현식 ]
then
명령문
elif [ 표현식 ]
then
명령문
else
명령문
fi
case $변수명 in
패턴1)
명령문
패턴2)
명령문
*)
명령문
esac
- 반복문
for $변수명 in 값1, 값2
do
명령문
done
while 표현식
do
명령문
done
until 표현식
do
명령문
done
select $변수명 in 메뉴1 메뉴2 메뉴3 ...
do
명령어
done
- 함수
function 함수이름
{
명령문
}
05 프로세스 (PCB를 지닌 프로그램)
PCB (Process Control Block)
- 프로세스 상태가 변경될 때마다 커널이 정보를 저장하는 자료구조
Pointer |
Process State |
Process Number |
Program Counter |
Registers |
Memory Limits |
Open File Lists |
Misc. Accounting and Status Data |
init 프로세스
- 모든 프로세스의 부모 프로세스
- 부트 로더에 의해 가장 먼저 실행하는 프로세스
- PID(프로세스ID)는 항상 1
부모/자식 프로세스
- 부모 프로세스
- 프로세스 A가 프로세스 B를 실행/생성했을 때, 프로세스 A
- 자식 프로세스
- 프로세스 A가 프로세스 B를 실행/생성했을 때, 프로세스 B
고아/좀비 프로세스
- 고아 프로세스
- 부모 프로세스가 강제종료 등으로 유실된 경우의 자식 프로세스
- 좀비 프로세스
- 자식 프로세스의 종료 코드를 회수하지 못한 경우
백그라운드/포어그라운드 프로세스
- 백그라운드 프로세스
- 명령어의 수행이 다소 시간이 걸리는 등의 연유로 백그라운드에서 실행되는 프로세스
- 명령어 뒤에 &을 붙이면 백그라운드로 실행됨
- 포어그라운드 프로세스
- 사용자의 입력을 받거나 실행 결과를 출력할 수 있는 상태의 프로세스
- 백그라운드와 포어그라운드 간의 전환
- 포어그라운드 → 백그라운드 : Ctrl + z (suspend) 후 bg 명령어 입력
- 백그라운드 → 포어그라운드 : jobs 명령어를 통해 job id 확인 후 fg 명령어에 %job id를 매개변수로 전달
시그널
시그널 번호 | 시그널 이름 | 설명 |
1 | SIGHUP | 터미널의 접속 연결이 끊어질 때 |
2 | SIGINT | 인터럽트(Ctrl + c) 발생 시 |
3 | SIGQUIT | Ctrl + \ 입력 시 |
9 | SIGKILL | 프로세스 강제 종료 시 |
15 | SIGTERM | 프로세스 정상 종료 시 |
18 | SIGCONT | 정지된 프로세스를 다시 재개할 때 |
19 | SIGSTOP | 프로세스 중지할 때 |
20 | SIGTSTP | 프로세스 대기(Ctrl + z) 입력 시 |
참고 사항
- sevice
- 리눅스 서비스의 시작, 정지, 재시작 등을 제어하는 명령어
- e.g. service httpd start
- 현재 터미널에서 데몬을 실행하는 방법
- /etc/rc.d/init.d/[데몬] start
- service [데몬] start
- /etc/init.d/[데몬] start
- 터미널에서 부팅 시 실행할 데몬 설정 유틸리티
- ntsysv [데몬] on
다음 글 : [리눅스마스터] 리눅스 실무의 이해 - 네트워크의 이해
728x90
'KR > Linux' 카테고리의 다른 글
[리눅스마스터] 리눅스 시스템 관리 - 일반 운영 관리 (0) | 2020.08.26 |
---|---|
[리눅스마스터] 리눅스 실무의 이해 - 네트워크의 이해 (1) | 2020.08.26 |
[리눅스마스터] 리눅스 실무의 이해 - 리눅스의 개요 (0) | 2020.08.01 |
[리눅스마스터] 시험 정보 (0) | 2020.08.01 |
[ShellScript] while문을 이용한 다중 결과 반복 처리 (0) | 2019.09.23 |