리눅스마스터 2급 필기 13 — 장치 설정 (프린터 CUPS·사운드 ALSA·스캐너 SANE·커널 모듈) 총정리
출제기준: 2차 1과목 리눅스 운영 및 관리 > 장치 설정 (장치 연결 및 관리, 활용 개념)
기출 빈도: 2019~2023 기출 기준 약 4.8%.
1과목의 마지막 단원이고, 양은 많아 보여도 "옛 방식 → 현재 표준" 한 줄 구조와
System V ↔ BSD 1:1 대응표만 잡으면 끝납니다.
리눅스는 "모든 것은 파일이다" 원칙에 따라 장치도 /dev 아래의 파일로 다룹니다.
이 단원은 프린터·사운드카드·스캐너 세 가지를 과거 방식과 현재 표준으로 구분해서 묻습니다.
| 장치 | 옛 방식 | 현재 표준 | 관리 명령 |
| 프린터 | LPD → LPRng | CUPS | lp·lpr 계열 |
| 사운드 | OSS | ALSA | alsamixer·amixer·alsactl |
| 스캐너 | — | SANE (+ XSANE) | sane-find-scanner·scanimage |
1. 프린터 시스템 ⭐⭐⭐⭐⭐
1-1. 발전 순서
LPD (Line Printer Daemon, 유닉스 초기 표준)
→ LPRng (LPR Next Generation, 보안 강화·하위 호환, /etc/printcap 사용)
→ CUPS (Common Unix Printing System, 현재 표준)
⚠️ 기출 포인트
- 발전 순서는 LPD → LPRng → CUPS ("(가) LPRng → (나) CUPS" 빈칸 형태로 출제)
- LPRng로 프린터를 설치할 때 설정하는 파일 = /etc/printcap (프린터 이름·장치 경로·설정 값 기록)
- lpd 는 "프린터의 모든 작업을 삭제하는 명령"이 아니라 프린터 서버 데몬입니다.
- 리눅스에서 프린터를 연결하는 방식: Local / Unix Printer(Remote lpd) / Samba Printer(SMB).
Consol printer,NovellDirect는 정답이 아닌 보기로 나왔고,PostScript는 연결 방식이 아니라 페이지 기술 언어(PDL) 입니다.
1-2. CUPS 특징 ⭐⭐⭐⭐⭐
| 항목 | 내용 |
| 개발 | 오픈소스 (현재 Apple이 개발 주도) — 현재 리눅스 표준 인쇄 시스템 |
| 프로토콜 | IPP (Internet Printing Protocol) — HTTP/HTTPS 기반 |
| 웹 관리 | 브라우저로 접속, 포트 631 |
| 드라이버 | PPD (PostScript Printer Description) — 프린터 기능을 설명하는 텍스트 기반 설정 파일 (이미지 파일이 아님!) |
| 호환 | System V 명령(lp 계열)과 BSD 명령(lpr 계열) 모두 지원 |
| 기본 설정 위치 | /etc/cups/ |
| 네트워크 프린터 프로토콜 | IPP, LPD, SMB, AppSocket (NDMP는 백업용이라 아님) |
1-3. CUPS 설정 파일 (/etc/cups/) ⭐⭐⭐⭐
| 파일 | 역할 |
| cupsd.conf | 핵심 서버 설정 — 접근 제어(ACL)·포트·로그 레벨·웹 인터페이스 (cupsd 데몬 환경 설정) |
| cups-files.conf | 로그 파일 위치·임시 디렉터리·SSL 인증서 경로 |
| client.conf | 클라이언트 측 설정 (접속할 서버 ServerName 등) |
| printers.conf | 추가된 각 프린터의 이름·연결 포트(URI)·공유 여부·상태 |
| classes.conf | 여러 프린터를 하나의 논리 그룹(클래스)으로 묶은 설정 |
참고: cupsd.conf의 문법(
<Location />,Order allow,deny등)은 Apache와 비슷하고,
로그도 Apache의 Common Log Format을 따릅니다.
서버 관리자에게 친숙한 구조죠.
1-4. X 윈도의 프린터 설정 도구
system-config-printer — CUPS를 GUI로 제어(추가·삭제·설정).
명칭 순서가 중요해서 config-system-… 같은 보기는 오답입니다.
2. 프린터 명령어 — System V ↔ BSD 1:1 대응 ⭐⭐⭐⭐⭐
초기 유닉스의 System V(lp 방식)와 BSD(lpr 방식)가 CUPS에서 통합되었습니다. 아래 표를 통째로 외우세요.
| 기능 | System V 계열 | BSD 계열 |
| 인쇄 요청 | lp | lpr |
| 대기열 상태 | lpstat | lpq |
| 작업 취소 | cancel | lprm |
| 기기 관리 | lpadmin | lpc |
암기법: 이름이 짧은 쪽이 System V(lp, cancel…), "lp + r/q/rm/c"가 BSD입니다.
⚠️ 최다 출제 함정 — "BSD 계열 프린터 명령이 아닌 것 → lp" (lp는 System V)
2-1. lp / lpstat / cancel / lpadmin (System V)
lp — 인쇄 대기열에 등록 (파이프 입력도 가능)
| 옵션 | 설명 | 짝 (lpr) |
|---|---|---|
| 옵션 | 설명 | 짝 (lpr) |
| -d 프린터 | 출력 대상 프린터 지정 | lpr -P |
| -n 숫자 | 인쇄 매수 | lpr -# |
| -t 제목 | 배너 제목 | lpr -T |
| -o 옵션 | 프린터별 특수 옵션(양면·가로 등) | |
| -q 숫자 | 작업 우선순위 (1~39, 낮을수록 우선) |
lpstat — 인쇄 상태 확인
| 옵션 | 설명 |
|---|---|
| 옵션 | 설명 |
| -d | 시스템의 기본 프린터 확인 |
| -a | 프린터의 요청 수신 상태 |
| -p | 프린터의 가동 여부 |
| -o | 인쇄 대기열(Queue) 확인 |
| -u | 특정 사용자의 작업 |
| -v | 프린터의 장치 경로·네트워크 주소 |
| -t | 모든 상태 정보 요약 |
| -r | 인쇄 서버(Scheduler) 동작 여부 |
cancel — 작업 취소
| 사용 | 설명 |
cancel 작업ID |
특정 작업 취소 (예: cancel HP_LaserJet-101) |
cancel -a 프린터 |
해당 프린터의 모든 작업 취소 |
cancel -u 사용자 |
특정 사용자의 모든 작업 취소 |
cancel -x 작업ID |
작업 삭제 및 데이터 완전 제거 |
lpadmin — 프린터 대기열 생성·수정·삭제 (CUPS 관리 명령)
| 옵션 | 설명 |
| -p 이름 | 설정할 프린터 이름 |
| -v URI | 장치 경로/주소 (예: socket://192.168.1.50) |
| -m PPD | 드라이버(모델) |
| -E | 프린터 활성화 및 요청 수락 |
| -x 이름 | 프린터 삭제 |
| -d 이름 | 기본 프린터 설정 |
| -c 클래스 | 클래스(그룹)에 추가 |
2-2. lpr / lpq / lprm / lpc (BSD)
lpr — 인쇄 요청
| 옵션 | 설명 |
| -P 프린터명 | 출력할 프린터 지정 |
| -# 숫자 | 인쇄 부수 |
| -r | 인쇄 후 원본 파일 삭제 (Remove) — lp에는 이 옵션이 없음 |
| -m | 인쇄 완료 후 메일로 알림 |
| -J 이름 | 작업 이름 |
| -T 제목 | 배너 페이지 제목 |
lpq — 스풀 큐 상태: -P 프린터명 특정 큐 / -l 상세 / -a 모든 프린터 / +초 주기적 자동 갱신 (lpq +5)
lprm — 작업 취소
| 사용 | 설명 |
lprm |
가장 최근 작업 취소 |
lprm 15 |
작업번호 15 취소 |
lprm - |
나의 모든 작업 일괄 취소 |
| -P 프린터 | 특정 프린터 대기열 지정 |
| -U 사용자 | 특정 사용자의 작업 취소 |
lpc — 관리자용 프린터 제어 (Line Printer Control)
서브명령: status, stop, start, restart, disable, enable. 예: lpc status, lpc stop HP_Printer
참고: 현대 CUPS의
lpc는 기능이 제한적(주로lpc status)이고
실무에서는cupsenable / cupsdisable / cupsaccept / cupsreject를 씁니다.
⚠️ 기출 함정
- lpr는 큐에 있는 작업을 "다시 인쇄"하는 명령이 아니라 새 인쇄 작업을 요청하는 명령입니다.
- 명령행에서 파일을 프린터로 출력할 때
cat ihd.txt | lpr,pr -l 5 ihd.txt | lpr,cat ihd.txt > /dev/lp0은 되지만,lpr > ihd.txt는 출력이 아니라 파일 저장(리다이렉션) 이라 틀립니다. lpc(프린터 제어)와lspci(PCI 장치 목록)는 이름은 비슷하지만 전혀 다릅니다.
3. 사운드카드 — OSS vs ALSA ⭐⭐⭐⭐
| 구분 | OSS (Open Sound System) | ALSA (Advanced Linux Sound Architecture) |
| 위치 | 유닉스 계열 초기 표준 | 현재 리눅스 커널 표준 |
| 장치 파일 | /dev/dsp, /dev/mixer, /dev/sequencer |
/dev/snd/ 디렉터리 |
| 기반 | 표준 유닉스 시스템 콜(POSIX) 기반, 초기엔 Free Software였으나 사유화되기도 함 | 다중 사운드 카드/장치 완벽 지원, 전이중(Full Duplex)(재생·녹음 동시), OSS 하위 호환, 하드웨어 기반 MIDI 합성 |
| 개발 | — | 1998년 Jaroslav Kysela 개발 시작 |
ALSA 라이선스
| 구분 | 라이선스 |
| 커널 드라이버 | GPL |
| 사용자 라이브러리 (alsa-lib) | LGPL — 응용 프로그램 소스 공개 의무 없음 |
| alsa-utils (alsamixer, aplay 등) | GPL |
기출 문제 흐름: "사운드카드 관련 프로그램 → ALSA(CUPS=프린터, SANE=스캐너, LPRng=프린터)"
/ "사운드 드라이버 유형에 포함되지 않는 것 → RUTA (OSS, OSS/Free, ALSA가 맞음)"
3-1. ALSA 유틸리티 (alsa-utils) ⭐⭐⭐⭐
| 명령어 | 용도 | 핵심 |
| alsamixer | 터미널 기반 TUI 볼륨 조절 | -c 번호 카드 지정. 단축키 M 음소거/해제, Esc 종료, F3 재생 / F4 녹음 / F5 전체 |
| amixer | 그래픽 없이 명령행에서 볼륨 조절 | amixer set Master 50%, amixer set Master unmute, scontrols/scontents |
| alsactl | 사운드 설정 저장·복원·초기화 | store(현재 설정을 /var/lib/alsa/asound.state에 저장) / restore / init(초기화) |
| aplay | 사운드 파일 재생 | -l 재생 장치 목록 |
| arecord | 마이크 입력을 파일로 녹음 | -l 녹음 장치 목록, -d 초 지정 시간만 녹음 |
재부팅 후에도 볼륨을 유지하려면
alsactl store로 저장해 둡니다. (교재 실전: 사운드카드 초기화 = alsactl)
참고로 리눅스용 재생기로는 MP3의 xmms, 동영상의 mplayer·xine·realplayer 가 기출에 나왔고,
winamp·media player·gravis는 리눅스 재생 프로그램이 아닌 보기였습니다.
4. 스캐너 — SANE과 XSANE ⭐⭐⭐⭐
4-1. SANE (Scanner Access Now Easy)
- 스캐너·디지털카메라·비디오 캠코더 등 래스터 이미지 입력 장치에 표준화된 접근 방식을 제공하는 API
- 백엔드(Backend): 하드웨어를 직접 제어하는 드라이버 (제조사·모델별)
- 프런트엔드(Frontend): 사용자가 스캔을 실행하는 응용 프로그램 (scanimage=CLI, XSANE=GUI)
- saned 데몬: 네트워크상 다른 호스트와 스캐너 공유
- 설정 디렉터리: /etc/sane.d/
- 패키지: sane-backends / sane-frontends 두 가지로 분리, GPL 배포
4-2. XSANE
- SANE 기반, GTK+ 라이브러리로 개발된 X 윈도용 GUI 프런트엔드
- 미리보기·영역 선택·색상 보정·해상도 설정을 마우스로 수행, GIMP 플러그인으로 동작
- 실행 명령: xsane
⚠️ 기출 함정 — "SANE은 GTK+로 만들어졌다" → 틀림! GTK+로 만든 것은 SANE이 아니라 프런트엔드인 XSANE 입니다.
4-3. 스캐너 명령어와 장치 파일
| 명령어 | 용도 | 옵션 |
| sane-find-scanner | USB/SCSI로 연결된 스캐너 장치 검색 (첫 단계) | -v 검색 과정 상세 / -q 장치명만 간결 / 병렬 포트 스캐너도 검색 |
| scanimage | SANE 백엔드를 이용한 CLI 스캔 | -L SANE이 인식한 스캐너 목록 / -T 테스트 스캔 / 진행률(%) / -o 파일 파일로 저장 /-n 옵션 확인만(실제 스캔 안 함) |
흐름: sane-find-scanner(장치 검색) → scanimage -L(SANE 인식 목록) → scanimage -o(스캔) → GUI는 xsane
| 스캐너 장치 파일 | 설명 |
/dev/scanner |
주로 실제 장치의 심볼릭 링크 |
/dev/usb/scanner |
USB 스캐너 표준 경로 |
/dev/sg0 |
SCSI 범용(Generic) 장치 파일 |
⚠️ 장치 파일은 모두 /dev 아래입니다. /scanner처럼 /dev가 빠진 보기는 오답입니다.
5. 장치 정보·디바이스 파일·커널 모듈 (기출 보강) ⭐⭐⭐⭐
교재 장치 설정 절에는 거의 안 나오지만, 기출에는 장치 파일 이름과 모듈 명령이 꾸준히 출제됩니다.
5-1. 장치 정보 확인
| 명령 | 설명 |
| lspci | 설치된 PCI 장치 목록 (그래픽카드·네트워크 카드·사운드카드 등) |
| lsusb | 연결된 USB 장치 목록 |
| lsmod | 현재 적재된 커널 모듈 목록 |
5-2. 블록 장치 이름 규칙 ⭐⭐⭐⭐
| 이름 | 의미 |
| hd(a~t) | IDE 하드디스크 |
| sd(a~z) | SCSI(SATA/USB 포함) 하드디스크 |
| fd(0~7) | 표준 플로피 디스크 |
| md(0~31) | 소프트웨어 RAID (Multiple Device) — USB 아님! |
알파벳은 디스크 순서, 숫자는 파티션 번호입니다.
그래서 /dev/sdb3 = 두 번째 SCSI 디스크의 세 번째 파티션 (b가 두 번째).
CD-ROM·플로피 같은 외부 장치의 전통적인 마운트 포인트 디렉터리는 /mnt 입니다.
마운트 형식은 mount -t 파일시스템 장치 마운트포인트 → mount -t iso9660 /dev/hdc /mnt/cdrom
5-3. 커널 모듈 명령 ⭐⭐⭐⭐
| 명령 | 설명 |
|---|---|
| 명령 | 설명 |
| lsmod | 적재된 모듈 리스트 출력 |
| insmod | 동작 중인 커널에 모듈 적재 (의존성 처리 안 함) |
| rmmod | 모듈을 커널에서 제거 |
| modprobe | 의존성을 자동 분석해서 모듈을 적재도(기본) 제거(-r)도 하는 지능형 도구 |
⚠️ 기출 함정 — "modprobe : 의존성 있는 모듈을 커널에서 제거" → 틀린 설명으로 출제.
modprobe는 제거만이 아니라 적재와 제거를 모두 하는 도구입니다.
- 모듈 파일 위치: /lib/modules/<커널버전>/kernel/drivers
- 부팅 시 랜카드·사운드카드 모듈을 자동 적재하는 설정 파일: 기출 정답은 /etc/modprobe.conf
현대 배포판(RHEL 6 이후 등)에서는 /etc/modprobe.conf 대신 /etc/modprobe.d/*.conf 를 씁니다.
시험은 기출 보기 중 modprobe.conf가 정답으로 나왔으니 그대로 외우고, 실무는 modprobe.d로 이해해 두세요.
기출 문제 Q&A
Q. 다음 중 BSD 계열 유닉스의 프린터 명령으로 틀린 것은? (lp / lpr / lpq / lprm)
A. lp — System V 계열의 인쇄 명령입니다.
Q. 프린트 작업을 요청하는 명령은? (cancel / lpr / lpq / lpstat)
A. lpr (cancel=취소, lpq=큐 목록, lpstat=상태)
Q. 프린터 큐의 작업 정보를 확인하는 명령은? (lp / lpr / lprm / lpstat)
A. lpstat (lprm은 큐에서 삭제)
Q. LPRng로 프린터를 설치할 때 설정해야 하는 파일은?
A. /etc/printcap
Q. 사운드카드와 관련된 프로그램은? (ALSA / CUPS / SANE / LPRng)
A. ALSA — CUPS·LPRng는 프린터, SANE은 스캐너.
Q. 인쇄 후 원본 파일을 삭제하는 옵션은?
A. lpr -r (lp에는 -r 없음)
Q. SANE에 대한 설명으로 틀린 것은?
A. "SANE은 GTK+로 만들어졌다" — GTK+는 프런트엔드 XSANE의 것.
Q. PCI 장치 목록을 확인하는 명령은?
A. lspci
Q. /dev/sdb3에 대한 설명으로 알맞은 것은?
A. 두 번째 SCSI 하드디스크의 세 번째 파티션
Q. 리눅스 블록 디바이스 종류로 틀린 것은? (hd / sd / fd / md=USB)
A. md(0-31)=USB — md는 소프트웨어 RAID입니다.
💡 실무에서는?
서버에서 프린터·스캐너·사운드카드를 다룰 일은 거의 없지만, 인쇄 서버(CUPS)는 보안 점검 대상입니다.
631 포트가 외부로 열려 있으면 IPP 취약점이 노출되니, cupsd.conf의 Listen과 <Location> 접근 제어(Allow/Deny)로 사내 대역에서만 쓰도록 막아야 합니다. 쓰지 않는 서버라면 cups 서비스 자체를 꺼 두는 게 정답이고요.
장치 쪽은 서버 장애 때 lspci, lsusb, lsmod, dmesg로 "하드웨어가 인식됐는지, 드라이버가 올라왔는지" 를 순서대로 확인하는 게 기본 루틴입니다.
이 단원 내용 중 실무에서 가장 자주 쓰는 건 사실 lspci·lsmod·modprobe 쪽입니다.
핵심 정리
✅ 프린터: LPD → LPRng(/etc/printcap) → CUPS(현재 표준, IPP, 포트 631, PPD=텍스트 파일)
✅ CUPS 설정: /etc/cups/ — cupsd.conf(서버) / printers.conf / classes.conf / system-config-printer(GUI)
✅ System V ↔ BSD: lp↔lpr(요청) / lpstat↔lpq(상태) / cancel↔lprm(취소) / lpadmin↔lpc(관리)
✅ lp -d(프린터) -n(매수) / lpr -P(프린터) -#(부수) -r(원본 삭제) / lprm - (내 작업 전부)
✅ lpstat -d(기본 프린터) / lpadmin -E(활성화) -x(삭제) -d(기본 지정)
✅ 사운드: OSS(/dev/dsp) → ALSA(/dev/snd, 전이중, 커널 GPL·라이브러리 LGPL)
✅ alsamixer(TUI) / amixer(CLI) / alsactl(store·restore·init, asound.state) / aplay / arecord
✅ 스캐너: SANE(API, 백엔드·프런트엔드, /etc/sane.d, saned) / XSANE(GTK+, GIMP 플러그인, xsane)
✅ sane-find-scanner(검색) → scanimage -L(목록) → scanimage -o(스캔) / /dev/scanner·/dev/usb/scanner·/dev/sg0
✅ lspci(PCI) / lsmod·insmod·rmmod·modprobe(의존성 자동, 적재·제거 모두) / /lib/modules/<버전>/kernel/drivers
✅ hd=IDE, sd=SCSI, fd=플로피, md=소프트웨어 RAID / /dev/sdb3 = 두 번째 SCSI 디스크의 3번 파티션
다음 편 예고: 1과목이 모두 끝났습니다!
14편부터는 2차 2과목(리눅스 활용) 이 시작됩니다.
첫 주제는 X 윈도 — 구조(서버·클라이언트), 윈도 매니저, 디스플레이 매니저, 설정 파일까지 정리합니다.
궁금한 점은 댓글로 남겨주세요!