치트시트

apt 명령어: 우분투와 데비안에서 패키지 설치, 업데이트, 삭제하기

업데이트: · Skillaria.Top

apt는 우분투와 데비안의 패키지 관리자입니다. sudo apt update는 패키지 목록을 갱신하고, sudo apt upgrade는 업데이트를 설치하며, sudo apt install 이름은 패키지를 설치하고, sudo apt remove는 삭제합니다(purge는 설정 파일까지 삭제). apt autoremove는 불필요한 의존성을 정리하고, apt search와 apt show로 패키지를 찾으며, sudo apt --fix-broken install로 깨진 의존성을 복구합니다.

apt는 우분투, 데비안과 그 파생 배포판(Linux Mint, Pop!_OS)에서 쓰는 표준 패키지 관리자입니다. 저장소에서 프로그램을 내려받고, 의존성을 자동으로 설치하며, 한 명령으로 시스템을 업데이트합니다. 아래에서는 일상 작업에 필요한 apt 명령어를 작업별로 정리하고, 흔한 오류와 해결 방법을 함께 설명합니다.

apt의 동작 방식

패키지는 프로그램, 메타데이터, 의존성 목록을 담은 .deb 아카이브입니다. 저장소는 패키지가 있는 서버이며, 주소는 /etc/apt/sources.list와 /etc/apt/sources.list.d/ 디렉터리에 적혀 있습니다. apt는 사용 가능한 패키지 목록의 로컬 사본을 보관하고, 설치할 때 이 사본과 대조하므로 목록을 정기적으로 갱신해야 합니다.

apt는 내부적으로 저수준 도구 dpkg를 호출합니다. dpkg는 패키지를 풀고 등록하지만 의존성은 해결하지 못합니다. apt-get과 apt-cache는 같은 기능을 가진 이전 인터페이스로, 출력이 안정적이어서 스크립트에 적합합니다. apt는 사람이 쓰기 위한 새로운 래퍼로, 진행 표시줄과 색상이 있고 명령이 더 짧습니다.

패키지를 변경하는 명령 대부분은 관리자 권한이 필요하므로 sudo와 함께 실행합니다. 검색과 정보 조회는 권한 없이도 가능합니다.

치트시트: 기본 apt 명령어

명령어동작
sudo apt update저장소에서 패키지 목록 갱신
sudo apt upgrade패키지를 삭제하지 않고 업데이트 설치
sudo apt full-upgrade필요하면 패키지를 삭제하거나 교체하며 업데이트
sudo apt install 패키지의존성과 함께 패키지 설치
sudo apt reinstall 패키지패키지 재설치
sudo apt remove 패키지설정 파일은 두고 패키지 삭제
sudo apt purge 패키지시스템 설정 파일까지 포함해 삭제
sudo apt autoremove더 이상 필요 없는 의존성 삭제
apt search 단어이름과 설명으로 패키지 검색
apt show 패키지설명, 버전, 의존성, 크기 표시
apt list --installed설치된 패키지 목록
apt list --upgradable업데이트 가능한 패키지 목록
apt policy 패키지설치된 버전, 사용 가능한 버전, 출처
sudo apt clean다운로드한 .deb 캐시 비우기
sudo apt --fix-broken install깨진 의존성 복구

apt update와 apt upgrade: 시스템 업데이트

두 명령은 서로 다른 작업이며 자주 혼동됩니다. apt update는 아무것도 설치하지 않습니다. 최신 패키지 목록만 내려받습니다. apt upgrade는 이 목록을 바탕으로 이미 설치된 프로그램의 새 버전을 설치합니다.

$ sudo apt update
Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
12 packages can be upgraded. Run 'apt list --upgradable' to see them.

$ apt list --upgradable
$ sudo apt upgrade

서버에서 흔히 쓰는 한 줄 명령은 자동 확인까지 포함합니다.

sudo apt update && sudo apt upgrade -y

upgrade와 full-upgrade의 차이

apt upgrade는 새 의존성을 설치할 수는 있지만 이미 설치된 패키지를 절대 삭제하지 않습니다. 업데이트에 무엇인가를 삭제해야 한다면(예: 커널이나 라이브러리 버전이 바뀔 때), 그 패키지는 "보류"됩니다. 출력에 The following packages have been kept back 줄이 나타납니다. apt full-upgrade(apt-get dist-upgrade와 같음)는 삭제를 허용하고 업데이트를 끝까지 완료합니다. 실행 전에 apt가 무엇을 삭제하려는지 꼼꼼히 읽으세요.

패키지 하나만 업데이트

sudo apt install --only-upgrade nginx

패키지가 설치되어 있지 않다면 --only-upgrade 옵션은 설치하지 않습니다. 실수로 설치되는 것을 막아 줍니다.

apt install: 패키지 설치

sudo apt install nginx                 # 패키지 하나
sudo apt install git curl htop         # 여러 개 한 번에
sudo apt install -y docker.io          # Y/n 질문 없이
sudo apt install nginx=1.24.0-2ubuntu7 # 특정 버전
sudo apt install --no-install-recommends ffmpeg  # 권장 패키지 제외
sudo apt install ./google-chrome-stable_current_amd64.deb  # 로컬 .deb 파일

설치할 때 apt는 추가될 패키지와 필요한 공간을 보여 주고 확인을 묻습니다. -y는 자동으로 "예"라고 답합니다. 스크립트나 Dockerfile에서는 편리하지만, 대화형 작업에서는 목록을 읽어 보는 것이 좋습니다.

apt는 필수 의존성(Depends)뿐 아니라 권장 패키지(Recommends)도 기본으로 설치합니다. 서버와 컨테이너에서는 --no-install-recommends를 쓰면 용량을 크게 줄일 수 있습니다.

.deb 파일 설치: apt 또는 dpkg -i

내려받은 .deb은 apt install ./파일.deb로 설치하는 것이 좋습니다. 경로는 반드시 ./로 시작하거나 전체 경로여야 합니다. 그렇지 않으면 apt가 저장소에서 같은 이름의 패키지를 찾습니다. dpkg -i와 달리 apt는 부족한 의존성을 자동으로 내려받습니다. dpkg로 설치하다가 의존성 오류가 났다면 sudo apt --fix-broken install이 해결해 줍니다.

sudo dpkg -i package.deb
sudo apt --fix-broken install

apt remove, purge, autoremove: 패키지 삭제

명령어프로그램/etc의 설정의존성
apt remove삭제됨남음남음
apt purge삭제됨삭제됨남음
apt autoremove——불필요한 것 삭제
sudo apt remove nginx
sudo apt purge nginx            # 위와 같지만 설정까지 삭제
sudo apt autoremove             # 남은 의존성 정리
sudo apt autoremove --purge     # 남은 의존성과 그 설정까지 삭제

remove는 나중에 프로그램을 다시 쓸 계획이 있고 설정을 보존하고 싶을 때 적합합니다. purge는 완전히 처음부터 다시 설치하려고 할 때 씁니다. 주의할 점은 사용자의 홈 디렉터리 파일(예: ~/.config)은 어떤 명령으로도 삭제되지 않는다는 것입니다.

삭제되었지만 설정 파일이 남아 있는 패키지는 상태 rc로 표시되며, 다음과 같이 찾을 수 있습니다.

dpkg -l | grep '^rc'

패키지 검색과 정보 조회

apt search postgresql          # 이름과 설명으로 검색
apt search --names-only '^php8' # 이름만, 정규식 사용
apt show htop                  # 버전, 크기, 의존성, 설명
apt policy docker.io           # 사용 가능한 버전과 출처
apt list --installed | grep python3
apt-cache depends curl         # 이 패키지가 의존하는 것
apt-cache rdepends libssl3     # 이 패키지에 의존하는 것

파일이 어느 패키지에 속하는지

$ dpkg -S /usr/bin/curl
curl: /usr/bin/curl

$ dpkg -L curl        # 패키지가 설치한 파일 목록

명령이 아직 설치되지 않았다면, 우분투는 실행을 시도할 때 필요한 패키지를 알려 줍니다(Command 'tree' not found, but can be installed with: sudo apt install tree). 설치되지 않은 패키지 안의 파일을 찾으려면 apt-file을 씁니다. sudo apt-file update를 실행한 뒤 apt-file search bin/dig로 검색합니다.

버전 고정: apt-mark hold

어떤 패키지는 업데이트하면 안 될 때가 있습니다. 예를 들어 운영 서버의 DBMS나 커널 버전은 수동으로만 바꿔야 합니다. 이런 패키지는 "고정"합니다.

sudo apt-mark hold postgresql-16
apt-mark showhold
sudo apt-mark unhold postgresql-16

함께 알아 두면 좋은 명령은 apt-mark manual과 apt-mark auto입니다. 다른 패키지의 의존성으로 설치된 패키지는 자동(auto)으로 표시되어, 더 이상 필요 없을 때 autoremove의 대상이 됩니다. manual 표시는 그 패키지를 이 정리로부터 보호합니다.

저장소: 추가하는 방법과 위치

저장소 목록은 /etc/apt/sources.list와 /etc/apt/sources.list.d/*.list 파일에 있습니다. 우분투 24.04와 데비안 12 이후에서는 .sources 확장자를 쓰는 deb822 형식이 점점 더 많이 쓰입니다(예: /etc/apt/sources.list.d/ubuntu.sources).

서명 키가 있는 서드파티 저장소

현대적인 방법은 저장소 키를 별도 파일로 보관하고 signed-by로 연결하는 것입니다. apt-key 명령은 오래되었고 최신 버전에서는 제거되었습니다.

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update
sudo apt install docker-ce

PPA в우분투

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo add-apt-repository --remove ppa:deadsnakes/ppa

PPA는 Launchpad에 있는 개인 저장소입니다. 신뢰하는 곳만 추가하세요. 이 저장소의 패키지는 root 권한으로 설치됩니다.

캐시와 디스크 공간

다운로드한 패키지는 /var/cache/apt/archives/에 남습니다. 디스크가 작거나 Docker 이미지를 만들 때는 캐시를 정리하는 것이 좋습니다.

du -sh /var/cache/apt/archives
sudo apt clean          # .deb 캐시 전체 삭제
sudo apt autoclean      # 더 이상 쓸 수 없는 버전만 삭제

Dockerfile에서는 설치를 한 레이어에 묶고 패키지 목록을 바로 지우는 것이 관례입니다.

RUN apt-get update \
 && apt-get install -y --no-install-recommends curl ca-certificates \
 && rm -rf /var/lib/apt/lists/*

스크립트에서는 apt 대신 apt-get을 쓰세요. apt는 인터페이스가 안정적이지 않다고 직접 경고합니다(WARNING: apt does not have a stable CLI interface). 설치 프로그램이 질문하지 않게 하려면 DEBIAN_FRONTEND=noninteractive를 추가합니다.

apt의 흔한 오류와 해결법

Could not get lock /var/lib/dpkg/lock-frontend

다른 프로세스가 이미 패키지를 다루고 있습니다. 두 번째 터미널에서 apt를 실행 중이거나, 소프트웨어 센터가 열려 있거나, unattended-upgrades 자동 업데이트가 돌고 있을 수 있습니다. 몇 분 기다린 뒤 누가 잠금을 잡고 있는지 확인하세요.

ps aux | grep -E 'apt|dpkg'

프로세스가 살아 있는 동안에는 잠금 파일을 손으로 지우지 마세요. 중단된 설치는 시스템을 일관성 없는 상태로 남길 수 있습니다. 프로세스가 멈췄거나 강제 종료되었다면 끝난 뒤 sudo dpkg --configure -a를 실행하세요.

Unable to locate package

apt가 패키지를 찾지 못했습니다. 대개 새로 설치한 시스템에서 sudo apt update를 하지 않았거나, 이름에 오타가 있거나, 패키지가 꺼진 구성 요소(우분투의 universe)에 있는 경우입니다. 구성 요소는 sudo add-apt-repository universe로 켤 수 있습니다.

Unmet dependencies / held broken packages

의존성이 맞지 않는 상황입니다. 보통 .deb을 손으로 설치했거나 서로 다른 배포판 버전의 저장소를 섞었을 때 생깁니다.

sudo apt --fix-broken install
sudo dpkg --configure -a
apt policy 패키지이름

dpkg was interrupted

설치가 중단되었습니다(터미널을 닫았거나 정전). 메시지가 직접 해결 방법을 알려 줍니다. sudo dpkg --configure -a를 실행하세요.

apt update 중 NO_PUBKEY

서드파티 저장소의 서명 키가 없거나 오래되었습니다. 프로젝트 사이트에서 최신 키를 받아 /etc/apt/keyrings/에 저장하고, 위의 Docker 예제처럼 signed-by에 지정하세요.

자동 보안 업데이트

우분투 서버에는 기본으로 unattended-upgrades 패키지가 설치되어 있어 보안 업데이트를 자동으로 적용합니다. 확인하고 켜는 방법은 다음과 같습니다.

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
cat /var/log/unattended-upgrades/unattended-upgrades.log

업데이트 후 재부팅이 필요한지는 /var/run/reboot-required 파일로 알 수 있습니다. 이 파일이 있으면 커널이나 핵심 라이브러리가 업데이트된 것입니다.

정리

기본 apt 명령어는 짧은 순환으로 정리됩니다. 무엇을 하기 전에는 update, 설치는 install, 업데이트는 upgrade, 삭제는 remove 또는 purge, 정리는 autoremove입니다. 버전 관리에는 apt policy와 apt-mark hold, 깨진 상태 복구에는 --fix-broken install과 dpkg --configure -a를 쓰고, 스크립트에서는 apt-get을 사용하세요. 패키지 관리는 리눅스 과정에서 실습으로 다룹니다.

자주 묻는 질문

apt와 apt-get의 차이는 무엇인가요?

둘은 같은 패키지 시스템에 대한 인터페이스입니다. apt는 터미널에서 쓰기 편하도록 진행 표시와 색상, 짧은 명령을 제공합니다. apt-get은 출력이 안정적이어서 스크립트와 Dockerfile에 권장됩니다.

apt install 전에 매번 apt update를 해야 하나요?

목록이 오래되었다면 하는 것이 좋습니다. 그렇지 않으면 apt가 패키지를 찾지 못하거나, 미러에서 이미 사라진 버전을 내려받으려다 404 오류를 낼 수 있습니다.

apt로 설치와 삭제한 기록은 어디서 보나요?

기록은 /var/log/apt/history.log에 있고(오래된 기록은 history.log.N.gz 아카이브), 자세한 dpkg 로그는 /var/log/dpkg.log에 있습니다.

패키지를 이전 버전으로 되돌리려면 어떻게 하나요?

apt policy 패키지로 사용 가능한 버전을 확인한 뒤 sudo apt install 패키지=버전으로 설치하고, 다음 업데이트에서 새 버전으로 돌아가지 않도록 apt-mark hold로 고정하세요.

CentOS나 Fedora에서도 apt를 쓸 수 있나요?

아닙니다. 두 배포판은 다른 패키지 형식(rpm)과 자체 관리자(dnf, yum)를 씁니다. apt는 데비안, 우분투와 그 파생 배포판에서만 동작합니다.

영상으로 이 주제 배우기

이 주제는 “Linux: с нуля до уверенного администрирования” 강의에서 실습과 함께 자세히 다룹니다.

강의로 이동