리눅스마스터 2급 필기 12 — 소프트웨어 설치 (rpm·yum·dpkg·apt·tar·소스 컴파일) 총정리
출제기준: 2차 1과목 리눅스 운영 및 관리 > 소프트웨어 설치 (패키지 관리의 개념과 사용법, 아카이브 설치 및 제거)
기출 빈도: 2019~2023 기출 기준 약 8.0%.
에디터(7.3%)보다 높고, 거의 매 회차 2~3문제가 나오는 효자 단원입니다.
옵션 한 글자 차이로 정답이 갈리니, 짝으로 묶어 외우는 게 핵심입니다.
1. 패키지 관리의 큰 그림 ⭐⭐⭐⭐⭐
패키지 = 실행 파일 + 설정 파일 + 라이브러리 + 메타정보를 묶은 설치 단위입니다.
의존성(Dependency)은 "A가 돌아가려면 B가 먼저 있어야 한다"는 관계이고, 이게 꼬여서 설치가 안 되는 상황을 흔히 의존성 지옥이라고 부릅니다.
| 계열 | 대표 배포판 | 확장자 | 저수준 도구 (로컬 파일) | 고수준 도구 (저장소·온라인) |
| 레드햇 | RHEL, CentOS, Fedora, Rocky | .rpm |
rpm | yum / dnf |
| 데비안 | Debian, Ubuntu, Mint, Kali | .deb |
dpkg | apt-get (apt) |
| SUSE | openSUSE, SLES | .rpm |
rpm | zypper, YaST |
- 저수준(rpm·dpkg): 내 PC에 있는 파일을 설치. 의존성을 스스로 해결하지 못함.
- 고수준(yum·dnf·apt-get·zypper): 네트워크 저장소(Repository)에서 내려받고 의존성을 자동 해결.
⚠️ 기출 함정 (반복 출제)
- "온라인 패키지 관리 도구로 거리가 먼 것" → rpm, dpkg (둘 다 로컬 파일 도구)
- "레드햇 계열 도구로 거리가 먼 것" → zypper (SUSE 계열)
- "데비안 계열 도구 모음" → dpkg, apt-get
- YaST는 패키지 관리도 하지만 하드웨어·네트워크·사용자까지 다루는 SUSE 통합 설정 도구입니다.
2. RPM ⭐⭐⭐⭐⭐
2-1. 파일명 구조
httpd-2.4.6-97.el7.centos.x86_64.rpm
| 구성 | 값 | 의미 |
| 패키지 이름 | httpd | |
| 버전 | 2.4.6 | 주.부.패치 |
| 릴리즈 | 97 | 패키지 자체의 수정 횟수 |
| 배포판 | el7.centos | Enterprise Linux 7용 |
| 아키텍처 | x86_64 | 64비트 (i386=32비트, noarch=CPU 무관) |
⚠️ 파일명 구성 요소에 압축 형식은 없습니다. 설치 정보 DB는 /var/lib/rpm 에 저장됩니다.
2-2. 설치·삭제 옵션 ⭐⭐⭐⭐⭐
| 옵션 | 의미 | 포인트 |
| -i | Install | 신규 설치 |
| -U | Upgrade | 업그레이드 (없으면 새로 설치도 수행) |
| -F | Freshen | 이미 설치돼 있을 때만 업그레이드 |
| -e | Erase | 삭제 |
| -v | Verbose | 과정 자세히 출력 |
| -h | Hash | 진행 상황을 # 기호로 표시 |
| --nodeps | 의존성 검사 무시 | |
| --force | 이미 설치돼 있어도 강제 진행 |
자주 쓰는 조합: rpm -ivh 패키지.rpm / rpm -Uvh 패키지.rpm / rpm -e nmap --nodeps
⚠️ 기출 함정
- 삭제는
-d,-r,erase,delete가 아니라-e입니다. (rpm erase,rpm delete는 없는 명령) - "의존성 검사 무시" = --nodeps (--force와 헷갈리지 마세요)
- 설치 진행 상황을
#로 보여주는 건 -h (-v는 상세 출력) - RPM의 용도: 설치·삭제·업그레이드·질의·검증. "설치된 소프트웨어 실행"은 RPM의 기능이 아닙니다.
2-3. 질의(Query) 옵션 ⭐⭐⭐⭐⭐
| 옵션 | 의미 | 대상 |
| -qa | query all — 설치된 전체 패키지 목록 | 설치됨 |
| -qi | query info — 상세 정보 | 설치됨 |
| -ql | query list — 패키지에 포함된 파일 목록 | 설치됨 |
| -qf 파일경로 | query file — 이 파일이 어느 패키지 소속인지 | 설치됨 |
| -qp 파일.rpm | query package — 미설치 rpm 파일 정보 | 미설치 |
예:
rpm -qf /bin/ls→ ls를 설치한 패키지명 (기출 정답: -qf)
2-4. 검증 — rpm -V ⭐⭐⭐⭐
설치된 파일의 현재 상태를 설치 당시 원본 정보와 비교합니다.
변경된 항목은 해당 자리에 문자가 표시되고, 변경이 없으면 . 입니다.
| 코드 | 의미 | 코드 | 의미 |
| S | Size 크기 | U | User 소유자 |
| M | Mode 권한 | G | Group 그룹 |
| 5 | MD5 체크섬(내용) | T | Time 수정시간 |
| D | Device 주/부 번호 | L | Link 심볼릭 링크 |
암기: S M 5 D L U G T 순서. 보안 업무에서 바이너리 변조 여부를 점검할 때 실제로 쓰는 기능입니다.
참고: 서명 확인은rpm -K(--checksig), 공개키 등록은rpm --import.
3. YUM / DNF ⭐⭐⭐⭐⭐
3-1. 개념과 설정 파일
- yum(Yellowdog Updater Modified)은 rpm의 의존성 문제를 자동 해결하기 위해 등장했습니다.
- dnf는 yum의 차세대 도구입니다. 명령 체계는 거의 같고, RHEL 8 이후에는
yum이dnf로 연결돼 있습니다.
| 경로 | 설명 |
| /etc/yum.conf | yum 전체 동작(로그, 공통 옵션) |
| /etc/yum.repos.d/ | 저장소 정보(.repo) 디렉터리 |
3-2. 명령어 ⭐⭐⭐⭐⭐
| 명령 | 설명 |
| yum install 패키지 | 설치 (의존성 자동 해결) |
| yum update [패키지] | 업데이트 (생략 시 전체) |
| yum remove 패키지 | 삭제 |
| yum check-update | 업데이트 가능 목록 |
| yum list | 전체 패키지 목록 |
| yum info 패키지 | 상세 정보 (≈ rpm -qi) |
| yum search 키워드 | 키워드로 패키지 검색 (와일드카드 불필요) |
| yum provides 파일 | 파일이 속한 패키지 (≈ rpm -qf) |
| yum grouplist / groupinstall '그룹' | 패키지 그룹 조회 / 설치 |
| yum history | 작업 이력 확인 |
| yum clean all | 캐시 전체 삭제 |
옵션: -y = 모든 질문에 yes. 예) yum -y install telnet-server
⚠️ 기출 함정
- 설치 명령의 순서는
yum install 패키지명.yum nmap install,yum -i nmap은 틀린 형식입니다.
(-i는 rpm 옵션) - CentOS 7에서 텔넷 서버 패키지명은 telnet-server (하이픈!)
- 확장 저장소(EPEL)를 쓰려면 먼저 epel-release 패키지를 설치합니다.
4. dpkg / apt-get ⭐⭐⭐⭐⭐
4-1. dpkg (저수준)
| 옵션 | 의미 |
| -i | 설치 (dpkg -i 파일.deb, --install도 동일) |
| -r | Remove — 삭제, 설정 파일은 남김 |
| -P | Purge — 삭제 + 설정 파일까지 완전 삭제 |
| -l | 설치된 패키지 목록 |
| -L | 패키지에 포함된 파일 목록 |
| -s | 설치된 패키지의 상태 |
| -c | 미설치 .deb 내부 파일 목록 |
4-2. apt-get (고수준)
| 명령 | 설명 |
| apt-get update | 저장소 목록(인덱스) 갱신 (설치 아님!) |
| apt-get upgrade | 설치된 패키지를 최신 버전으로 |
| apt-get install 이름 | 설치 (의존성 자동) |
| apt-get remove 이름 | 삭제 (설정 파일 유지) |
| apt-get purge 이름 | 삭제 + 설정 파일까지 |
| apt-get autoremove | 불필요해진 의존성 패키지 정리 |
| apt-get clean | 내려받은 .deb 캐시 삭제 |
| apt-get dist-upgrade | 의존성 변화를 고려한 업그레이드 |
옵션: -y yes 자동 응답 / -s 시뮬레이션(실제 변경 없음) / -d 다운로드만 / --reinstall 재설치
| 경로 | 설명 |
| /etc/apt/sources.list | 저장소 주소 목록 |
| /var/cache/apt/archives/ | 내려받은 .deb 캐시 |
| /var/lib/apt/lists/ | update로 가져온 패키지 정보 |
⚠️ 기출 함정
- "설정 파일까지 포함해서 vsftpd 제거" → apt-get purge vsftpd
(remove와erase는 설정 파일 유지,delete는 없는 명령) - "update는 설치"가 아닙니다. 목록 갱신일 뿐입니다.
5. 짝으로 외우는 대응표 ⭐⭐⭐⭐⭐
| 하려는 일 | rpm | yum | dpkg | apt-get |
| 설치 | -i |
install |
-i |
install |
| 삭제 | -e |
remove |
-r |
remove |
| 완전 삭제 | (없음) | — | -P |
purge |
| 전체 목록 | -qa |
list |
-l |
— |
| 상세 정보 | -qi |
info |
-s |
— |
| 파일 목록 | -ql |
— | -L |
— |
| 파일→패키지 | -qf |
provides |
— | — |
| 미설치 파일 조회 | -qp |
— | -c |
— |
| 의존성 해결 | ❌ | ✅ | ❌ | ✅ |
6. 아카이브와 압축 ⭐⭐⭐⭐⭐
아카이브 = 이삿짐을 한 상자에 담는 것 (부피는 그대로, 권한·소유권·타임스탬프 보존)
압축 = 상자 안의 짐을 진공 포장해 부피를 줄이는 것tar는 상자 담기(묶기)만 하고, 압축은 gzip 등과 결합합니다. 그래서.tar.gz가 됩니다.
6-1. tar 옵션 ⭐⭐⭐⭐⭐
| 옵션 | 의미 | 포인트 |
| -c | create | 새 아카이브 생성 |
| -x | extract | 묶음 해제 |
| -t | list | 풀지 않고 목록만 확인 |
| -r | append | 기존 아카이브에 파일 추가 |
| -u | update | 더 최신 파일일 때만 교체 |
| -A | concatenate | 두 .tar 병합 |
| -v | verbose | 과정 출력 |
| -f | file | 파일명 지정 (항상 옵션 맨 마지막) |
| -C | directory | 해제 위치 지정 |
| -z | gzip | .tar.gz |
| -j | bzip2 | .tar.bz2 |
| -J | xz | .tar.xz (대문자) |
| -Z | compress | .Z (대문자) |
| --exclude | 특정 파일 제외 | |
| -p | 권한·소유권 유지 | |
| -P | 맨 앞 / 제거하지 않고 절대 경로 저장 |
자주 쓰는 조합
tar cvf backup.tar 대상 # 묶기
tar czvf backup.tar.gz 대상 # 묶기 + gzip
tar cjvf backup.tar.bz2 대상 # 묶기 + bzip2
tar tvf backup.tar # 목록 확인
tar xvf backup.tar # 풀기
tar xvf backup.tar -C /usr/local/src # 다른 위치에 풀기
tar Jxvf linux-5.13.4.tar.xz # xz 해제
tar cvf source.tar *.c # 현재 디렉터리의 .c 파일만 묶기
⚠️ 기출 함정
tar cvf 생성될파일 대상순서입니다.tar cvf *.c source.tar는 틀립니다. (파일명이-f바로 뒤)- cvf(생성) / xvf(해제) / tvf(목록) / rvf(추가) 4종을 구분해서 묻습니다.
rvf는 -x가 아니라 -r(추가)입니다. .bz2목록 확인 = jtvf (j=bzip2,t=목록). 해제는 jxvf.- xz에 연동하는 tar 옵션 = -J (
-z=gzip,-Z=compress)
6-2. 압축 도구 비교 ⭐⭐⭐⭐⭐
| 도구 | 알고리즘 | 확장자 | 압축 | 해제 | tar 옵션 | 내용 확인 |
| compress | LZW | .Z |
compress | uncompress | -Z | zcat |
| gzip | DEFLATE | .gz |
gzip | gunzip / -d |
-z | zcat · zless · zmore |
| bzip2 | Burrows-Wheeler | .bz2 |
bzip2 | bunzip2 / -d |
-j | bzcat · bzless · bzmore |
| xz | LZMA2 | .xz |
xz | unxz / -d |
-J | xzcat · xzless · xzmore |
압축률: xz > bzip2 > gzip / 속도: gzip이 가장 빠름 (반대 방향)
압축하면 원본이 삭제되고 확장자 파일이 생깁니다.
원본을 유지하려면-k(bzip2·xz, 최신 gzip) 또는-c로 표준출력 리다이렉션.
⚠️ 기출 함정 — "gzip 압축 파일의 내용을 풀지 않고 볼 때 아닌 것" → ztail (zcat·zless·zmore만 존재)
7. 소스코드 설치 ⭐⭐⭐⭐
패키지가 아니라 소스를 내 환경에서 직접 컴파일해 설치하는 방식입니다.
최신 기능을 쓰거나, 특정 모듈을 넣고 빼는 최적화가 필요할 때 사용합니다.
7-1. 표준 3단계
소스 tarball 내려받기 → tar xvf 로 해제 → 해당 디렉터리로 이동
① ./configure 환경 검사, 설치 경로 지정 → Makefile 생성
② make 컴파일 → 바이너리 생성 (가장 오래 걸림)
③ make install 시스템 경로로 복사 → 설치 완료
| 단계 | 결과물 |
| ./configure | Makefile (기출: "Makefile이 생성되는 단계" → configure) |
| make | 목적 파일(.o), 실행 파일 |
| make install | /usr/local/bin, /usr/local/lib 등에 설치 |
- 설치 경로 지정:
./configure --prefix=/usr/local/apache make clean: 컴파일로 생긴 목적 파일 등을 지우고 다시 설정부터 깨끗하게 진행할 때
(기출: "make init/zero/neat"는 없는 명령)- 소스 설치는 패키지 DB에 등록되지 않아 rpm/dpkg로 추적할 수 없습니다. 관례상
/usr/local하위에 설치합니다.
7-2. CMake
./configure 대신 쓰는 빌드 시스템 생성기입니다.
소스 폴더와 빌드 결과물 폴더를 분리하는 Out-of-Source 빌드가 특징입니다.
mkdir build && cd build
cmake .. # 상위 디렉터리의 CMakeLists.txt를 읽어 Makefile 생성
make
make install
configure ↔
cmake ..는 둘 다 Makefile을 만드는 1단계이고, 이후 make / make install은 같습니다.
(교재 기준 MySQL은 CMake, Apache·PHP·Nmap은 전통적 configure)
기출 문제 Q&A
Q. rpm 명령으로 의존성 있는 nmap 패키지를 제거하는 명령은?
A. rpm -e nmap --nodeps — 삭제는 -e, 의존성 무시는 --nodeps.
Q. /bin/ls를 설치한 패키지명을 확인하는 rpm 옵션은?
A. -qf (-qi 정보 / -ql 파일 목록 / -qa 전체 목록)
Q. 데비안 계열에서 환경 설정 파일까지 포함해 vsftpd를 제거하는 명령은?
A. apt-get purge vsftpd
Q. 소스 설치 과정 중 Makefile이 만들어지는 단계는?
A. configure (cmake도 Makefile을 만들지만, "소스 설치 표준 단계"에서는 configure)
Q. 현재 디렉터리의 C 파일만 source.tar로 묶는 명령은?
A. tar cvf source.tar *.c
Q. tar로 묶으면서 동시에 bzip2로 압축하는 방법은?
A. tar -cjvf — j가 bzip2, z는 gzip.
Q. 다음 중 온라인 패키지 관리 도구로 거리가 먼 것은? (dnf / dpkg / zypper / apt-get)
A. dpkg — 로컬 파일 기반 도구입니다. (rpm도 같은 이유)
Q. 소스 설치 후 설정을 지우고 처음부터 다시 하고 싶을 때 쓰는 명령은?
A. make clean
💡 실무에서는?
운영 서버에서는 패키지 설치 전에 yum list/yum info로 버전을 확인하고, 업데이트 전에는 yum history로 언제 무엇을 바꿨는지 남겨 둡니다. 장애가 나면 yum history undo로 롤백이 가능한 경우가 많거든요. (dnf도 동일)
보안 쪽에서는 rpm -V 패키지명을 무결성 점검에 씁니다.
침해 사고가 의심될 때 /bin/ls, /usr/bin/ssh 같은 핵심 바이너리가 변조됐는지 5(체크섬), S(크기), T(시간) 변화를 보는 거죠. 폐쇄망이라면 /etc/yum.repos.d/의 .repo 파일을 사내 미러로 돌려서 외부 저장소 없이 패치를 관리합니다.
소스 설치는 편하지만 패키지 DB에 안 남아서 나중에 누가 뭘 깔았는지 추적이 안 됩니다.
꼭 필요하면 /usr/local 하위에 설치하고 설치 기록을 문서화해 두세요.
핵심 정리
✅ 레드햇: rpm(저수준) → yum/dnf(고수준) / 데비안: dpkg → apt-get / SUSE: zypper·YaST
✅ 저수준은 의존성 해결 불가, 고수준은 저장소에서 자동 해결 (rpm·dpkg는 온라인 도구 아님)
✅ rpm -i 설치 / -U 업그레이드(없으면 설치) / -F 있을 때만 / -e 삭제 / -h # 표시 / --nodeps
✅ rpm -qa 전체 / -qi 정보 / -ql 파일목록 / -qf 파일→패키지 / -qp 미설치 rpm
✅ rpm -V 검증: S M 5 D L U G T
✅ yum install / remove / search / info / provides / history / clean all
✅ yum 설정: /etc/yum.conf, /etc/yum.repos.d/ — apt 저장소: /etc/apt/sources.list
✅ dpkg -i 설치 / -r 삭제(설정 유지) / -P 완전삭제 / -l 목록 / -L 파일 / -c 미설치 deb
✅ apt-get update(목록 갱신) vs upgrade / remove(설정 유지) vs purge(설정까지)
✅ tar: c 생성 / x 해제 / t 목록 / r 추가 / f 파일명(맨 뒤) / C 위치 / z=gzip j=bzip2 J=xz
✅ 압축률 xz > bzip2 > gzip / 보기: zcat·bzcat·xzcat
✅ 소스 설치: ./configure(→Makefile) → make → make install / make clean / cmake ..
다음 편 예고: 13편은 장치 설정입니다.
프린터(CUPS)부터 장치 파일, 하드웨어 설정까지 — 1과목의 마지막 단원이에요!
궁금한 점은 댓글로 남겨주세요!