리눅스마스터 2급 1차 · 7일 벼락치기 가이드
2차 자료
D-day 계산 중…
cat README.md

리눅스마스터 2급 1차
7일 벼락치기 완전 가이드

리눅스를 처음 공부하는 사람도 이해할 수 있게, 어려운 용어는 전부 일상적인 비유로 풀어 썼습니다. 하루에 한 챕터씩 훑고, 마지막 챕터에서 헷갈리는 함정 문제로 마무리하는 구성이에요. 왼쪽 위 ☰ 버튼을 누르면 언제든 목차로 이동할 수 있습니다.

🔖 북마크 기능 안내
각 챕터·섹션 제목 옆에 아이콘이 있어요. 시험 전에 자주 헷갈리는 개념이나 다시 보고 싶은 부분을 눌러서 표시해두면, 이 브라우저에 계속 저장됩니다. 페이지를 새로고침하거나 껐다 켜도 사라지지 않으니, 시험 전까지 두고두고 복습용으로 써보세요. (자동으로 지워지지 않으니 다음 회차 시험 준비할 때도 그대로 남아있어요. 다른 기기·다른 브라우저와는 공유되지 않고, 이 브라우저에서만 저장됩니다)
guest@linux-master:~/ch01$ cat chapter-1.md

📘 리눅스란 무엇인가

1-1. 리눅스의 탄생 배경

컴퓨터를 움직이려면 운영체제(OS)가 필요합니다. 1990년대 초에는 유닉스(UNIX)라는 OS가 있었는데, 비싸고 회사마다 소스코드를 공개하지 않아서 개인이 마음대로 고쳐 쓸 수 없었습니다.

이때 핀란드 헬싱키 대학생이었던 리누스 토발즈(Linus Torvalds)가 "누구나 고쳐 쓸 수 있는 OS 커널"을 1991년에 직접 만들어서 인터넷에 공개했습니다. 이게 바로 리눅스 커널의 시작입니다. (참고로 리누스는 대학 다닐 때 미닉스(MINIX)라는 교육용 유닉스를 보고 공부하면서 리눅스를 만들었어요. 그래서 "미닉스가 리눅스 개발의 시발점"이라는 문장이 시험에 자주 나옵니다.)

💡 커널(Kernel)이 뭐예요? 커널은 컴퓨터의 "심장"입니다. 하드웨어(CPU, 메모리, 디스크 등)를 직접 제어하고, 프로그램들이 실행될 수 있는 환경을 만들어주는 가장 핵심적인 소프트웨어예요. 좁은 의미에서 "운영체제 = 커널"이라고 부르기도 합니다. 커널 버전은 uname -r 명령으로 확인할 수 있습니다.

1-2. 리눅스의 특징 (시험에 "틀린 것 고르기"로 자주 나옴)

  • 다중 사용자(Multi-user): 여러 사람이 동시에 로그인해서 각자 작업 가능
  • 다중 처리(Multi-tasking): 여러 프로그램을 동시에 실행 가능, 그것도 선점형(preemptive) (선점형이란 "OS가 각 프로그램에게 순서를 강제로 나눠준다"는 뜻입니다. 반대로 비선점형은 프로그램이 알아서 자리를 양보해야 하는데, 리눅스는 그렇지 않아요. → "리눅스는 비선점형 멀티태스킹을 지원한다"는 문장이 나오면 오답)

  • TCP/IP 네트워킹 기본 지원

  • 다양한 파일시스템 지원: 윈도우(FAT/NTFS), 맥, 유닉스 계열 등 여러 파일시스템을 인식 가능
  • 동적 라이브러리 지원: 프로그램에 필요한 공통 기능(루틴)을 매번 프로그램 안에 넣어두지 않고, 실행할 때 필요한 만큼만 불러와서 씁니다. 그래서 메모리를 효율적으로 씁니다. (→ "리눅스는 동적 라이브러리를 제공하지 않는다"는 문장이 나오면 오답)

  • 커널은 대부분 C 언어로 작성되어 있습니다. (→ "COBOL로 작성"이라는 보기는 오답)

  • POSIX라는 국제 표준을 따르고 있습니다.
  • 배포판을 만드는 회사(레드햇 등)가 자체적으로 커널/프로그램을 개발하는 것도 자유롭습니다. (→ "배포판 회사는 개발 작업이 금지되어 있다"는 문장은 오답)

1-3. GNU 프로젝트와 리처드 스톨만

  • 리누스가 리눅스 커널을 만들기 전부터, 리처드 스톨만(Richard Stallman)이라는 사람은 "소프트웨어는 자유롭게 쓰고 고칠 수 있어야 한다"는 철학으로 GNU 프로젝트를 시작했습니다. (GNU = "GNU is Not Unix"라는 재귀적 이름)

  • 스톨만은 이 철학을 실천하기 위해 FSF(자유 소프트웨어 재단, Free Software Foundation)을 설립했습니다.

  • 우리가 쓰는 "리눅스"는 사실 리눅스 커널 + GNU 프로젝트의 각종 프로그램(컴파일러, 쉘, 기본 명령어 등)이 합쳐진 것이라서, 정확한 명칭은 GNU/Linux입니다.

  • ⚠️ 함정: "GNU 프로젝트는 최초로 UNIX를 개발한 프로젝트다" → 틀림! GNU는 UNIX를 만든 게 아니라 "UNIX처럼 동작하지만 자유롭게 쓸 수 있는" 프로그램들을 만드는 프로젝트입니다.

  • ⚠️ 함정: "GNU 프로젝트와 관련 없는 것을 고르시오" 문제에서 Windows 2000이 정답으로 자주 나옵니다. (Windows는 마이크로소프트의 상업적 폐쇄형 OS라서 GNU와 정반대 개념이에요)

1-4. 오픈소스 라이선스 (누가 소스코드를 공개해야 하는가)

소프트웨어를 무료로 공개해도, "고쳐서 팔아도 되는지", "고친 걸 공개해야 하는지"는 라이선스마다 다릅니다. 아래 표를 통째로 외우기보다는, "결합/재배포할 때 소스 공개 의무가 있는가" 라는 기준으로 이해하면 쉽습니다.

라이선스 소스 공개 의무 상용(비공개) 프로그램에 결합 가능? 대표 예시
GPL 수정하면 반드시 공개 불가능 (GPL 적용됨) 리눅스 커널
LGPL 라이브러리 형태로 "가져다 쓰기"만 하면 공개 의무 없음 가능 -
BSD 수정 후에도 공개 안 해도 됨 가능 -
MIT 수정 후에도 공개 안 해도 됨 가능 X Window System, jQuery, Node.js
MPL 그 파일 자체는 공개해야 하지만, 결합된 다른 파일은 비공개 가능 부분적으로 가능 Firefox
Apache 수정 후에도 공개 안 해도 됨 가능 Hadoop
  • ⚠️ 함정: "자유 소프트웨어는 무료로 얻었으니 무조건 무료로만 재배포해야 한다" → 틀림! 자유 소프트웨어는 상업적 목적으로 판매하는 것도 가능합니다. (단, GPL이면 소스코드는 공개해야 함)

  • "리눅스와 가장 관련 없는 개념은?" 문제에서 Copyright(저작권 독점)가 정답으로 나옵니다. (리눅스는 반대로 Copyleft 정신을 따릅니다)

1-5. 배포판(Distribution)이란?

커널 하나만 있으면 컴퓨터를 쓸 수 없어요. 여기에 설치 프로그램, 각종 유틸리티, 데스크톱 환경 등을 묶어서 "설치해서 바로 쓸 수 있게" 포장한 것이 배포판입니다. (마치 "리눅스 커널"이 재료라면, 배포판은 완성된 요리)

계열 대표 배포판 기억 포인트
레드햇 계열 RHEL, CentOS, Fedora Fedora는 6개월마다 새 버전, 지원 기간 짧음
데비안 계열 Ubuntu, Kali Linux Ubuntu = 영국 캐노니컬社가 데비안 기반으로 만듦, 유니티(Unity) 데스크톱 사용 / Kali = 해킹 도구가 잔뜩 들어있는 보안 전문 배포판
슬랙웨어 계열 SUSE, Slackware -
국내 배포판 SULinux "국내에서 배포하는 리눅스는?" 문제 정답
리눅스 커널 기반이지만 조금 다른 것 안드로이드, 바다 OS 리눅스 커널을 쓰지만 배포판이라기보단 별도 플랫폼
  • ⚠️ 함정: 리눅스 배포판을 구성하는 요소를 고르는 문제에서 허드(Hurd)가 "포함 안 되는 것"으로 나옵니다. (Hurd는 GNU 프로젝트의 또 다른 커널 시도였지 리눅스 배포판 구성 요소가 아니에요)

  • ⚠️ 함정: "리눅스 배포판 중 종류가 다른 것 고르기" → 나머지가 레드햇 계열(RHEL, CentOS, Fedora)이면 UbuntuLinux Mint가 정답 (데비안 계열이라서 성격이 다름)

💡 설치 시 패키지 그룹
리눅스를 설치할 때 용도별로 패키지 그룹을 골라 한 번에 설치할 수 있어요. Web Server(Apache 등 웹 서버), Database Server(MySQL·MariaDB·PostgreSQL 등 DB), Virtualization / Virtual Host(KVM·Xen 등 가상화), Software Development Workstation(gcc 등 개발 도구) 같은 그룹이 대표적입니다.

guest@linux-master:~/ch02$ cat chapter-2.md

📘 리눅스의 집 구조 (디렉토리)

리눅스는 윈도우처럼 C드라이브, D드라이브가 따로 있는 게 아니라, "/" (루트) 라는 최상위 디렉토리 하나에서 시작해 나뭇가지처럼 뻗어나가는 트리(tree) 구조입니다.

/
├── bin     ← 기본 실행 명령어들 (ls, cp 등)
├── boot    ← 부팅에 필요한 파일 (커널 이미지!)
├── dev     ← 장치 파일 (하드디스크, USB 등도 "파일"처럼 다룸)
├── etc     ← 시스템 설정 파일들
├── home    ← 각 사용자의 홈 디렉토리 (예: /home/kim)
├── lib     ← 라이브러리 파일
├── mnt     ← 외부 장치를 연결(마운트)하는 자리
├── proc    ← 실제 파일이 아니라, 시스템 정보를 보여주는 "가상" 디렉토리
├── root    ← 관리자(root) 계정의 홈
├── sbin    ← 시스템 관리용 명령어
├── tmp     ← 임시 파일
├── usr     ← 응용 프로그램, 라이브러리
└── var     ← 로그 파일처럼 계속 변하는 데이터

꼭 기억해야 할 디렉토리별 함정

  • /proc: 실제로 디스크에 저장된 파일이 아니라, 메모리 상에서 시스템 정보(프로세스, 하드웨어 상태)를 실시간으로 보여주는 "가짜" 디렉토리입니다. 예를 들어 /proc/partitions를 보면 현재 파티션 분할 상태를 볼 수 있어요.

  • /lost+found: 파일시스템에 오류가 생겼을 때 복구된 조각들이 담기는 디렉토리

  • /opt: 추가로 설치하는 응용 프로그램용 디렉토리입니다. ⚠️ "opt에는 각 장치에 필요한 socket 및 log 파일이 있다" → 틀린 설명 (그건 /var나 /dev 관련 얘기예요)

  • /boot: 커널이 저장된 곳! "커널이 들어있는 디렉토리는?" → 정답 /boot

  • ⚠️ 초강력 함정: "/" 바로 밑에 있는 디렉토리가 아닌 것"을 고르는 문제에 /include가 자주 나옵니다. → /include는 리눅스 디렉토리 구조에 아예 존재하지 않습니다. (C언어 헤더파일과 헷갈리게 만든 함정)

guest@linux-master:~/ch03$ cat chapter-3.md

📘 하드디스크를 나누는 법 (파티션 · 파일시스템)

3-1. 파티션이 뭐예요?

하나의 물리적인 하드디스크를 여러 개의 논리적인 구역으로 나누는 것을 파티션(Partition)이라고 합니다. 큰 창고 하나를 여러 개의 방으로 나눠 쓰는 것과 비슷해요.

왜 나눌까요?

  • 파일시스템 점검(검사) 시간이 짧아짐
  • 백업하기 편함
  • 특정 파티션만 따로 보호 가능 (예: /home만 따로 백업)
  • 안정성: 만약 루트(/) 파티션에 문제가 생겨도, 다른 파티션(/home 등)의 자료는 안전하게 보존됨

3-2. 파티션의 종류 (제일 헷갈리는 부분!)

하나의 물리 디스크에는 규칙이 있습니다:

  1. 주(Primary) 파티션: 최대 4개까지만 만들 수 있음
  2. 만약 5개 이상 필요하다면? → 4개의 주 파티션 자리 중 1개를 "확장(Extended) 파티션"으로 바꿔야 함 (확장 파티션은 디스크 하나에 딱 1개만 만들 수 있어요!)
  3. 이 확장 파티션 "안"에다가 원하는 만큼 여러 개의 논리(Logical) 파티션을 만들 수 있음 (논리 파티션의 번호는 항상 5번부터 시작합니다. 1~4번은 주 파티션/확장 파티션 자리이기 때문)
[디스크 1개]
 ├─ 주파티션1 (/dev/sda1)
 ├─ 주파티션2 (/dev/sda2)
 ├─ 주파티션3 (/dev/sda3)
 └─ 확장파티션 (/dev/sda4)  ← 이 안에 논리파티션들이 들어감
      ├─ 논리파티션5 (/dev/sda5)
      ├─ 논리파티션6 (/dev/sda6)
      └─ ...
  • ⚠️ 함정: "확장 파티션은 2개 이상 설정 가능하다" → 틀림! 디스크 1개당 딱 1개만 가능
  • ⚠️ 함정: "주 파티션 4개 사용 후 확장 파티션을 선언할 수 있다" → 틀림! (4개를 다 채우면 확장 파티션을 넣을 자리가 없어요. 확장 파티션은 4개 "중의 하나"로 만드는 것)

  • IDE 디스크는 최대 63개, SCSI 디스크는 최대 15개 파티션까지 가능

3-3. 파티션 분할 도구

fdisk, parted, Disk Druid(그래픽 설치 도구) 등을 사용합니다. (partprobe는 분할 도구가 아니라 커널에게 파티션 테이블이 바뀌었다고 알려주는 명령이라 헷갈리지 마세요)

3-4. 어떤 디렉토리를 따로 파티션으로 나누는 게 좋을까?

/home, /var, /usr, /tmp 는 따로 분리하는 걸 권장합니다. (반면 /etc는 시스템 설정 파일이 있는 곳이라 굳이 따로 분리할 필요가 없어요 → "분할 권장 영역이 아닌 것"의 정답으로 자주 등장)

3-5. 장치 파일명 규칙 (IDE 디스크 기준)

옛날 IDE 방식 하드디스크는 컴퓨터 한 대에 최대 4개까지 연결 가능했고, 이름이 이렇게 붙습니다:

장치명 의미
/dev/hda 첫 번째(Primary) 채널의 Master
/dev/hdb 첫 번째(Primary) 채널의 Slave
/dev/hdc 두 번째(Secondary) 채널의 Master
/dev/hdd 두 번째(Secondary) 채널의 Slave

→ "Secondary Slave에 연결된 장치 파일명은?" 문제의 정답은 /dev/hdd

SATA · SCSI · USB 디스크는 hd가 아니라 sd를 씁니다. 첫 번째 디스크가 /dev/sda, 두 번째가 /dev/sdb … 순이고, USB 저장장치도 SCSI 계열로 취급돼 sd로 인식됩니다. (요즘 리눅스는 대부분 sd)

💡 특수 저장 장치 (Specialized Storage Devices)
설치 시 저장장치 선택 화면에는 SAN · iSCSI · FCoE 같은 네트워크 기반 저장장치를 "특수 저장 장치"로 따로 분류합니다. 반면 SCSI는 로컬 디스크를 연결하는 기본 인터페이스라 특수 저장 장치가 아니에요.

3-6. 스왑(Swap)

컴퓨터의 실제 메모리(RAM)가 부족할 때, 하드디스크의 일부 공간을 마치 메모리처럼 사용하는 기술입니다. (속도는 RAM보다 느리지만 없어서 시스템이 멈추는 것보단 낫겠죠?)

  • 파티션 타입 ID는 82
  • 옛날 기준으로 RAM이 1GB면 스왑은 2GB 정도를 권장했습니다 (요즘은 상황에 따라 다르지만 시험 기준은 이 정도)

3-7. 파일시스템 종류

💡 파일시스템(File System)이 뭐예요? 디스크에 저장된 데이터(0과 1)를 "파일"과 "폴더"라는 형태로 정리해서 우리가 이름으로 찾고 읽고 쓸 수 있게 해주는 저장 방식/규칙입니다. (같은 디스크라도 어떤 파일시스템으로 "포맷"하느냐에 따라 ext4가 되기도, NTFS가 되기도 합니다)

구분 종류
저널링 파일시스템 (기록을 남겨서 시스템 다운 시에도 빠르게 복구 가능) ext3, ext4, JFS, XFS, ReiserFS
저널링 아닌 ext2
네트워크 파일시스템 (다른 컴퓨터의 폴더를 내 것처럼 공유) SMB, CIFS, NFS
네트워크 파일시스템 아닌 것(헷갈림 주의) JFS (얘는 로컬 저널링 파일시스템이지 네트워크용이 아님)

3-8. LVM과 RAID (둘 다 "여러 개를 하나처럼 묶는" 기술이라 항상 같이 출제됨)

  • LVM (Logical Volume Manager): 여러 개의 디스크/파티션을 하나로 묶어서 사용하다가, 나중에 용량이 부족하면 크기를 유동적으로 늘리거나 줄일 수 있는 기술

  • RAID: 여러 개의 디스크를 묶어서 속도를 높이거나 데이터를 안전하게(중복 저장) 만드는 기술

  • "다수의 디스크나 파티션을 하나로 묶는 기술 조합은?" → 정답은 항상 LVM, RAID 조합

guest@linux-master:~/ch04$ cat chapter-4.md

📘 컴퓨터를 켤 때 벌어지는 일 (부팅 · 부트로더 · 런레벨)

4-1. 부팅 순서 (외우세요!)

① ROM BIOS 실행 (하드웨어 자체 점검)
    ↓
② 하드디스크의 MBR(맨 앞부분) 을 읽음 → 여기에 부트로더(LILO/GRUB)가 있음
    ↓
③ 부트로더가 리눅스 커널 이미지를 메모리로 로딩
    ↓
④ 커널이 init 프로세스를 실행 → 이때부터 각종 서비스가 순서대로 시작됨

4-2. 부트로더: LILO vs GRUB

컴퓨터에 리눅스 말고 윈도우도 같이 깔려있다면, "부팅할 때 어떤 OS로 들어갈지" 선택하는 메뉴가 필요합니다. 이 역할을 하는 프로그램이 부트로더입니다.

LILO (LInux LOader) — 예전에 쓰던 부트로더

  • 꼭 MBR에 설치해야 하는 건 아님 (다른 위치에도 설치 가능)
  • 특정 배포판(레드햇 등) 전용이 아니라 여러 배포판에서 사용 가능
  • 설정 파일 /etc/lilo.conf:
  • boot=/dev/hda → LILO가 설치될 위치
  • map=/boot/map → LILO가 자동으로 만드는 파일
  • install=/boot/boot.b → 부트섹터 정보를 담은 파일
  • timeout=50 → 키보드 입력이 없으면 자동 부팅까지 기다리는 시간 (단위가 1/10초라서 50 = 5초입니다!)
  • "LI"만 출력되고 멈추는 부팅 실패 증상 → 2단계 부트로더는 실행됐지만, Map 파일에서 디스크립터 테이블을 읽어오지 못했을 때 발생

GRUB (GRand Unified Bootloader) — LILO보다 나중에 나온, 더 많이 쓰이는 부트로더

  • IDE 하드디스크를 장착된 순서대로 인식
  • 정정 (2026.08.01) — 이 자료는 예전에 "GRUB은 부트 디스크를 통한 부팅을 지원하지 않는다"를 참인 문장이라고 안내했습니다. 사실이 아니라서 바로잡습니다.

    GRUB은 부트 디스크를 통한 부팅을 지원합니다. GRUB Legacy에는 부팅 플로피를 만드는 절차가 정식으로 있고 (grub-install /dev/fd0), GRUB2에는 grub-mkrescue로 CD·USB 구조 디스크를 만드는 기능이 있습니다. 요즘 쓰는 리눅스 설치 USB·라이브 USB가 부팅되는 것도 대부분 GRUB 덕분입니다. 네트워크 부팅(PXE/TFTP)도 GRUB은 되고 LILO는 안 됩니다. 즉 "부트 디스크·네트워크 부팅 지원"은 LILO에 없는 GRUB의 장점으로 외우는 게 맞습니다.

    ⚠️ 다만 원 기출 보기에는 이 문장이 뒤집힌 채로 실려 있었습니다. "LILO와 GRUB에 대한 설명으로 틀린 것은?" 문제의 ④번이 "GRUB에서는 부트 디스크를 통한 부팅을 지원하지 않는다"였는데, 그러면 정답인 ②번 "LILO는 컴퓨터 바이오스(BIOS)의 정보를 참조하지 않는다"와 함께 틀린 보기가 둘이 되어 버립니다. 이 자료에서는 33번 문항의 ④번 보기를 사실대로 바로잡아 실었습니다(정답은 ②로 동일). → 실제 기출 PDF 등에서 원래 형태를 만나더라도 정답은 그대로 ②이고, 개념은 "GRUB은 부트 디스크 부팅을 지원한다"로 기억하시면 됩니다.

  • timeout=10 → 10초 동안 대기한 후 기본 설정된 OS로 자동 부팅

  • (hd0,3) 표기법 → 첫 번째 디스크(hd0)의 4번째 파티션(콤마 뒤 숫자는 0부터 세므로 3=4번째)
  • GRUB 부팅 메뉴에서 누르는 키:
  • [a]: 커널에 매개변수를 추가로 입력할 때 (가장 간단한 방법)
  • [c]: 명령행 모드로 진입 (Bash Shell처럼 직접 명령어 입력 가능)
  • [e]: 설정 내용을 직접 편집

4-3. 런레벨(Run Level) — "지금 시스템이 어떤 모드로 켜져 있나"

레벨 의미
0 시스템 종료
1 단일 사용자 모드 (root 비밀번호 분실 시 복구용으로 사용!)
3 콘솔(텍스트) 모드 — 그래픽 없이 서버 용도로 자주 사용 (메모리 절약)
4 예약됨, 일반적으로 사용 안 함 (사용자가 정의해서 쓸 수는 있음)
5 그래픽 모드 (X-Window 실행)
6 재시작
  • "서버 용도로 X윈도 없이 메모리를 아끼려면?" → 런레벨 3
  • "root 패스워드를 잊어버렸을 때 복구용 런레벨은?" → 1

4-4. reboot / shutdown 명령

  • reboot: 파일시스템 언마운트 → shutdown 절차 수행 → 재부팅 순서로 동작합니다. ⚠️ "다중 사용자 모드에서는 reboot가 수행되지 않는다" → 틀림! 어떤 모드에서든 수행됩니다.

  • shutdown -h now : 즉시 종료(halt)

  • shutdown -r +10 : 10분 후 재부팅
  • shutdown -c : 예약된 shutdown 취소
  • shutdown -f : 재부팅 전 수행중인 프로세스에 kill 시그널을 보내서 강제 종료
  • 결과가 "재시작"으로 같은 것: reboot, init 6, shutdown -r / 결과가 "종료"로 같은 것: init 0, halt, poweroff

guest@linux-master:~/ch05$ cat chapter-5.md

📘 사용자와 권한 (계정 관리)

5-1. 계정 관련 명령어

명령어 설명
useradd 계정명 새 사용자 생성
passwd 계정명 비밀번호 설정/변경 (root가 남의 비밀번호도 바꿀 수 있음)
userdel 계정명 계정 삭제 (홈 디렉토리는 남아있음)
userdel -r 계정명 계정 삭제 시 홈 디렉토리까지 통째로 삭제
usermod 이미 만들어진 계정의 정보를 수정
usermod -g 그룹명 계정명 소속 그룹 변경
usermod -s 쉘경로 계정명 기본 로그인 쉘 변경
usermod -l 새이름 계정명 계정 이름 변경
usermod -e 날짜 계정명 계정 만료일 설정
groupadd/groupdel/groupmod -n(이름)/-g(GID) 그룹 생성/삭제/수정
  • useradd -f 5 lms : lms 계정이 앞으로 5일 동안만 사용 가능하도록 만료 유예기간 설정 (단순히 "우선순위를 낮춘다"가 아니에요!)

표에 있는 명령어를 전부 한 세션으로 실습해보면:

bash
root@linux-master:~# useradd lms  # 새 사용자 생성
root@linux-master:~# passwd lms  # 비밀번호 설정
New password:
Retype new password:
passwd: password updated successfully
root@linux-master:~# usermod -g dev lms  # 소속 그룹 변경
root@linux-master:~# usermod -s /bin/zsh lms  # 로그인 쉘 변경
root@linux-master:~# usermod -l lmsuser lms  # 계정 이름 변경
root@linux-master:~# usermod -e 2026-12-31 lmsuser  # 계정 만료일 설정
root@linux-master:~# groupadd dev  # 그룹 생성
root@linux-master:~# groupmod -n developers dev  # 그룹 이름 변경
root@linux-master:~# groupdel developers  # 그룹 삭제
# userdel lmsuser 라면 홈 디렉토리는 남겨두고 계정만 삭제
root@linux-master:~# userdel -r lmsuser  # 계정 + 홈 디렉토리까지 통째로 삭제

5-2. 계정 정보가 저장된 파일들

파일 내용
/etc/passwd 계정명, UID, GID, 홈 디렉토리, 기본 쉘 등 (비밀번호는 x라고만 표시되고 실제 값은 없음!)
/etc/shadow 실제 암호화된 비밀번호가 여기 저장됨. 일반 사용자는 읽기 권한조차 없음
/etc/group 그룹 정보
/etc/gshadow 그룹 관리자, 그룹 비밀번호 정보
/etc/login.defs 새 계정의 UID 최소/최대값, 홈 디렉토리 생성 여부 등 기본 정책
/etc/skel 계정을 새로 만들 때 자동으로 복사되는 기본 파일들(예: .bashrc 등)이 들어있는 원본 폴더
/etc/default/useradd 계정 생성 시 기본 홈 디렉토리 경로 등의 기본값 설정
/etc/issue 콘솔로 접속한 사용자에게 로그인 전에 보여줄 안내 메시지
/etc/issue.net telnet 등 원격으로 접속한 사용자에게 로그인 전에 보여줄 안내 메시지
/etc/motd 로그인에 성공한 뒤 출력되는 메시지 (Message Of The Day). 콘솔이든 telnet이든 접속 방식과 상관없이 이 파일 하나를 씁니다 (issue처럼 .net으로 갈리지 않음)
  • ⚠️ 아주 자주 나오는 함정: "/etc/passwd 파일에는 암호화된 패스워드가 저장되어 있다" → 틀림! 실제 암호는 /etc/shadow에 있고, /etc/passwd에는 그냥 x라는 표시만 있습니다.

  • ⚠️ 함정: "/etc/shadow 파일에 UID, GID 정보가 들어있다" → 틀림! 그건 /etc/passwd의 역할입니다.

  • ⚠️ 자주 헷갈리는 3종 세트 — 로컬 콘솔이면 /etc/issue, 원격(telnet)이면 /etc/issue.net, 로그인에 성공한 뒤면 /etc/motd입니다. 세 파일을 서로 바꿔서 보기로 내는 문제가 자주 나와요. (/etc/profile은 메시지가 아니라 전역 쉘 환경설정 파일입니다.)

5-3. 비밀번호 설정 규칙

  • 최소 6자 이상
  • 대소문자 구분함
  • 특수문자, 숫자 사용 가능
  • passwd 명령으로 비밀번호를 바꾸면 New password: 라는 프롬프트(입력 안내 문구)가 뜨는데, 여기에 새 비밀번호를 입력할 때 화면에 아무것도 표시되지 않습니다 (커서도, 별표()도 안 뜨는 경우가 많아요 — 보안을 위해 일부러 그렇게 만든 것) ⚠️ "입력한 암호가 화면에 그대로 표시된다" → 틀림!*

  • 한 번 설정한 비밀번호도 언제든지 다시 변경 가능합니다. ⚠️ "최초 설정 후에는 바꿀 수 없다" → 틀림!

5-4. 로그인한 사용자 확인하기

  • users : 현재 시스템에 로그인한 계정 목록
  • who, w : 누가, 언제부터, 어떤 작업을 하고 있는지 더 자세히
  • groups : 내가 속한 그룹 목록 확인
  • id : 내 UID/GID 확인

표에 있는 명령어를 전부 한 세션으로 실습해보면:

bash
guest@linux-master:~$ users  # 로그인한 계정 목록
guest kim
guest@linux-master:~$ who  # 누가 언제부터 접속했는지
guest   pts/0   2026-07-24 09:01
kim     pts/1   2026-07-24 08:50
guest@linux-master:~$ w  # 접속자 + 지금 뭐 하고 있는지까지
09:12:03 up 2:11, 2 users
USER  TTY   LOGIN@  IDLE  WHAT
guest pts/0 09:01   0.00s bash
kim   pts/1 08:50   3:00  vim
guest@linux-master:~$ groups  # 내가 속한 그룹 확인
guest dev
guest@linux-master:~$ id  # 내 UID/GID 확인
uid=1000(guest) gid=1000(guest) groups=1000(guest),1001(dev)

5-5. 파일 접근 권한 (chmod)

ls -l로 보면 맨 앞에 -rwxr-xr-- 같은 10자리가 나옵니다. 맨 앞 1자리는 종류(-파일, d디렉토리), 나머지 9자리를 3개씩 끊어서 읽습니다.

구획대상예시 rwx
앞 3자리소유자(user)rwx = 읽기·쓰기·실행 다 됨
가운데 3자리그룹(group)r-x = 읽기·실행만
뒤 3자리기타(other)r-- = 읽기만

각 권한은 숫자로도 표현합니다. 읽기(r)=4, 쓰기(w)=2, 실행(x)=1을 더해서 씁니다.

  • rwx = 4+2+1 = 7, r-x = 4+1 = 5, r-- = 4-rwxr-xr--754
  • chmod 755 file : 권한을 숫자로 한번에 지정 (소유자 rwx, 그룹·기타 r-x)
  • chmod u+x file : 기호로 지정 (소유자에게 실행 권한 추가). u=소유자, g=그룹, o=기타, a=전체
  • chmod -R 755 디렉토리 : 하위 디렉토리·파일까지 한꺼번에 변경
⚠️ 함정 포인트
권한 순서는 항상 소유자 → 그룹 → 기타, 권한 종류는 r → w → x 순서예요. 644(rw-r--r--)는 일반 파일, 755(rwxr-xr-x)는 실행 파일·디렉토리에 자주 쓰입니다.
guest@linux-master:~/ch06$ cat chapter-6.md

📘 진짜 많이 쓰는 명령어들

리눅스는 결국 "명령어 싸움"입니다. 아래 표만 확실히 외워도 절반은 갑니다. 비유: 리눅스 명령어는 마치 "짧은 영어 단어 약자"라서, 원래 의미를 알면 외우기 쉽습니다. (예: ls = list, cp = copy, mv = move, rm = remove, pwd = print working directory)

6-1. 파일 · 디렉토리 다루기

명령 원래 뜻 설명 & 자주 쓰는 옵션
pwd print working directory 현재 내가 있는 위치(절대경로) 출력
ls list 디렉토리 안의 목록 보기
-a: 숨김파일까지
-l: 상세정보(권한, 크기 등)
-R: 하위 디렉토리까지 전부
-r: 역순 정렬
-d: 디렉토리 "자체"의 정보만 보기
cd change directory 디렉토리 이동. cd ..(상위로), cd -(직전 위치로), cd(홈으로)
mkdir make directory 디렉토리 생성. -p: 중간 경로가 없어도 한번에 다 만들어줌
rmdir - 디렉토리만 삭제
cp copy 복사. -r: 디렉토리까지 통째로
-i: 덮어쓰기 전에 물어봄
-f: 무조건 강제로
mv move 이동, 또는 이름 바꾸기
rm remove 삭제. -r: 디렉토리까지
-i: 지우기 전에 하나씩 확인
touch - 파일의 접근/수정 시간을 지금 시간으로 갱신. 파일이 없으면 빈 새 파일을 만들어줌 (기존 파일이 있으면 내용은 그대로! 시간만 바뀜)
file - 이 파일이 어떤 종류인지 확인 (텍스트냐, 실행파일이냐 등)

표에 있는 명령어를 전부 한 세션으로 실습해보면:

bash
guest@linux-master:~$ pwd  # 현재 작업 디렉토리 경로 확인
/home/guest
guest@linux-master:~$ ls -al  # 숨김 파일까지 상세 정보로 나열
drwxr-xr-x 4 guest guest 4096 Jul 24 09:10 .
drwxr-xr-x 3 root  root  4096 Jul 20 03:00 ..
-rw-r--r-- 1 guest guest   45 Jul 24 09:05 note.txt
drwxr-xr-x 2 guest guest 4096 Jul 24 09:08 backup
guest@linux-master:~$ ls -d backup  # 디렉토리 자체 정보만 보기
backup
guest@linux-master:~$ ls -R  # 하위 디렉토리까지 전부 나열
.:
backup  note.txt

./backup:
old.log
guest@linux-master:~$ cd backup  # 하위 디렉토리로 이동
guest@linux-master:~/backup$ pwd
/home/guest/backup
guest@linux-master:~/backup$ cd ..  # 상위 디렉토리로 이동
guest@linux-master:~$ cd -  # 직전에 있던 디렉토리로 이동
/home/guest/backup
guest@linux-master:~/backup$ cd  # 인자 없이 → 홈 디렉토리로 이동
guest@linux-master:~$ mkdir -p project/src  # 중간 경로 없어도 한번에 생성
guest@linux-master:~$ rmdir project/src  # 빈 디렉토리 삭제
guest@linux-master:~$ cp -r backup project_backup  # 디렉토리째로 복사
guest@linux-master:~$ mv project_backup old_backup  # 이름 변경(이동)
guest@linux-master:~$ rm -i note.txt  # 삭제 전 확인 질문
rm: remove regular file 'note.txt'? y
guest@linux-master:~$ touch memo.txt  # 없으면 새 파일 생성, 있으면 시간만 갱신
guest@linux-master:~$ file memo.txt  # 파일 종류 확인
memo.txt: empty

6-2. 내용 보기 / 검색 / 비교

명령 설명
cat 파일 내용을 그대로 출력 (짧은 파일용) -n: 모든 줄 앞에 행 번호를 붙여서 출력 -b: 빈 줄은 빼고 번호를 붙임 -s: 연속된 빈 줄을 한 줄로 줄임 -v: 눈에 안 보이는 제어문자를 보이게 표시
more 화면 한 페이지씩 출력 (스페이스바로 다음 페이지)
less more보다 더 좋은 버전. 커서로 위아래 자유롭게 이동 가능
head 파일의 앞부분만 출력
tail 파일의 뒷부분만 출력. -f 옵션은 로그파일처럼 계속 추가되는 내용을 실시간으로 따라가며 보여줌
find 조건에 맞는 파일을 실제로 디스크를 뒤져가며 찾음 (느리지만 최신 상태 반영)
locate 미리 만들어둔 데이터베이스에서 빠르게 찾음. 단, 방금 생긴 파일은 못 찾을 수 있는데, 이때 updatedb로 DB를 갱신해야 함
grep 문자열 파일 파일 안에서 특정 문자열이 있는 줄을 찾아서 출력 -v: 그 문자열이 없는 줄만 -r: 하위 디렉토리까지 포함 -c: 몇 줄인지 개수만 -E: 정규식/여러 단어 OR 검색
cmp 파일1 파일2 두 파일을 바이트 단위로 비교해서 처음 달라지는 지점만 알려줌
diff 파일1 파일2 두 파일을 줄 단위로 비교해서 어디가 어떻게 다른지 자세히 보여줌
nl 각 줄에 행 번호만 붙여서 출력하는 전용 명령 (cat -n과 결과가 비슷함)
wc 파일의 줄 수, 단어 수, 문자 수를 출력
sort 파일 내용을 정렬
split 큰 파일 하나를 여러 개의 작은 파일로 쪼갬
cut -d: -f1,3 구분자(:)를 기준으로 원하는 필드만 잘라서 출력 (예: /etc/passwd에서 1,3번째 필드만)

표에 있는 명령어를 전부 한 세션으로 실습해보면:

bash
guest@linux-master:~$ cat access.log  # 파일 내용 그대로 출력
[09:01] login success: guest
[09:03] login failed: root
[09:05] login success: guest
guest@linux-master:~$ more access.log  # 한 페이지씩 출력
[09:01] login success: guest
[09:03] login failed: root
--More--(66%)
guest@linux-master:~$ less access.log  # more처럼 페이지 출력 + 위아래 이동 가능
[09:01] login success: guest
(↓/↑ 로 이동, q로 종료)
guest@linux-master:~$ head -n 1 access.log  # 앞부분 1줄만 출력
[09:01] login success: guest
guest@linux-master:~$ tail -n 1 access.log  # 뒷부분 1줄만 출력
[09:05] login success: guest
guest@linux-master:~$ tail -f access.log  # 실시간으로 계속 따라가며 출력
[09:05] login success: guest
(새 로그가 추가될 때마다 실시간으로 계속 출력됨...)
guest@linux-master:~$ find . -name "*.log"  # 디스크를 직접 뒤져서 파일 검색
./access.log
guest@linux-master:~$ locate access.log  # DB 기반으로 빠르게 검색
/home/guest/access.log
guest@linux-master:~$ updatedb  # locate가 쓰는 검색 DB 갱신
guest@linux-master:~$ grep "failed" access.log  # 문자열 포함된 줄 찾기
[09:03] login failed: root
guest@linux-master:~$ grep -v "failed" access.log  # 문자열 없는 줄만 출력
[09:01] login success: guest
[09:05] login success: guest
guest@linux-master:~$ grep -c "success" access.log  # 일치하는 줄 개수만 출력
2
guest@linux-master:~$ grep -E "failed|error" access.log  # 정규식으로 여러 단어 OR 검색
[09:03] login failed: root
guest@linux-master:~$ cmp a.txt b.txt  # 바이트 단위로 처음 다른 지점 확인
a.txt b.txt differ: byte 3, line 1
guest@linux-master:~$ diff a.txt b.txt  # 줄 단위로 차이점 자세히 비교
1c1
< I love linux
---
> I hate linux
guest@linux-master:~$ cat -n access.log  # 줄마다 행 번호를 붙여서 출력
     1  [09:01] login success: guest
     2  [09:03] login failed: root
     3  [09:05] login success: guest
guest@linux-master:~$ wc access.log  # 줄/단어/문자 수 세기
3  9  78 access.log
guest@linux-master:~$ sort names.txt  # 내용 정렬
alice
bob
carol
guest@linux-master:~$ split -b 100 bigfile.iso part_  # 100바이트씩 여러 파일로 분리
# (part_aa, part_ab ... 처럼 생성됨)
guest@linux-master:~$ cut -d: -f1,3 /etc/passwd  # 구분자 기준 특정 필드만 추출
guest:1000
root:0

6-3. 시스템 확인

명령 설명
date 현재 날짜/시간
cal 이번 달 달력. -y: 올해 전체 달력
du 디렉토리/파일이 차지하는 용량 확인
df 디스크 전체 사용량(남은 용량) 확인
free 메모리(RAM) 사용량 확인
tar, gzip 파일 여러 개를 하나로 묶기 / 압축하기
which, whereis 명령어가 실제로 어디에 설치되어 있는지 위치 확인
alias 명령어에 별명 붙이기 (예: alias ll='ls -al')
su - 다른 사용자(주로 root)로 전환, - 옵션은 그 사용자로 완전히 로그인한 것처럼 환경까지 적용
sudo 명령어 지금 로그인한 계정 그대로 있으면서, 딱 그 한 줄의 명령어만 root 권한으로 실행

💡 su vs sudo 헷갈리지 않기 - su -: root로 아예 로그인 전환(root 비밀번호 필요, 계속 root로 남아있음) - sudo 명령어: 지금 계정 유지한 채 명령어 하나만 잠깐 root 권한 빌려서 실행(자기 계정 비밀번호 입력, 명령 끝나면 원래 권한으로 복귀) - 우분투/데비안 계열은 root 계정 로그인을 기본적으로 막아두고 sudo를 쓰도록 유도하는 경우가 많습니다. - sudo를 쓸 수 있는 사용자 목록은 /etc/sudoers 파일(또는 visudo 명령으로 편집)에서 관리합니다.

표에 있는 명령어를 전부 한 세션으로 실습해보면:

bash
guest@linux-master:~$ date  # 현재 날짜/시간 출력
Fri Jul 24 09:12:33 KST 2026
guest@linux-master:~$ cal  # 이번 달 달력 출력
     July 2026
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
guest@linux-master:~$ cal -y  # 올해 전체 달력 출력
(1월~12월 달력이 한 번에 출력됨)
guest@linux-master:~$ du -sh project  # 디렉토리 용량 확인
124M    project
guest@linux-master:~$ df -h /  # 디스크 전체 사용량 확인
Filesystem  Size  Used Avail Use%
/dev/sda1    50G   18G   30G  38%
guest@linux-master:~$ free -h  # 메모리 사용량 확인
              total        used        free
Mem:           7.8Gi       2.1Gi       3.9Gi
guest@linux-master:~$ tar -cvf backup.tar project/  # 여러 파일을 하나로 묶기
project/
project/src/
guest@linux-master:~$ gzip backup.tar  # 파일 압축
# (backup.tar → backup.tar.gz 로 압축됨)
guest@linux-master:~$ which python3  # 명령어 실행 파일 위치 확인
/usr/bin/python3
guest@linux-master:~$ whereis ls  # 명령어+man페이지 위치까지 확인
ls: /bin/ls /usr/share/man/man1/ls.1.gz
guest@linux-master:~$ alias ll='ls -al'  # 명령어에 별명 붙이기
guest@linux-master:~$ ll  # 별명으로 실행
# (ls -al 이 실행됨)
guest@linux-master:~$ sudo apt update  # 지금 계정을 유지한 채 이 명령 하나만 root 권한으로
[sudo] password for guest:
Reading package lists... Done
guest@linux-master:~$ su -  # root로 완전히 로그인 전환 (계속 root로 남음)
Password:
root@linux-master:~# whoami
root
root@linux-master:~# exit  # root 세션 종료, 원래 계정으로 복귀

6-4. 입출력 방향 바꾸기 (리다이렉션)

명령어는 원래 키보드로 입력받고, 모니터로 출력합니다. 리다이렉션은 이 방향을 바꿔치기하는 것뿐입니다. 하나씩 실제 예시로 보면 훨씬 쉽습니다.

> — 출력을 파일로 (덮어쓰기)

ls -al > filelist.txt

원래는 ls -al 결과가 화면에 떴을 텐데, >를 쓰면 그 결과가 화면 대신 filelist.txt라는 파일 안에 저장됩니다. 화면에는 아무것도 안 보여요. (파일이 이미 있으면 기존 내용은 사라지고 새 내용으로 덮어써짐)

>> — 출력을 파일 끝에 추가

echo "안녕" >> filelist.txt

>와 똑같이 파일로 저장하지만, 기존 내용을 지우지 않고 맨 끝에 이어서 추가합니다. 로그 파일에 계속 기록을 쌓을 때 이렇게 씁니다.

< — 파일 내용을 입력으로 사용

mail ihd@ihd.com < message.txt

원래는 mail 명령이 키보드 입력을 기다리는데, <를 쓰면 키보드 대신 message.txt 파일의 내용을 입력값으로 넣어줍니다. "타이핑하는 대신 파일로 대신 입력해줘"라는 뜻입니다.

| (파이프) — 한 명령의 출력을 다른 명령의 입력으로 바로 연결

ls -al | more

ls -al의 출력 결과를 파일에 저장하지 않고 바로 옆 명령(more)의 입력으로 연결합니다. "A의 출력 = B의 입력"으로 두 명령을 사슬처럼 이어붙이는 것입니다.

기호 의미 방향
> 출력을 파일로 (덮어쓰기) 출력 → 파일
>> 출력을 파일 끝에 추가 출력 → 파일(누적)
< 파일 내용을 입력으로 사용 파일 → 입력
<< 특정 문자열이 나올 때까지 입력을 받다가 한번에 처리 (here document) 키보드 → 입력(임시)
\| 앞 명령의 출력을 뒤 명령의 입력으로 직접 연결 출력 → 입력

💡 한 문장 정리: >·>>는 "출력 방향을 파일로", <는 "입력 방향을 파일에서", |는 "출력을 다음 명령 입력으로" — 전부 화살표가 어느 쪽으로 향하는지만 다를 뿐입니다.

  • export PATH=$PATH:/etc → 이건 기존 PATH를 지우는 게 아니라, 뒤에 /etc 경로를 추가하는 것입니다. ($PATH가 "지금까지의 PATH 값"을 그대로 가져오는 부분이기 때문)

6-5. 내부 명령어 vs 외부 명령어

이건 "이 명령어가 실제로 디스크에 파일로 존재하는지 아닌지"의 차이입니다.

  • cd (내부 명령어): 컴퓨터 어디에도 cd라는 실행 파일이 없습니다. bash라는 프로그램 자체 안에 "cd라고 치면 디렉토리를 옮겨라"는 기능이 이미 내장되어 있는 것입니다. 그래서 cd를 칠 때 새 프로그램을 실행하는 게 아니라, 지금 쓰고 있는 bash가 그냥 자기 할 일을 하는 것뿐입니다. → 새 프로세스가 생기지 않음

  • ls (외부 명령어): /bin/ls라는 실제 프로그램 파일이 디스크에 있습니다. ls라고 치면 bash가 "아 이건 내장 기능이 아니네, /bin/ls 파일을 찾아서 실행해야겠다"하고 새 프로세스를 하나 만들어서(fork) 그 프로그램을 실행(exec)시킵니다. → 새 서브 프로세스가 생김


6-6. 프로세스 확인과 종료

명령어설명
ps현재 실행 중인 프로세스 목록. ps -ef 또는 ps aux로 전체 프로세스를 자세히 봄
ps -ef | grep 이름특정 프로세스만 골라서 확인 (자주 출제)
topCPU·메모리 사용량을 실시간으로 갱신하며 보여줌
pstree프로세스를 부모-자식 트리 구조로 표시
kill PIDPID 번호로 프로세스에 종료 시그널을 보냄

시그널(signal)은 프로세스에게 보내는 신호예요. kill -시그널번호 PID 형태로 씁니다.

번호이름의미
2SIGINT인터럽트(중단). [Ctrl]+[C]가 보내는 신호
9SIGKILL강제 종료 (무시 못 함). kill -9 PID
15SIGTERM정상 종료 요청. kill기본값
1SIGHUP터미널 연결 끊김 / 설정 다시 읽기
⚠️ 함정 포인트
kill은 그냥 쓰면 15(SIGTERM)을 보냅니다. 안 죽는 프로세스는 kill -9(SIGKILL)로 강제 종료해요. [Ctrl]+[C]는 SIGINT(2)입니다.

6-7. 시간 관리

명령어설명
date현재 시스템(소프트웨어) 시간 출력
date +%Y-%m-%d+ 뒤에 형식을 주면 원하는 형태로 출력
date -s "18:46:15"-s 옵션으로 시스템 시간을 직접 설정
hwclock / clock하드웨어(BIOS) 시계 확인·설정
rdate -s 서버원격 시간 서버에서 시간을 받아와 설정
time 명령그 명령을 실행하는 데 걸린 시간을 측정
⚠️ 함정 포인트
date시스템(소프트웨어) 시간, hwclock/clock하드웨어 시간을 다룹니다. time은 "시간을 보는" 게 아니라 "명령 실행 시간을 재는" 명령이라 헷갈리게 출제됩니다.

6-8. 환경변수

환경변수는 셸이 기억하는 "설정값"이에요. echo $변수명으로 값을 보고, env로 전체 목록을, export 변수=값으로 자식 프로세스까지 쓸 수 있게 내보냅니다.

변수의미
PATH명령어를 찾을 디렉토리 목록 (export PATH=$PATH:/경로로 추가)
HOME사용자의 홈 디렉토리 경로
PS1프롬프트 모양을 정하는 변수
TMOUT일정 시간 입력 없으면 자동 로그아웃되는 시간(초)
TERM터미널 종류
DISPLAYX 윈도우 화면 출력 위치
LANG언어·문자셋 설정

환경 설정 파일은 두 종류로 나뉩니다.

  • /etc/profile : 시스템 전체 공통 환경 (모든 사용자에게 적용)
  • ~/.bash_profile, ~/.bashrc : 사용자 개인 환경 (로그인한 그 사람에게만 적용)
guest@linux-master:~/ch07$ cat chapter-7.md

📘 네트워크 명령어 + 시험 직전 함정 총정리

7-1. 네트워크 명령어

명령 설명
ifconfig 네트워크 인터페이스(랜카드) 설정/확인. ifconfig eth0 down은 eth0을 비활성화시키는 것
ping 주소 상대방 호스트가 살아있는지, 응답 속도는 어떤지 확인. 단, 외부에서 나에게 DoS 공격을 하는지는 확인 불가!
nslookup, host, dig 도메인 이름 ↔ IP 주소 조회. (nslookup -type=mx 도메인: 메일서버 정보 조회)
netstat 네트워크 연결 상태 확인. -r: 라우팅 테이블 / -i: 인터페이스 정보 / -s: 통계
traceroute 주소 목적지까지 거쳐가는 경로(노드)를 하나하나 보여줌
hostname 내 컴퓨터의 이름을 보거나 설정
wall 로그인한 모든 사용자에게 메시지 전송
write 사용자 특정 사용자에게 메시지 전송
mesg 다른 사람이 나에게 메시지 보내는 걸 허용/거부 설정

표에 있는 명령어를 전부 한 세션으로 실습해보면:

bash
guest@linux-master:~$ ifconfig eth0  # 네트워크 인터페이스 정보 확인
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
      inet 192.168.0.12  netmask 262.262.262.0
guest@linux-master:~$ ping -c 3 ihd.or.kr  # 연결 상태·속도 확인 (3번만)
64 bytes from ihd.or.kr: icmp_seq=1 ttl=52 time=12.3 ms
64 bytes from ihd.or.kr: icmp_seq=2 ttl=52 time=11.8 ms
64 bytes from ihd.or.kr: icmp_seq=3 ttl=52 time=12.0 ms
--- ihd.or.kr ping statistics ---
3 packets transmitted, 3 received, 0% packet loss
guest@linux-master:~$ nslookup ihd.or.kr  # 도메인 → IP 조회
Server:  8.8.8.8
Address: 211.202.42.101
guest@linux-master:~$ host ihd.or.kr  # 도메인 → IP 조회 (간단 버전)
ihd.or.kr has address 211.202.42.101
guest@linux-master:~$ dig ihd.or.kr +short  # 도메인 → IP 조회 (짧게)
211.202.42.101
guest@linux-master:~$ netstat -r  # 라우팅 테이블 확인
Destination  Gateway      Genmask  Flags Iface
0.0.0.0      192.168.0.1  0.0.0.0  UG    eth0
guest@linux-master:~$ traceroute ihd.or.kr  # 목적지까지 거쳐가는 경로 확인
1  192.168.0.1   1.2 ms
2  10.20.0.1     5.4 ms
3  ihd.or.kr    12.1 ms
guest@linux-master:~$ hostname  # 내 컴퓨터 이름 확인
linux-master
guest@linux-master:~$ wall "서버 점검 5분 후 시작합니다"  # 전체 로그인 사용자에게 메시지
Broadcast message from guest@linux-master
guest@linux-master:~$ write kim  # 특정 사용자(kim)에게만 메시지
# (kim의 화면으로 실시간 메시지 입력 시작)
guest@linux-master:~$ mesg n  # 다른 사람이 write로 보내는 메시지 차단

7-2. DHCP — 명령어는 아니지만 자주 묻는 개념

지금까지 나온 건 전부 "명령어"였는데, DHCP는 명령어가 아니라 네트워크 설정 방식을 가리키는 용어라서 따로 뺐습니다. 컴퓨터가 네트워크에 연결되려면 IP 주소가 필요한데, 컴퓨터 한 대 한 대마다 관리자가 손으로 IP를 설정하는 건 너무 번거롭겠죠? DHCP는 서버가 여러 대의 컴퓨터에 IP 주소를 자동으로, 그때그때 유동적으로 할당해주는 시스템입니다. (예: 카페 와이파이에 접속하면 IP를 따로 입력 안 해도 바로 연결되는 것도 DHCP 덕분이에요) → "DHCP 옵션에 대한 설명으로 옳은 것은?" 유형 문제의 정답이 항상 이 내용입니다.

7-3. 마지막 점검! OX 문제로 감 잡기

정리만 눈으로 훑기보다, 헷갈렸던 포인트들을 O/X로 직접 판단해보면 훨씬 오래 기억에 남아요. 아래 버튼을 누르면 OX 문제 탭으로 이동해서 바로 풀어볼 수 있어요.

🎯 벼락치기 우선순위 (시간이 부족하다면 이 순서로!)

  1. 파티션 챕터 — 출제 빈도 가장 높음
  2. 계정 관리(/etc·shadow 관련) — 함정 패턴이 명확해서 외우기 쉬움
  3. 부팅/GRUB/런레벨 — timeout 단위 차이(LILO 1/10초 vs GRUB 초), (hd0,3) 표기법, 런레벨 0·1·3·5·6만 확실히
  4. 명령어 챕터 — 시험 문제의 절반 이상이 결국 명령어 뜻 묻는 문제
  5. 역사/라이선스/디렉토리 — 암기 위주라 마지막에 벼락치기 가능
  6. 함정 총정리 표 — 시험 직전 마지막으로 한 번 더 훑기

화이팅입니다! 🔥