후기
클라우드 관련 서비스(특히 VM) 의 백엔드 개발업무를 수행하다보니, 자연스럽게 리눅스에 대한 지식이 요구되어서 읽었습니다.
학부 시절에 배운 리눅스 교과목 정도의 깊이는 당연히 아니고, 얕고 넓게 전반적으로 리눅스에 대해 설명하는 책이라고 보면 될 듯합니다.
(모던이라는 용어가 붙어서 크게 다른가 했는데, VM 및 컨테이너와 프로메테우스 & 그라파나 정도 추가로 기술 된 것 같습니다)
따라서 리눅스를 아예 모르거나 깊게 배우려는 분들에게는 오히려 다른 책을 먼저 읽는게 나을 듯 합니다.
저 같은 경우 용어는 아는데, 막상 말로는 설명 못하는 개념같은 부분을 전반적으로 다시 정리하기 위해서 좋았습니다.
책 수준이 많이 높거나 혹은 양이 막 많거나 하지 않으니, 저처럼 넓게 한번 보기에는 좋은듯 합니다.
주요 내용
1장 - 리눅스 소개
- 운영체제의 역할
- OS가 제공하는 API => System Call (syscall)
- 리눅스 배포판의 의미 => 리눅스 커널 + 관련 구성요소 전체 번들
- 핵심은 커널
- 리눅스의 가시성 => 전역보기 등
2장 - 리눅스 커널
- Linux Architecture 및 3 Layaer (HW, Kernel, User)
- CPU 아키텍처 (x86, ARM .. )
- Kernerl 구성요소 및 역할
- 프로세스 관리
- 세션 (SID)
- 프로세스 그룹 (PGID)
- 프로세스 (PID)
- 스레드 (TID, TGID)
- 태스크
- 메모리 관리
- 물리, 가상 메모리
- 페이지
- TLB
- 네트워킹
- 리눅스 네트워크 스택
- 커널 처리 영역 -> 소켓, TCP/UDP, IP 등
- 파일 시스템
- 다양한 파일 시스템 (ext4, NTFS 등)
- VFS
- 디바이스 드라이버 등 관리
- 프로세스 관리
- 시스템 콜
- C 표준 라이브러리
3장 - 셸과 스크립팅
- 셸 개념과 역할
- 셸 스크립트 작성하기와 잘 작성하는 법
- 빠르고 요란하게 실패하기
- 민감정보 기술하지 않기
- 에러처리 잘 하기
- 문서화 등 ...
- 모던 리눅스 명령어
- exa (ls 대체), bat (cat 대체), rg (grep 대체), jq (json 처리) 등
4장 - 접근 제어
- 사용자, 프로세스, 파일의 관계
- 사용자: 프로세스 실행, 파일 소유
- 프로세스: 소유자가 있음
- 파일: 소유자가 있음
- 접근제어 유형
- 임의 접근제어 (DAC)
- 강제 접근제어 (MAC)
- selinux : 강제 접근제어 모듈 구현으로 보안적 요소가 강한 환경에서 사용
- 사용자
- UID, GID ..
- root(UID 0), System User(UID 1 ~ 999), Nobody(UID 65534), 일반사용자(UID 1000~65333...)
- User 관리
- 사용자 추가 (adduser)
- 사용자 정보 조회 /etc/passwd
- 그룹 정보 조회 /etc/group
- 파일 권한
- rwx ..
- chmod
- 권한 처리 우수 사례
- 최소 권한, setuid 쓰지말기, 감사(Auditing) ...
5장 - 파일 시스템
- Linux -> 모든 것이 파일이다
- 파일 시스템 구조
- 드라이브, 파티션, 볼륨, 슈퍼블록, inode 등
- mkfs, mount ..
- 레이아웃
- bin, sbin : 시스템 프로그램과 명령
- boot : 커널 이미지 관련 요소
- dev : 디바이스
- etc : 시스템 구성파일
- home : 사용자 홈 디렉터리
- lib : 공유 시스템 라이브러리
- proc, sys : 커널 인터페이스
- tmp : 임시파일
- usr, var : 사용자 프로그램
- ...
- Hard, Symbolic LInk
- VFS
- 다양한 종류의 리소스에 대해 '파일'과 유사한 접근 제공
- 클라이언트가 동일한 방법으로 리소스에 접근할 수 있게 하는 커널의 추상화 계층
- LVM
- 파티션의 단점인 크기조정이 어려움에 따라 볼륨을 활용
- LVM 을 통해 File System 과 물리 개체 (Drive) 간의 간접계층 사용
- PV (물리볼륨), VG (볼륨그룹), LV (논리볼륨)
- CoW & Union Mount
6장- App, Package, contaienr
- 리눅스 시작 프로세스
- (1) HW : UEFI (BIOS) -> 부트로더
- (2) 커널 : 커널
- (3) User : init 시스템 -> 그밖 User Space
- systemd
- init 시스템 + 그 외 기능 => 강력한 관리자
- unit 개념의 systemd 작업 추가 등 지시
- systemctl 로 제어
- journalctl 로 로그 확인
- 리눅스 패키지 관리자
- RPM Base -> yum, dnf, zypper ...
- Debian Base -> dpkg, apt-get, apt ...
- 컨테이너
- Linux Namespace -> 프로세스가 리소스에 대한 로컬 뷰 가지게 함으로 격리 수행
- Linux Cgroup -> 호스트 시스템 리소스 사용 제어 및 추적
- Cow 파일 시스템
7장 - 네트워킹
- 리눅스 TCP / IP Stack
- Link
- 하드웨어와 커널 드라이버
- MAC 주소 담당
- NIC : 전기 혹은 전자기 신호 ~ 바이트 디지털 표현 수행
- ARP 프로토콜
- Internet
- IP 담당
- 라우팅에 초점
- NW를 통한 기기간의 패킷 전송
- IPv4, IPv6, CIDR, ICMP
- 사설 IP 범위
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
- Transporation
- TCP / UDP 담당
- TCP : 연결지향, 세션기반, 순서보장, 재전송 지원 등
- UDP : 비연결지향, 체크섬, 간단한 프로토콜, 높은 처리량 등
- 소켓
- 리눅스에서 제공하는 고수준 인터페이스
- TCP or UDP 포트 + IP 주소로 구성된 고유한 ID를 가진 통신의 엔드포인트
- 호스트 사이의 종단 간 통신 제어
- 패킷의 전송되는 방식
- 포트 개념과 데이터 무결성
- TCP / UDP 담당
- Application
- DNS
- A / AAAA Record, CNAME, SRV ..
- ex. SSH, Web, SCP, NFS ..
- DNS
- Link
8장 - 관측 가능성
- Observability -> 외부에서 정보를 측정하여 시스템 내부의 상태를 평가 -> 이후 후속조치
- 시그널
- Log
- Text Paylaod
- 구조화
- 가장 강력한 시그널 유형
- Metric
- 샘플링된 숫자 데이터 포인트로 시계열 형성
- 원시 지표 직접 사용보다는 Aggregation, 그래픽 표현등으로 활용
- 카운터, 게이지, 히스토그램
- Trace
- 런타임 정보의 동적 모음
- Log
- 리눅스 로깅
- Syslog
- 오래됬음에도 여전히 사용되고 있음
- Journalctl
- 바이너리 형식 -> 장점으로 빠르게 저장 및 공간 확보 용이, 단점으로 journalctl 통해서 접근 및 제어
- Syslog
- 프로메테우스와 그라파나
9장 - 심화주제
- IPC (프로세스 간 통신)
- 시그널
- 커널의 특정 이벤트를 -> User 영역 내 특정 프로세스에 알리기 위해서 개발됨
- 다양한 시그널 종류 사용 가능
trap
통해 커스텀 핸들러 구현
- Named Pipe
- 파일처럼 다루면 되서 사용하기 쉬움
- 단, 하나의 방향과 하나의 컨슈머만 지원
- 시그널
- VM
- Hardware : CPU 가상화 지원 필요
- Kernel : KVM (가상화 확장을 지원하는 x86 HW 용 리눅스 네이티브 가상화 솔루션)
- User : VMM(KVM 인스터 관리 가상머신 모니터), Guent Kernel & Process
- 리눅스 배포판
- 레드햇 군 : RHEL, Fedora, CentOs, Rocky ..
- Debian 군 : Ubuntu, Mint ....
- 수세 군 : 오픈수세 ..
- 그 외...