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) | SATA | SCSI | USB |
|---|---|---|---|---|
| 풀네임 | Integrated Drive Electronics | Serial ATA | Small Computer System Interface | Universal 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 10 | 1+0 | 미러링(1)을 먼저 하고 스트라이핑(0) | 속도와 안정성 모두 잡음 | 비용이 가장 많이 듦 |
RAID 5는 전체 디스크 중 딱 1대 분량의 용량을 ‘패리티(오류 복구 정보)’ 저장용으로 사용한다. (전체 디스크 개수 - 1) × 디스크 1개의 용량
LVM
LVM은 Logical Volume Manager의 약자로, 리눅스에서 디스크를 유연하게 관리하기 위한 기술이다.
여러 개의 디스크(PV)를 하나로 묶어서 사용하는 기술로서, 사용 중에 파티션의 크기를 줄이거나 늘릴 수 있다.
| 용어 | 이름 | 비유 | 설명 |
|---|---|---|---|
| PV | Physical Volume | 레고 판 | /dev/sda1 같은 실제 물리 디스크를 LVM에서 쓸 수 있게 준비시킨 상태 |
| PE | Physical Extent | 레고 블록 한 칸 | LVM의 최소 저장 단위. PV를 일정한 크기(기본 4MB)로 쪼갠 알갱이 |
| VG | Volume Group | 레고 상자 | 여러 개의 PV(레고 판)를 하나로 합쳐놓은 커다란 용량 뭉치 |
| LV | Logical Volume | 레고 완성품 | 사용자가 VG 상자 안에서 PE(블록)들을 모아 만든 실제 파티션. 여기에 포맷을 하고 데이터를 저장 |
Configure Files
| 구분 | .conf | .cfg |
|---|---|---|
| 주요 용도 | 일반적인 서비스 및 어플리케이션 설정 | “부트로더, 시스템 빌드, 자동 설치 설정” |
| 수정 방식 | 사용자가 수동으로 자주 수정함 | 수동 수정보다는 도구를 통한 생성이 많음 |
| 인식 | 서비스가 구동될 때 읽어 들임 | 부팅 단계나 설치 단계에서 주로 참조됨 |
grub2-mkconfig -o grub.cfg
- GRUB2 Make Configuration
- Output (생성된 설정 내용을 어디에 저장할지 파일 경로를 지정)
- GRUB2가 부팅될 때 실제로 읽어 들이는 최종 설정 파일
/etc/rc.d/rc.local
rc는 Run Control의 약자로, 부팅 시 커널이 서비스를 관리하기 위해 참조하는 디렉터리
rc.local - 해당 서버(Local)에서만 사용하는 사용자 정의 부팅 스크립트
실행 레벨
시스템이 부팅된 후 어떤 상태로 동작할지를 결정하는 모드
| 레벨 | 이름 | 설명 |
|---|---|---|
| 0 | Halt | 시스템 종료 (이 레벨로 설정하면 부팅하자마자 꺼짐) |
| 1 | Single User | 단일 사용자 모드 (관리자 복구 모드, 네트워크 불가) |
| 2 | Multi-User | NFS(네트워크 파일 시스템)가 없는 다중 사용자 모드 |
| 3 | Full Multi-User | 콘솔 모드 (네트워크 지원, 텍스트 기반 다중 사용자 모드) |
| 4 | Unused | 사용되지 않음 (사용자 정의 가능) |
| 5 | X11 (GUI) | 그래픽 모드 (레벨 3에 GUI 환경이 추가된 상태) |
| 6 | Reboot | 시스템 재부팅 |
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
로그인 쉘이 시작될 때 읽어 들이는 파일이다.
개인 사용자의 환경 변수와 시작 프로그램 관련 설정 시 사용하는 파일이다.