우분투 실전 명령어 | apt 패키지 버전 확인과 hold 관리

언제 쓰는가
운영 중인 우분투 서버에서 패키지를 올려야 할지, 지금 버전을 유지해야 할지 판단이 필요할 때 자주 씁니다. 특히 장애 복구 직후나 특정 버전 의존성이 있는 서비스는 무작정 apt upgrade를 돌리면 더 꼬일 수 있습니다. 이럴 때 apt-cache policy, apt list --upgradable, apt-mark hold 조합으로 안전하게 관리할 수 있습니다.

바로 쓰는 명령어

# 1) 업그레이드 가능한 패키지 확인
apt list --upgradable

# 2) 특정 패키지의 설치/후보 버전 확인
apt-cache policy nginx

# 3) 특정 버전으로 설치
sudo apt install nginx=1.24.0-2ubuntu7

# 4) 자동 업그레이드 잠금
sudo apt-mark hold nginx

# 5) 잠금 해제 후 다시 일반 업그레이드 허용
sudo apt-mark unhold nginx

# 6) 현재 hold 상태 패키지 목록
apt-mark showhold

핵심 옵션/패턴

  • apt-cache policy <패키지명>: 현재 설치 버전(Installed), 저장소 후보 버전(Candidate), 저장소 우선순위(Pin-Priority) 확인.
  • 패키지=버전 패턴: 버전을 명시해서 재현 가능한 설치를 만듭니다.
  • apt-mark hold: 의도치 않은 업그레이드를 막는 가장 단순한 안전장치입니다.

자주 하는 실수

  • apt-mark hold만 걸고 이유를 안 남기는 경우: 몇 달 뒤에 왜 업데이트가 안 되는지 추적이 어려워집니다. /etc/apt/preferences.d/ 또는 운영 문서에 이유를 같이 남겨두세요.
  • 버전 문자열을 대충 입력하는 경우: 1.24.0처럼 일부만 쓰면 실패하거나 다른 릴리스 버전이 잡힐 수 있습니다. apt-cache policy에서 보이는 전체 버전을 그대로 복붙하는 게 안전합니다.
  • hold 상태인데도 dist-upgrade를 반복 실행하는 경우: 결과가 기대와 다르면 먼저 apt-mark showhold로 잠금부터 확인하세요.

검증 방법

# hold가 제대로 걸렸는지 확인
apt-mark showhold | grep -E '^nginx$'

# 설치/후보 버전이 의도대로인지 확인
apt-cache policy nginx

# 시뮬레이션 업그레이드
sudo apt -s upgrade | grep -E 'nginx|upgraded|kept back'

실행 결과 예시

$ apt-cache policy nginx
nginx:
  Installed: 1.24.0-2ubuntu7
  Candidate: 1.24.0-2ubuntu7.1
  Version table:
     1.24.0-2ubuntu7.1 500
        500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
 * 1.24.0-2ubuntu7 500
        500 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages
        100 /var/lib/dpkg/status
$ sudo apt-mark hold nginx
nginx set on hold.

$ apt-mark showhold
nginx
$ sudo apt -s upgrade | grep -E 'nginx|upgraded|kept back'
The following packages have been kept back:
  nginx
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

출처

  • Ubuntu Manpages
  • Debian APT Documentation
  • Ubuntu Server Guide