Today I Learned - 리눅스 실무의 이해 문제풀이

2026.02.10 (TUE)


리눅스의 개요

POSIX

POSIX는 유닉스 계열 운영체제 간의 호환성을 보장하기 위한 표준이다.

리눅스 파일시스템

시대파일 시스템핵심 키워드
태동기Minix / ext리눅스의 시작, 64MB의 한계
안정기ext2표준 확립, 하지만 복구에 취약
발전기ext3저널링 도입으로 안정성 확보
성숙기ext4대용량 지원, Extent 도입 (현재 표준)
현대XFS / Btrfs기업용 서버 표준, 엔터프라이즈 최적화

공유 라이브러리

공유 라이브러리를 통해 메모리를 효율적으로 사용한다.
효율적인 이유는 실행 파일에 라이브러리를 직접 넣지 않고 공유 라이브러리에서 가져와 사용하기 때문이다.

가상 콘솔

GUI가 없는 환경에서 서버와 같은 작업을 돌릴 시 유용한데, 여러 개의 콘솔을 띄워놓고 작업을 할 수 있다.
단, 가상 콘솔은 물리적인 콘솔이 아니기 때문에, 가상 콘솔에서 작업을 하다가 물리적인 콘솔로 이동하면 작업 내용이 사라진다.

GNU(그누)

“GNU is not Unix”
유닉스는 당시 비싸고 소스코드도 공개되지 않았다.
그래서 리처드 스톨먼이 유닉스와 호환되면서도 무료인 운영체제를 만들고자 했다.
그것이 바로 GNU이다.

GNU의 도구 + 리눅스 커널 = 리눅스 운영체제

KDE

KDE는 리눅스용 데스크톱 환경이다.

EMACS

EMACS는 리눅스용 텍스트 에디터이다.

LGPL

GPL: GPL 코드를 조금이라도 가져다 쓰거나 연결(Link)하면, 그 프로그램 전체가 GPL이 되어 소스 코드를 공개해야 한다.

LGPL: LGPL로 된 라이브러리를 단순히 연결(Link)해서 사용하는 경우에는, 본인이 만든 프로그램의 소스 코드를 공개할 의무가 없다.

공유 라이브러리에 적용하기 위해 만들어졌다.

MPL

Mozilla Public License

파일 단위의 카피레프트

  • GPL (전체주의): 소스 한 줄만 섞여도 프로그램 전체 소스를 공개해야 한다.

  • MPL (개인주의/파일단위): 내가 MPL로 된 파일을 가져와서 수정했다면, 그 파일의 소스만 공개하면 된다. 내가 새로 만든 다른 파일들은 굳이 공개할 필요가 없다.

BSD 라이센스

최소한의 의무: 저작권자 표기(Copyright notice)와 보증 부인(면책 조항)만 유지하면 된다.

상용화의 천국: 이 코드를 가져다가 소스를 꽁꽁 숨긴 채로 비싼 값에 팔아도 아무런 법적 문제가 없다.

HPC

High Performance Computing

  • 고성능 컴퓨팅

  • 여러 컴퓨터를 병렬로 묶어서 구성 (for 슈퍼컴퓨터)

HA 클러스터

High Availability Cluster

  • 고가용성 클러스터

  • 서버의 가용성을 높이기 위해 여러 대의 서버를 묶어서 구성

  • 서버가 끊기지 않게…

  • ex) 은행, 병원, 관공서 등

부하분산 클러스터

Load Balancing Cluster

  • 부하 분산 클러스터

  • 여러 대의 서버에 부하를 분산하여 구성

  • 로드밸런서

  • ex) 네이버, 구글 등 트래픽이 많은 웹사이트

임베디드 시스템

Embedded System

  • 내장 시스템

  • 하드웨어에 운영체제가 내장된 시스템

  • ex) 스마트폰, 자동차, 가전제품 등

사용자모드 and 커널모드

사용자 모드: 일반 프로그램이 실행되는 공간

커널 모드: 운영체제가 실행되는 공간

  • 일반 사용자가 커널 모드 메모리의 접근을 막음으로서, 시스템의 안정성을 높인다.

리눅스 시스템의 이해

저장 인터페이스

구분IDE (PATA)SATASCSIUSB
풀네임Integrated Drive ElectronicsSerial ATASmall Computer System InterfaceUniversal Serial Bus
전송 방식병렬 (Parallel)직렬 (Serial)병렬/직렬 (SAS)직렬 (Serial)
주요 용도구형 PC (현재 거의 퇴출)“일반 PC, 서버 저장장치”“고성능 서버, 워크스테이션”“외장형 저장장치, 주변기기”
장치 파일“/dev/hda, /dev/hdb”“/dev/sda, /dev/sdb”“/dev/sda, /dev/sdb”“/dev/sda, /dev/sdb”

RAID

RAID란, 여러 개의 하드디스크를 하나의 논리적인 디스크처럼 사용하는 기술이다.

종류이름특징장점단점
RAID 0스트라이핑(Striping)데이터를 여러 디스크에 나누어 저장속도 최상디스크 하나만 고장 나도 데이터 전멸
RAID 1미러링(Mirroring)두 디스크에 똑같은 내용을 저장안정성 최상전체 용량의 50%만 사용 가능 (비용 비쌈)
RAID 5패리티(Parity)데이터와 오류 복구용 패리티를 분산 저장효율성+안정성최소 3개 이상의 디스크 필요
RAID 6이중 패리티패리티를 두 군데 저장매우 높은 안정성최소 4개 이상의 디스크 필요
RAID 101+0미러링(1)을 먼저 하고 스트라이핑(0)속도와 안정성 모두 잡음비용이 가장 많이 듦

RAID 5는 전체 디스크 중 딱 1대 분량의 용량을 ‘패리티(오류 복구 정보)’ 저장용으로 사용한다. (전체 디스크 개수 - 1) × 디스크 1개의 용량

LVM

LVM은 Logical Volume Manager의 약자로, 리눅스에서 디스크를 유연하게 관리하기 위한 기술이다.

여러 개의 디스크(PV)를 하나로 묶어서 사용하는 기술로서, 사용 중에 파티션의 크기를 줄이거나 늘릴 수 있다.

용어이름비유설명
PVPhysical Volume레고 판/dev/sda1 같은 실제 물리 디스크를 LVM에서 쓸 수 있게 준비시킨 상태
PEPhysical Extent레고 블록 한 칸LVM의 최소 저장 단위. PV를 일정한 크기(기본 4MB)로 쪼갠 알갱이
VGVolume Group레고 상자여러 개의 PV(레고 판)를 하나로 합쳐놓은 커다란 용량 뭉치
LVLogical Volume레고 완성품사용자가 VG 상자 안에서 PE(블록)들을 모아 만든 실제 파티션. 여기에 포맷을 하고 데이터를 저장

Configure Files

구분.conf.cfg
주요 용도일반적인 서비스 및 어플리케이션 설정“부트로더, 시스템 빌드, 자동 설치 설정”
수정 방식사용자가 수동으로 자주 수정함수동 수정보다는 도구를 통한 생성이 많음
인식서비스가 구동될 때 읽어 들임부팅 단계나 설치 단계에서 주로 참조됨

grub2-mkconfig -o grub.cfg

  1. GRUB2 Make Configuration
  2. Output (생성된 설정 내용을 어디에 저장할지 파일 경로를 지정)
  3. GRUB2가 부팅될 때 실제로 읽어 들이는 최종 설정 파일

/etc/rc.d/rc.local

rc는 Run Control의 약자로, 부팅 시 커널이 서비스를 관리하기 위해 참조하는 디렉터리

rc.local - 해당 서버(Local)에서만 사용하는 사용자 정의 부팅 스크립트

실행 레벨

시스템이 부팅된 후 어떤 상태로 동작할지를 결정하는 모드

레벨이름설명
0Halt시스템 종료 (이 레벨로 설정하면 부팅하자마자 꺼짐)
1Single User단일 사용자 모드 (관리자 복구 모드, 네트워크 불가)
2Multi-UserNFS(네트워크 파일 시스템)가 없는 다중 사용자 모드
3Full Multi-User콘솔 모드 (네트워크 지원, 텍스트 기반 다중 사용자 모드)
4Unused사용되지 않음 (사용자 정의 가능)
5X11 (GUI)그래픽 모드 (레벨 3에 GUI 환경이 추가된 상태)
6Reboot시스템 재부팅

etc/motd

Message of the Day의 약자로, 시스템에 로그인할 때 사용자에게 보여주는 메시지 파일이다.

XFree86, X.Org

XFree86은 리눅스에서 사용되는 X 윈도우 시스템의 한 종류로, X.Org는 XFree86을 계승한 오픈 소스 프로젝트이다.

X Window에서의 X 클라이언트와 X 서버

X 클라이언트: X 윈도우 시스템에서 실행되는 응용 프로그램 (예: Firefox, 터미널, 텍스트 에디터)

X 서버: X 클라이언트가 실행될 때 그래픽을 화면에 표시해주는 프로그램 (예: Xorg, XFree86)

두 역할이 반대로 의미하고 있는 느낌이 있기 때문에 헷갈리면 안된다.

Xlib

Xlib는 X 윈도우 시스템에서 사용되는 라이브러리로, X 클라이언트가 X 서버와 통신하기 위해 사용된다.

개발자가 X서버에 보내기 위한 특정 프로토콜을 직접 구현하기 어렵기 때문에, Xlib를 통해 X서버와 통신한다.

  • 계층 구조에서의 위치
    • 응용 프로그램: 웹 브라우저, 게임 등
    • 고수준 툴킷: GTK (GNOME 기반), Qt (KDE 기반)
    • 저수준 라이브러리: Xlib 또는 XCB (Xlib의 대안)
    • X 서버: X.org (실제 화면을 그림)

XCB: Xlib의 대안으로, Xlib보다 더 가볍고 효율적이다.

Xt: Xlib 위에 구축된 라이브러리로, Xlib보다 더 사용하기 쉽다.

  • 현재 시스템에 설정된 런레벨 정보
    • systemctl get-default
  • 런레벨 변경: X윈도로 부팅하는 환경 만들기
    • systemctl set-default graphical.target

GNOME, KDE, X Window System

  • GNOME: 리눅스 데스크톱 환경 중 하나로, X 윈도우 시스템을 기반으로 한다. (GTK 툴킷 사용)
  • KDE: 리눅스 데스크톱 환경 중 하나로, X 윈도우 시스템을 기반으로 한다. (Qt 툴킷 사용)
  • X Window System: 리눅스에서 사용되는 그래픽 사용자 인터페이스 시스템

윈도 매니저

윈도 매니저란 X 윈도우 시스템에서 실행되는 응용 프로그램의 창을 관리하는 프로그램이다.

  • 윈도의 배치와 표현 담당
  • ex) 창 닫기, 최소화 및 최대화, 태스크바

cat /etc/shells

사용자가 로그인 쉘로 사용할 수 있는 공식적인 쉘들의 목록 출력

chsh

Change Shell의 약자로, 사용자의 로그인 쉘을 변경하는 명령어이다.
-s: 쉘 경로 지정 -l: 쉘 목록 출력

chsh만 입력하는 것으로 사용가능한 셸 목록을 확인할 수 있다.

etc/passwd

사용자 계정 정보를 담고 있는 파일이다.

/etc/bashrc

Bash 쉘의 설정을 담고 있는 파일이다.

!와 ?

!

히스토리와 관련된 기능을 제공한다.

  • !n: n번째 히스토리 실행
  • !-n: n번째 전 히스토리 실행
  • !!: 바로 전 히스토리 실행
  • !string: string으로 시작하는 가장 최근 히스토리 실행
  • !?string: string을 포함하는 가장 최근 히스토리 실행

?

히스토리에서 특정 문자열을 포함하는 명령어를 찾을 때 사용한다.

  • ?string: string을 포함하는 가장 최근 히스토리 실행

  • *: 모든 문자열
  • ?: 단 하나의 문자

.bash_profile

로그인 쉘이 시작될 때 읽어 들이는 파일이다.
개인 사용자의 환경 변수와 시작 프로그램 관련 설정 시 사용하는 파일이다.