📘 리눅스란 무엇인가
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)이면 Ubuntu나 Linux Mint가 정답 (데비안 계열이라서 성격이 다름)
📘 리눅스의 집 구조 (디렉토리)
리눅스는 윈도우처럼 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언어 헤더파일과 헷갈리게 만든 함정)
📘 하드디스크를 나누는 법 (파티션 · 파일시스템)
3-1. 파티션이 뭐예요?
하나의 물리적인 하드디스크를 여러 개의 논리적인 구역으로 나누는 것을 파티션(Partition)이라고 합니다. 큰 창고 하나를 여러 개의 방으로 나눠 쓰는 것과 비슷해요.
왜 나눌까요?
- 파일시스템 점검(검사) 시간이 짧아짐
- 백업하기 편함
- 특정 파티션만 따로 보호 가능 (예: /home만 따로 백업)
- 안정성: 만약 루트(/) 파티션에 문제가 생겨도, 다른 파티션(/home 등)의 자료는 안전하게 보존됨
3-2. 파티션의 종류 (제일 헷갈리는 부분!)
하나의 물리 디스크에는 규칙이 있습니다:
- 주(Primary) 파티션: 최대 4개까지만 만들 수 있음
- 만약 5개 이상 필요하다면? → 4개의 주 파티션 자리 중 1개를 "확장(Extended) 파티션"으로 바꿔야 함 (확장 파티션은 디스크 하나에 딱 1개만 만들 수 있어요!)
- 이 확장 파티션 "안"에다가 원하는 만큼 여러 개의 논리(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)
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 조합
📘 컴퓨터를 켤 때 벌어지는 일 (부팅 · 부트로더 · 런레벨)
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
📘 사용자와 권한 (계정 관리)
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일 동안만 사용 가능하도록 만료 유예기간 설정 (단순히 "우선순위를 낮춘다"가 아니에요!)
표에 있는 명령어를 전부 한 세션으로 실습해보면:
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 확인
표에 있는 명령어를 전부 한 세션으로 실습해보면:
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--는 754chmod 755 file: 권한을 숫자로 한번에 지정 (소유자 rwx, 그룹·기타 r-x)chmod u+x file: 기호로 지정 (소유자에게 실행 권한 추가).u=소유자,g=그룹,o=기타,a=전체chmod -R 755 디렉토리: 하위 디렉토리·파일까지 한꺼번에 변경
644(rw-r--r--)는 일반 파일, 755(rwxr-xr-x)는 실행 파일·디렉토리에 자주 쓰입니다.📘 진짜 많이 쓰는 명령어들
리눅스는 결국 "명령어 싸움"입니다. 아래 표만 확실히 외워도 절반은 갑니다.
비유: 리눅스 명령어는 마치 "짧은 영어 단어 약자"라서, 원래 의미를 알면 외우기 쉽습니다.
(예: 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 |
- | 이 파일이 어떤 종류인지 확인 (텍스트냐, 실행파일이냐 등) |
표에 있는 명령어를 전부 한 세션으로 실습해보면:
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번째 필드만) |
표에 있는 명령어를 전부 한 세션으로 실습해보면:
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명령으로 편집)에서 관리합니다.
표에 있는 명령어를 전부 한 세션으로 실습해보면:
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 이름 | 특정 프로세스만 골라서 확인 (자주 출제) |
top | CPU·메모리 사용량을 실시간으로 갱신하며 보여줌 |
pstree | 프로세스를 부모-자식 트리 구조로 표시 |
kill PID | PID 번호로 프로세스에 종료 시그널을 보냄 |
시그널(signal)은 프로세스에게 보내는 신호예요. kill -시그널번호 PID 형태로 씁니다.
| 번호 | 이름 | 의미 |
|---|---|---|
| 2 | SIGINT | 인터럽트(중단). [Ctrl]+[C]가 보내는 신호 |
| 9 | SIGKILL | 강제 종료 (무시 못 함). kill -9 PID |
| 15 | SIGTERM | 정상 종료 요청. kill의 기본값 |
| 1 | SIGHUP | 터미널 연결 끊김 / 설정 다시 읽기 |
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 | 터미널 종류 |
DISPLAY | X 윈도우 화면 출력 위치 |
LANG | 언어·문자셋 설정 |
환경 설정 파일은 두 종류로 나뉩니다.
/etc/profile: 시스템 전체 공통 환경 (모든 사용자에게 적용)~/.bash_profile,~/.bashrc: 사용자 개인 환경 (로그인한 그 사람에게만 적용)
📘 네트워크 명령어 + 시험 직전 함정 총정리
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 |
다른 사람이 나에게 메시지 보내는 걸 허용/거부 설정 |
표에 있는 명령어를 전부 한 세션으로 실습해보면:
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 문제 탭으로 이동해서 바로 풀어볼 수 있어요.
🎯 벼락치기 우선순위 (시간이 부족하다면 이 순서로!)
- 파티션 챕터 — 출제 빈도 가장 높음
- 계정 관리(/etc·shadow 관련) — 함정 패턴이 명확해서 외우기 쉬움
- 부팅/GRUB/런레벨 — timeout 단위 차이(LILO 1/10초 vs GRUB 초),
(hd0,3)표기법, 런레벨 0·1·3·5·6만 확실히 - 명령어 챕터 — 시험 문제의 절반 이상이 결국 명령어 뜻 묻는 문제
- 역사/라이선스/디렉토리 — 암기 위주라 마지막에 벼락치기 가능
- 함정 총정리 표 — 시험 직전 마지막으로 한 번 더 훑기
화이팅입니다! 🔥