AOC55

Backend, Devops, Cloud, kubernetes

DevOps/Linux

IT서적후기 :: 모던 리눅스 교과서

aoc55.soft@gmail.com 2024. 5. 12. 12:26

https://product.kyobobook.co.kr/detail/S000210138053

후기

클라우드 관련 서비스(특히 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를 가진 통신의 엔드포인트
      • 호스트 사이의 종단 간 통신 제어
      • 패킷의 전송되는 방식
      • 포트 개념과 데이터 무결성
    • Application
      • DNS
        • A / AAAA Record, CNAME, SRV ..
      • ex. SSH, Web, SCP, NFS ..

8장 - 관측 가능성

  • Observability -> 외부에서 정보를 측정하여 시스템 내부의 상태를 평가 -> 이후 후속조치
  • 시그널
    • Log
      • Text Paylaod
      • 구조화
      • 가장 강력한 시그널 유형
    • Metric
      • 샘플링된 숫자 데이터 포인트로 시계열 형성
      • 원시 지표 직접 사용보다는 Aggregation, 그래픽 표현등으로 활용
      • 카운터, 게이지, 히스토그램
    • Trace
      • 런타임 정보의 동적 모음
  • 리눅스 로깅
    • Syslog
      • 오래됬음에도 여전히 사용되고 있음
    • Journalctl
      • 바이너리 형식 -> 장점으로 빠르게 저장 및 공간 확보 용이, 단점으로 journalctl 통해서 접근 및 제어
  • 프로메테우스와 그라파나

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 ....
    • 수세 군 : 오픈수세 ..
    • 그 외...