Ubuntu / 설치된 패키지 확인하는 방법
Ubuntu에서 설치된 패키지는 사람이 확인할 때는 apt list --installed, 정확한 상태 조회나 스크립트 출력에는 dpkg-query를 사용하는 것이 편리합니다. 패키지 이름을 아는지, 특정 파일의 소유 패키지를 찾는지, 수동 설치 항목만 필요한지에 따라 명령을 선택하면 됩니다.
설치된 패키지 전체 목록 확인
APT(Advanced Package Tool)로 설치된 패키지와 버전, 아키텍처, 저장소 상태를 한눈에 보려면 다음 명령을 실행합니다.
apt list --installed
목록이 길면 less로 페이지를 나누거나 패키지 이름 패턴을 직접 지정할 수 있습니다.
apt list --installed | less apt list --installed 'nginx*'
apt는 사람이 대화형으로 사용하는 인터페이스입니다. 결과를 파일로 보관하거나 다른 명령에서 안정적으로 처리하려면 출력 형식을 지정할 수 있는 dpkg-query가 더 적합합니다.
dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\n' | sort
특정 패키지가 설치되어 있는지 확인
패키지 이름을 정확히 알고 있을 때
다음 명령은 nginx의 dpkg 상태 데이터베이스 항목을 보여 줍니다. 정상적으로 설치된 패키지라면 Status: install ok installed가 표시됩니다.
dpkg-query -s nginx
설치 상태만 한 줄로 확인하려면 상태 필드를 직접 출력할 수 있습니다.
dpkg-query -W -f='${db:Status-Status}\n' nginx
정상 설치 상태의 출력은 installed입니다. 패키지가 데이터베이스에 없으면 0이 아닌 종료 상태가 반환되므로 자동화에서는 화면 문구 대신 종료 상태도 함께 확인하십시오.
비슷한 이름을 함께 찾을 때
dpkg-query -l은 셸 와일드카드 패턴을 지원합니다. 패턴은 셸이 먼저 확장하지 않도록 따옴표로 감싸는 것이 안전합니다.
dpkg-query -l 'nginx*'
출력의 처음 세 문자는 원하는 동작, 현재 상태, 오류 상태를 차례로 나타냅니다. 흔히 보이는 ii는 설치를 원하며 현재 설치된 상태라는 뜻입니다.
| 표시 | 의미 |
|---|---|
ii |
설치를 원하며 현재 정상적으로 설치된 상태입니다. |
rc |
패키지 파일은 제거되었지만 설정 파일이 남아 있는 상태입니다. |
iU |
압축은 풀렸지만 설정 작업이 완료되지 않은 상태입니다. |
| 대문자 상태 | 불완전하거나 심각한 상태일 수 있으므로 상세 상태와 패키지 작업 로그를 확인해야 합니다. |
설치 버전과 저장소 후보 확인
현재 설치 버전만 출력
dpkg-query -W -f='${binary:Package}\t${Version}\n' curl
binary:Package는 Multi-Arch 패키지에서 필요한 경우 이름에 아키텍처를 붙여 구분합니다. 버전 비교나 서버 간 목록 비교에는 일반 Package 필드보다 이 값을 사용하는 편이 안전합니다.
설치 버전과 업데이트 후보 비교
apt-cache policy curl
Installed는 현재 버전, Candidate는 활성 저장소 설정에서 선택되는 후보 버전입니다. 저장소 메타데이터가 오래되었을 수 있으므로 업데이트 판단 전에는 sudo apt update를 실행합니다.
패키지가 설치한 파일 확인
패키지에 포함된 파일 목록
dpkg-query -L nginx
이 명령은 dpkg 데이터베이스에 기록된 파일 목록을 보여 줍니다. 설치 후 서비스가 새로 만든 로그, 캐시, 업로드 파일과 데이터베이스 파일까지 모두 보여 주는 명령은 아닙니다.
특정 파일의 소유 패키지 확인
dpkg-query -S /usr/bin/curl
파일이 심볼릭 링크라면 실제 대상 경로도 조회해 봅니다.
readlink -f /usr/bin/python3 dpkg-query -S "$(readlink -f /usr/bin/python3)"
dpkg-query -S는 설치된 패키지의 기록만 검색합니다. 아직 설치하지 않은 파일을 제공하는 저장소 패키지를 찾으려면 apt-file 같은 별도 도구와 색인이 필요합니다.
수동 설치와 자동 설치 패키지 구분
APT는 사용자가 직접 선택한 패키지와 의존성으로 자동 설치한 패키지를 구분해 기록합니다.
apt-mark showmanual apt-mark showauto
showmanual 결과에는 사용자가 나중에 직접 설치한 프로그램뿐 아니라 Ubuntu 기본 설치를 구성하는 메타패키지와 초기 이미지가 수동으로 표시한 항목도 포함될 수 있습니다. 따라서 이 목록만 보고 설치 경로나 사용 목적을 단정하면 안 됩니다.
더 이상 어떤 수동 패키지도 필요로 하지 않는 자동 설치 의존성은 autoremove 대상으로 제안될 수 있습니다. 삭제 전에 후보와 영향 범위를 반드시 검토합니다.
sudo apt autoremove --dry-run
설치 패키지 목록을 파일로 저장
장애 분석이나 서버 비교를 위해 패키지 이름, 버전과 아키텍처를 탭으로 구분한 파일로 저장할 수 있습니다.
dpkg-query -W -f='${binary:Package}\t${Version}\t${Architecture}\n' \
| sort > installed-packages.tsv
두 서버 또는 두 시점의 목록은 다음처럼 비교합니다.
diff -u installed-packages-before.tsv installed-packages-after.tsv
이 파일은 당시 상태를 기록한 인벤토리이며 완전한 복구 수단은 아닙니다. 다른 Ubuntu 릴리스에서는 같은 버전이 없을 수 있고, 저장소·PPA·Snap 패키지·로컬 설정과 애플리케이션 데이터는 별도로 보관해야 합니다.
Deb 패키지와 Snap 패키지 구분
apt와 dpkg-query는 Deb 패키지를 조회합니다. Snap으로 설치된 애플리케이션은 별도의 명령으로 확인해야 합니다.
snap list
서버의 전체 소프트웨어 인벤토리가 필요하다면 Deb, Snap, 컨테이너 이미지, 언어별 패키지 관리자와 수동 설치 프로그램을 각각 확인해야 합니다.
목적별 명령 요약
| 확인 목적 | 권장 명령 |
|---|---|
| Deb 패키지 전체 목록 | apt list --installed |
| 정형화한 이름·버전 출력 | dpkg-query -W -f='출력 형식' |
| 특정 패키지 상태 | dpkg-query -s 패키지명 |
| 설치 버전과 후보 버전 | apt-cache policy 패키지명 |
| 패키지가 설치한 파일 | dpkg-query -L 패키지명 |
| 파일의 소유 패키지 | dpkg-query -S 파일경로 |
| 수동 설치 표시 항목 | apt-mark showmanual |
| Snap 패키지 목록 | snap list |
확인할 때 주의할 점
grep으로 패키지를 찾으면 이름 일부가 같은 다른 패키지도 함께 나올 수 있습니다. 정확한 설치 판단에는dpkg-query -s나-W를 사용합니다.dpkg-query -l은 현재 설치 패키지 외에 설정만 남은 항목도 보여 줄 수 있으므로 상태 열을 함께 읽어야 합니다.- 패키지 목록만으로 서비스의 실행 여부를 알 수 없습니다. 서비스 상태는
systemctl status등 해당 서비스의 관리 도구로 별도 확인합니다. - 불필요해 보이는 패키지를 삭제하기 전에 의존성, 메타패키지와 운영 기능에 미치는 영향을 확인합니다.


