웹사이트 검색

Ubuntu 및 Debian 패키지 관리 필수 사항


소개

패키지 관리는 Linux 시스템의 기본 기능 중 하나입니다. 패키징 형식과 패키지 관리 도구는 배포마다 다르지만 대부분의 배포는 두 가지 핵심 도구 세트 중 하나를 사용합니다.

Red Hat Enterprise Linux 기반 배포판(예: RHEL 자체 및 Rocky Linux)의 경우 rpmyum과 같은 RPM 패키징 형식 및 패키징 도구가 일반적입니다. Debian, Ubuntu 및 관련 배포판에서 사용하는 다른 주요 제품군은 .deb 패키징 형식과 aptdpkg와 같은 도구를 사용합니다.

최근 몇 년 동안 핵심 aptdpkg 도구와 병렬로 실행되도록 설계된 더 많은 보조 패키지 관리자가 있습니다. 예를 들어 macOS에서 포팅된 Homebrew는 다음 명령을 제공합니다. 시스템 패키지와의 충돌을 피하기 위해 개별 사용자가 설치할 수 있는 라인 도구.

이 가이드에서는 시스템 관리자가 Debian 및 Ubuntu 시스템에서 사용하는 가장 일반적인 패키지 관리 도구 중 일부를 배웁니다. 이러한 시스템 내에서 패키지 관리 작업을 수행하는 방법을 알아야 할 때 빠른 참조로 사용할 수 있습니다.

전제 조건

  • Ubuntu 20.04 또는 Debian 서버 및 sudo 권한이 있는 루트가 아닌 사용자. Ubuntu 20.04 가이드로 초기 서버 설정에서 이러한 권한을 가진 사용자를 설정하는 방법에 대해 자세히 알아볼 수 있습니다.

1단계 – 데비안 패키지 관리 도구 개요

Debian/Ubuntu 생태계는 시스템에서 소프트웨어를 관리하기 위해 상당히 다양한 패키지 관리 도구를 사용합니다.

이러한 도구는 대부분 상호 연관되어 있으며 동일한 패키지 데이터베이스에서 작동합니다. 이러한 도구 중 일부는 패키징 시스템에 높은 수준의 인터페이스를 제공하려고 하는 반면 다른 유틸리티는 낮은 수준의 기능을 제공하는 데 집중합니다.

적절한

apt 명령은 아마도 apt 패키징 도구 모음에서 가장 자주 사용되는 구성원일 것입니다. 주요 목적은 배포판의 패키징 팀이 유지 관리하는 원격 리포지토리와 인터페이스하고 사용 가능한 패키지에 대한 작업을 수행하는 것입니다.

일반적으로 apt 제품군은 원격 리포지토리에서 로컬 시스템에 유지 관리되는 캐시로 정보를 가져오는 방식으로 작동합니다. apt 명령은 로컬 캐시를 새로 고치는 데 사용됩니다. 또한 시스템에서 패키지를 설치하거나 제거하는 것을 의미하는 패키지 상태를 수정하는 데 사용됩니다.

일반적으로 apt는 로컬 캐시를 업데이트하고 라이브 시스템을 수정하는 데 사용됩니다.

참고: 이전 버전의 Ubuntu에서는 핵심 apt 명령을 apt-get이라고 했습니다. 간소화되었지만 여전히 습관이 아니거나 이전 버전과의 호환성을 위해 apt-get을 사용하여 호출할 수 있습니다.

적절한 캐시

apt 제품군의 또 다른 중요한 구성원은 apt-cache입니다. 이 유틸리티는 로컬 캐시를 사용하여 사용 가능한 패키지 및 해당 속성에 대한 정보를 쿼리합니다.

예를 들어 특정 패키지나 특정 기능을 수행하는 도구를 검색하려는 경우 언제든지 apt-cache를 시작하는 것이 좋습니다. 또한 프로시저의 대상이 되는 정확한 패키지 버전에 대한 정보를 제공할 수도 있습니다. 종속성 및 역 종속성 정보는 apt-cache가 유용한 또 다른 영역입니다.

dpkg

이전 도구는 리포지토리에서 유지 관리되는 패키지 관리에 중점을 두었지만 dpkg 명령을 사용하여 개별 .deb 패키지에서 작동할 수도 있습니다. dpkg 도구는 실제로 위 명령의 배후 작업 대부분을 담당합니다. aptdpkg가 패키지 자체와 상호 작용하는 동안 추가 하우스키핑을 제공합니다.

apt 명령과 달리 dpkg에는 종속성을 자동으로 해결하는 기능이 없습니다. 주요 기능은 .deb 패키지로 직접 작업할 수 있는 기능과 패키지를 분석하고 해당 구조에 대해 자세히 알아볼 수 있는 기능입니다. 시스템에 설치된 패키지에 대한 일부 정보를 수집할 수 있지만 이를 기본 패키지 관리자로 사용해서는 안 됩니다. 다음 단계에서는 패키지 업그레이드 모범 사례에 대해 알아봅니다.

2단계 – 패키지 캐시 및 시스템 업데이트

Debian 및 Ubuntu 패키지 관리 도구는 시스템의 사용 가능한 패키지 목록을 최신 상태로 유지하는 데 도움이 됩니다. 또한 현재 서버에 설치한 패키지를 업데이트하는 다양한 방법을 제공합니다.

로컬 패키지 캐시 업데이트

패키징 도구가 패키지 정보에 의존하는 원격 리포지토리는 항상 업데이트됩니다. 그러나 대부분의 Linux 패키지 관리 도구는 역사적인 이유로 이 정보의 로컬 캐시와 직접 작동하도록 설계되었습니다. 해당 캐시는 주기적으로 새로 고쳐야 합니다.

일반적으로 다른 패키지 명령을 수행하기 전에 매 세션마다 로컬 패키지 캐시를 업데이트하는 것이 좋습니다. 이렇게 하면 사용 가능한 소프트웨어에 대한 최신 정보로 작업할 수 있습니다. 오래된 패키지 정보로 작업하는 경우 일부 설치 명령이 실패합니다.

로컬 캐시를 업데이트하려면 update 하위 명령과 함께 apt 명령을 사용하십시오.

  1. sudo apt update

이렇게 하면 추적 중인 리포지토리에서 사용 가능한 패키지의 업데이트된 목록이 표시됩니다.

패키지 업데이트

apt 명령은 두 가지 다른 업데이트 절차를 구분합니다. 첫 번째 업데이트 절차(이 섹션에서 설명)는 구성 요소 제거가 필요하지 않은 모든 구성 요소를 업그레이드하는 데 사용할 수 있습니다. apt가 필요에 따라 구성 요소를 제거하고 교체하도록 업데이트하고 허용하는 방법을 알아보려면 아래 섹션을 참조하세요.

이는 어떤 상황에서도 설치된 패키지를 제거하지 않으려는 경우 매우 중요할 수 있습니다. 그러나 일부 업데이트에는 시스템 구성 요소 교체 또는 충돌 파일 제거가 포함됩니다. 이 절차는 패키지 제거가 필요한 모든 업데이트를 무시합니다.

  1. sudo apt upgrade

두 번째 절차는 패키지 제거가 필요한 패키지를 포함하여 모든 패키지를 업데이트합니다. 이는 패키지에 대한 종속성이 변경될 때 종종 필요합니다.

일반적으로 제거되는 패키지는 업그레이드 절차 중에 기능적으로 동등한 것으로 대체되므로 일반적으로 안전합니다. 그러나 일부 필수 구성 요소가 제거 표시가 된 경우 제거할 패키지를 주시하는 것이 좋습니다. 이 작업을 수행하려면 다음을 입력하십시오.

  1. sudo apt full-upgrade

이렇게 하면 시스템의 모든 패키지가 업데이트됩니다. 다음 단계에서는 새 패키지를 다운로드하고 설치하는 방법을 배웁니다.

3단계 – 패키지 다운로드 및 설치

패키지 검색

패키지를 다운로드하고 설치할 때 첫 번째 단계는 찾고 있는 패키지에 대한 배포 저장소를 검색하는 것입니다.

패키지 검색은 정보를 얻기 위해 패키지 캐시를 대상으로 하는 작업 중 하나입니다. 이렇게 하려면 apt-cache 검색을 사용하세요. 패키지를 검색하기 전에 sudo apt update를 사용하여 로컬 캐시가 최신 상태인지 확인해야 합니다.

  1. apt-cache search package

이 절차는 정보를 쿼리하기만 하므로 sudo 권한이 필요하지 않습니다. 수행되는 모든 검색은 패키지 이름과 패키지에 대한 전체 설명을 확인합니다.

예를 들어 htop을 검색하면 다음과 같은 결과가 표시됩니다.

  1. apt-cache search htop
Output
aha - ANSI color to HTML converter htop - interactive processes viewer libauthen-oath-perl - Perl module for OATH One Time Passwords

보시다시피 htop이라는 패키지가 있지만 두 개의 다른 프로그램도 볼 수 있습니다. 각 프로그램은 패키지의 전체 설명 필드에 htop을 언급합니다( 출력 옆의 설명은 짧은 요약일 뿐입니다.

저장소에서 패키지 설치

리포지토리와 필요한 모든 종속성에서 패키지를 설치하려면 apt 명령을 install 인수와 함께 사용할 수 있습니다.

이 명령의 인수는 저장소에서 레이블이 지정된 패키지 이름이어야 합니다.

  1. sudo apt install package

공백으로 구분하여 한 번에 여러 패키지를 설치할 수 있습니다.

  1. sudo apt install package1 package2

요청한 패키지에 추가 종속성이 필요한 경우 표준 출력으로 인쇄되고 절차를 확인하라는 메시지가 표시됩니다. 다음과 같이 표시됩니다.

  1. sudo apt install apache2
Output
Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: apache2-data Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 236 kB of archives. After this operation, 1,163 kB of additional disk space will be used. Do you want to continue [Y/n]?

보시다시피 설치 대상이 apache2 패키지였더라도 apache2-data 패키지가 종속성으로 필요합니다. 이 경우 Enter 또는 "Y\를 눌러 계속하거나 "n\을 입력하여 취소할 수 있습니다.

저장소에서 특정 패키지 버전 설치

특정 버전의 패키지를 설치해야 하는 경우 다음과 같이 =를 사용하여 대상으로 지정하려는 버전을 제공할 수 있습니다.

sudo apt install package=version

이 경우 버전은 저장소에서 사용 가능한 패키지 버전 번호 중 하나와 일치해야 합니다. 이는 배포판에서 사용하는 버전 관리 체계를 활용하는 것을 의미합니다. apt-cache policy package를 사용하여 사용 가능한 버전을 찾을 수 있습니다.

  1. apt-cache policy nginx
Output
nginx: Installed: (none) Candidate: 1.18.0-0ubuntu1.2 Version table: 1.18.0-0ubuntu1.2 500 500 http://mirrors.linux-console.net/ubuntu focal-updates/main amd64 Packages 500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages 1.17.10-0ubuntu1 500 500 http://mirrors.linux-console.net/ubuntu focal/main amd64 Packages

패키지 재구성

많은 패키지에는 설치가 완료된 후 자동으로 실행되는 설치 후 구성 스크립트가 포함되어 있습니다. 여기에는 종종 관리자가 구성을 선택하라는 프롬프트가 포함됩니다.

나중에 이러한 (및 추가) 구성 단계를 실행해야 하는 경우 dpkg-reconfigure 명령을 사용할 수 있습니다. 이 명령은 전달된 패키지를 확인하고 패키지 사양에 포함된 구성 후 명령을 다시 실행합니다.

  1. sudo dpkg-reconfigure package

이렇게 하면 설치 시 실행한 것과 동일한(종종 더 많은) 프롬프트에 액세스할 수 있습니다.

패키지 작업의 모의 실행 수행

실제로 명령을 실행하기 전에 프로시저의 부작용을 보고 싶을 때가 많습니다. apt를 사용하면 -s 플래그를 "simulate\ 절차에 추가할 수 있습니다.

예를 들어 패키지를 설치하기로 선택한 경우 수행되는 작업을 보려면 다음을 입력할 수 있습니다.

  1. apt install -s package

이렇게 하면 -s 플래그를 제거할 경우 발생할 시스템의 모든 종속성과 변경 사항을 볼 수 있습니다. 이것의 한 가지 이점은 sudo를 사용하지 않고 일반적으로 루트 권한이 필요한 프로세스의 결과를 볼 수 있다는 것입니다.

예를 들어 apache2 패키지와 함께 설치될 항목을 평가하려는 경우 다음을 입력할 수 있습니다.

  1. apt install -s apache2
Output
NOTE: This is only a simulation! apt needs root privileges for real execution. Keep also in mind that locking is deactivated, so don't depend on the relevance to the real current situation! Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: apache2-data Suggested packages: apache2-doc apache2-suexec-pristine apache2-suexec-custom apache2-utils The following NEW packages will be installed: apache2 apache2-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Inst apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all]) Inst apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64]) Conf apache2-data (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [all]) Conf apache2 (2.4.6-2ubuntu2.2 Ubuntu:13.10/saucy-updates [amd64])

실제 프로세스를 완료하지 않고도 설치할 패키지 및 버전에 대한 모든 정보를 얻을 수 있습니다.

이는 시스템 업그레이드와 같은 다른 절차에서도 작동합니다.

  1. apt -s dist-upgrade

기본적으로 apt는 많은 프로세스에 대해 사용자에게 확인 메시지를 표시합니다. 여기에는 추가 종속성과 패키지 업그레이드가 필요한 설치가 포함됩니다.

이러한 업그레이드를 우회하고 기본적으로 이러한 프롬프트를 수락하려면 다음 작업을 수행할 때 -y 플래그를 전달할 수 있습니다.

  1. sudo apt install -y package

이렇게 하면 사용자에게 더 이상 묻지 않고 패키지와 모든 종속성이 설치됩니다. 이는 업그레이드 절차에도 사용할 수 있습니다.

  1. sudo apt dist-upgrade -y

손상된 종속성 및 패키지 수정

종속성 또는 기타 문제로 인해 설치가 성공적으로 완료되지 않는 경우가 있습니다. 이러한 일이 발생할 수 있는 일반적인 시나리오 중 하나는 종속성을 해결하지 않는 dpkg.deb 패키지를 설치할 때입니다.

apt 명령은 -f 명령을 전달하여 이 상황을 분류하려고 시도할 수 있습니다.

  1. sudo apt install -f

이렇게 하면 충족되지 않은 종속성을 검색하고 종속성 트리를 수정하기 위해 설치를 시도합니다. 설치에서 종속성 문제에 대해 불평하는 경우 이를 해결하기 위한 첫 번째 단계여야 합니다. 이 방법으로 문제를 해결할 수 없고 타사 패키지를 설치한 경우 해당 패키지를 제거하고 보다 적극적으로 유지 관리되는 최신 버전을 찾아야 합니다.

저장소에서 패키지 다운로드

패키지를 실제로 설치하지 않고 리포지토리에서 다운로드하는 것이 도움이 될 수 있는 주요 인스턴스가 있습니다. download 인수와 함께 apt를 실행하면 됩니다.

이는 파일을 다운로드하기만 하고 실제 시스템에 영향을 주지 않기 때문에 sudo 권한이 필요하지 않습니다.

  1. apt download package

이렇게 하면 지정된 패키지가 현재 디렉터리로 다운로드됩니다.

.deb 패키지 설치

대부분의 배포판은 유지 관리되는 리포지토리에서 소프트웨어를 설치하도록 권장하지만 일부 공급업체는 시스템에 설치할 수 있는 원시 .deb 파일을 제공합니다.

이렇게 하려면 dpkg를 사용합니다. dpkg는 주로 개별 패키지 작업에 사용됩니다. 저장소에서 설치를 시도하지 않고 대신 현재 디렉터리 또는 제공된 경로에서 .deb 패키지를 찾습니다.

  1. sudo dpkg --install debfile.deb

dpkg 도구는 종속성 처리를 구현하지 않는다는 점에 유의해야 합니다. 이는 충족되지 않은 종속성이 있는 경우 설치가 실패함을 의미합니다. 그러나 필요한 종속성을 표시하므로 리포지토리 내에서 모든 종속성을 사용할 수 있는 경우 나중에 다음을 입력하여 만족시킬 수 있습니다.

  1. sudo apt install -f

이렇게 하면 dpkg로 표시된 항목을 포함하여 충족되지 않은 종속성이 모두 설치됩니다. 다음 단계에서는 설치한 일부 패키지를 제거하는 방법에 대해 알아봅니다.

4단계 – 패키지 제거 및 파일 삭제

이 섹션에서는 패키지를 제거하고 패키지 작업으로 인해 남을 수 있는 파일을 정리하는 방법에 대해 설명합니다.

패키지 제거

설치된 패키지를 제거하려면 apt remove를 사용합니다. 이렇게 하면 한 가지 주목할만한 예외를 제외하고 패키지가 시스템에 설치한 대부분의 파일이 제거됩니다.

이 명령은 나중에 응용 프로그램을 다시 설치해야 하는 경우 구성을 계속 사용할 수 있도록 구성 파일을 그대로 둡니다. 이는 실수로 패키지를 제거한 경우 사용자 정의한 구성 파일이 제거되지 않음을 의미하기 때문에 유용합니다.

이 작업을 완료하려면 제거하려는 패키지의 이름을 제공해야 합니다.

  1. sudo apt remove package

구성 파일을 제외하고 패키지가 제거됩니다.

패키지 및 모든 관련 구성 파일 제거

구성 파일을 포함하여 시스템에서 패키지 및 모든 관련 파일을 제거하려면 apt purge를 사용할 수 있습니다.

위에서 언급한 remove 명령과 달리 purge 명령은 모든 것을 제거합니다. 이는 구성 파일을 저장하지 않으려는 경우 또는 문제가 있어 깨끗한 슬레이트에서 시작하려는 경우에 유용합니다.

구성 파일이 제거되면 복구할 수 없습니다.

  1. sudo apt purge package

이제 해당 패키지를 다시 설치해야 하는 경우 기본 구성이 사용됩니다.

더 이상 필요하지 않은 자동 종속성 제거

apt remove 또는 apt purge로 시스템에서 패키지를 제거하면 패키지 대상이 제거됩니다. 그러나 설치 요구 사항을 충족하기 위해 자동으로 설치된 모든 종속성은 뒤에 남아 있습니다.

패키지에 더 이상 필요하지 않은 종속성으로 설치된 패키지를 자동으로 제거하려면 autoremove 명령을 사용할 수 있습니다.

  1. sudo apt autoremove

제거 중인 종속성에서 관련 구성 파일을 모두 제거하려면 autoremove 명령에 --purge 옵션을 추가해야 합니다. 이렇게 하면 purge 명령이 대상 제거를 위해 수행하는 것과 마찬가지로 구성 파일도 정리됩니다.

  1. sudo apt --purge autoremove

사용하지 않는 패키지 파일 정리

패키지가 배포판의 패키지 관리자에 의해 리포지토리에서 추가 및 제거됨에 따라 일부 패키지는 더 이상 사용되지 않게 됩니다.

apt 도구는 autoclean 명령을 사용하여 리포지토리에서 더 이상 사용할 수 없는 패키지와 연결된 로컬 시스템의 모든 패키지 파일을 제거할 수 있습니다.

이렇게 하면 서버의 공간이 확보되고 로컬 캐시에서 잠재적으로 오래된 패키지가 제거됩니다.

  1. sudo apt autoclean

다음 단계에서는 패키지를 반드시 설치하지 않고 쿼리하는 더 많은 방법을 배웁니다.

5단계 – 패키지에 대한 정보 얻기

각 패키지에는 패키지 관리 도구를 사용하여 액세스할 수 있는 많은 양의 메타데이터가 포함되어 있습니다. 이 섹션에서는 사용 가능하고 설치된 패키지에 대한 정보를 얻는 몇 가지 일반적인 방법을 보여줍니다.

배포 저장소의 패키지에 대한 자세한 정보를 표시하려면 apt-cache show를 사용할 수 있습니다. 이 명령의 대상은 저장소 내의 패키지 이름입니다.

  1. apt-cache show nginx

해당 패키지의 설치 후보에 대한 정보가 표시됩니다. 각 후보에는 종속성, 버전, 아키텍처, 충돌, 실제 패키지 파일 이름, 패키지 및 설치 크기, 자세한 설명에 대한 정보가 있습니다.

Output
Package: nginx Architecture: all Version: 1.18.0-0ubuntu1.2 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Original-Maintainer: Debian Nginx Maintainers <pkg-nginx-maintainers@lists.alioth.debian.org> Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 44 Depends: nginx-core (<< 1.18.0-0ubuntu1.2.1~) | nginx-full (<< 1.18.0-0ubuntu1.2.1~) | nginx-light (<< 1.18.0-0ubuntu1.2.1~) | nginx-extras (<< 1.18.0-0ubuntu1.2.1~), nginx-core (>= 1.18.0-0ubuntu1.2) | nginx-full (>= 1.18.0-0ubuntu1.2) | nginx-light (>= 1.18.0-0ubuntu1.2) | nginx-extras (>= 1.18.0-0ubuntu1.2) Filename: pool/main/n/nginx/nginx_1.18.0-0ubuntu1.2_all.deb …

역 종속성의 전체 목록(조회된 패키지에 종속된 패키지 목록)을 포함하여 각 후보에 대한 추가 정보를 표시하려면 showpkg 명령을 대신 사용하십시오. 여기에는 이 패키지와 다른 패키지의 관계에 대한 정보가 포함됩니다.

  1. apt-cache showpkg package

.deb 패키지에 대한 정보 표시

.deb 파일에 대한 세부 정보를 표시하려면 dpkg 명령과 함께 --info 플래그를 사용할 수 있습니다. 이 명령의 대상은 .deb 파일의 경로여야 합니다.

  1. dpkg --info debfile.deb

그러면 해당 패키지에 대한 일부 메타데이터가 표시됩니다. 여기에는 패키지 이름 및 버전, 빌드 대상 아키텍처, 필요한 크기 및 종속성, 설명 및 충돌이 포함됩니다.

종속성(이 패키지가 의존하는 패키지) 및 역방향 종속성(이 패키지에 의존하는 패키지)을 구체적으로 나열하려면 apt-cache 유틸리티를 사용할 수 있습니다.

일반적인 종속성 정보의 경우 depends 하위 명령을 사용할 수 있습니다.

  1. apt-cache depends nginx
Output
nginx |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras

여기에는 엄격한 종속성, 제안, 권장 사항 또는 충돌로 나열된 모든 패키지에 대한 정보가 표시됩니다.

특정 패키지에 종속된 패키지를 찾아야 하는 경우 해당 패키지를 apt-cache rdepends에 전달할 수 있습니다.

  1. apt-cache rdepends package

설치 및 사용 가능한 패키지 버전 표시

종종 리포지토리 내에는 단일 기본 패키지와 함께 여러 버전의 패키지가 있습니다. 사용 가능한 패키지 버전을 보려면 apt-cache 정책을 사용할 수 있습니다.

  1. apt-cache policy package

설치된 버전(있는 경우), 설치 명령으로 버전을 지정하지 않은 경우 기본적으로 설치될 패키지, 각 버전의 우선 순위를 나타내는 가중치가 포함된 패키지 버전 표가 표시됩니다.

이것은 설치될 버전과 사용 가능한 대안을 결정하는 데 사용할 수 있습니다. 여기에는 각 버전이 있는 리포지토리도 나열되므로 추가 리포지토리가 기본 리포지토리의 패키지를 대체하는지 확인하는 데 사용할 수 있습니다.

dpkg -l을 사용하여 설치된 패키지 표시

시스템에 설치된 패키지를 표시하기 위해 출력의 형식과 세부 정보가 다른 몇 가지 개별 옵션이 있습니다.

첫 번째 방법은 dpkg 또는 dpkg-query 명령을 -l 플래그와 함께 사용하는 것입니다. 이 두 명령의 출력은 동일합니다. 인수 없이 시스템에 설치된 모든 패키지 또는 부분적으로 설치된 패키지 목록을 제공합니다. 출력은 다음과 같습니다.

  1. dpkg -l
Output
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===========================================-=======================================-============-===================================================================================================================== ii account-plugin-generic-oauth 0.10bzr13.03.26-0ubuntu1.1 amd64 GNOME Control Center account plugin for single signon - generic OAuth ii accountsservice 0.6.34-0ubuntu6 amd64 query and manipulate user account information ii acl 2.2.52-1 amd64 Access control list utilities ii acpi-support 0.142 amd64 scripts for handling many ACPI events ii acpid 1:2.0.18-1ubuntu2 amd64 Advanced Configuration and Power Interface event daemon . . .

출력은 시스템의 모든 패키지에 대해 계속됩니다. 출력 맨 위에서 각 행의 처음 세 문자의 의미를 볼 수 있습니다. 첫 번째 문자는 원하는 패키지 상태를 나타냅니다. 그것은 될 수 있습니다:

  • u: 알 수 없음
  • i: 설치됨
  • r: 제거됨
  • p: 제거됨
  • h: 보유 버전

두 번째 문자는 패키징 시스템에 알려진 패키지의 실제 상태를 나타냅니다. 다음과 같을 수 있습니다.

  • n: 설치되지 않음
  • i: 설치됨
  • c: 구성 파일이 있지만 애플리케이션이 제거되었습니다.
  • u: 포장을 풀었습니다. 파일이 압축 해제되었지만 아직 구성되지 않았습니다.
  • f: 패키지가 절반만 설치되었습니다. 즉, 설치 중간에 오류가 발생하여 작업이 중단되었습니다.
  • w: 패키지가 별도의 패키지에서 트리거를 기다리고 있습니다.
  • p: 패키지가 다른 패키지에 의해 트리거되었습니다.

대부분의 패키지에서 공백이 될 세 번째 문자에는 잠재적인 다른 옵션이 하나만 있습니다.

  • r: 재설치가 필요함을 나타냅니다. 이는 일반적으로 패키지가 손상되어 작동하지 않는 상태임을 의미합니다.

나머지 열에는 패키지 이름, 버전, 아키텍처 및 설명이 포함됩니다.

필터링된 패키지의 설치 상태 표시

-l 패턴 다음에 검색 패턴을 추가하면 dpkg는 해당 패턴을 포함하는 모든 패키지(설치 여부에 관계없이)를 나열합니다. 예를 들어 여기에서 YAML 처리 라이브러리를 검색할 수 있습니다.

  1. dpkg -l libyaml*
Output
Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-===============-============-============-=================================== ii libyaml-0-2:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li ii libyaml-dev:amd 0.1.4-2ubunt amd64 Fast YAML 1.1 parser and emitter li un libyaml-perl <none> (no description available) un libyaml-syck-pe <none> (no description available) ii libyaml-tiny-pe 1.51-2 all Perl module for reading and writing

첫 번째 열에서 볼 수 있듯이 세 번째와 네 번째 결과는 설치되지 않았습니다. 이것은 패턴과 일치하는 모든 패키지와 현재 및 원하는 상태를 제공합니다.

시스템에 설치된 패키지를 렌더링하는 다른 방법은 dpkg –get-selections를 사용하는 것입니다.

이것은 설치 또는 제거되었지만 제거되지 않은 모든 패키지 목록을 제공합니다.

  1. dpkg --get-selections

이 두 상태를 구분하려면 상태별로 필터링하기 위해 출력을 dpkg에서 awk로 파이프할 수 있습니다. 설치된 패키지만 보려면 다음을 입력하십시오.

  1. dpkg --get-selections | awk '$2 ~ /^install/'

구성 파일이 제거되지 않은 제거된 패키지 목록을 얻으려면 대신 다음을 입력할 수 있습니다.

  1. dpkg --get-selections | awk '$2 !~ /^install/'

awk를 통한 파이핑 명령 출력에 대해 자세히 알아볼 수도 있습니다.

설치된 패키지 검색

설치된 패키지 기반에서 특정 패키지를 검색하려면 --get-selections 옵션 뒤에 패키지 필터 문자열을 추가할 수 있습니다. 이는 와일드카드와의 일치를 지원합니다. 다시 말하지만, 이것은 설치되어 있거나 아직 시스템에 구성 파일이 있는 모든 패키지를 표시합니다.

  1. dpkg --get-selections libz*

다시 한 번 마지막 섹션의 awk 표현식을 사용하여 필터링할 수 있습니다.

패키지로 설치된 파일 나열

패키지가 담당하는 파일을 찾으려면 dpkg 명령과 함께 -L 플래그를 사용할 수 있습니다.

  1. dpkg -L package

이것은 패키지에 의해 제어되는 각 파일의 절대 경로를 인쇄합니다. 여기에는 패키지 내의 프로세스에서 생성된 구성 파일이 포함되지 않습니다.

파일 시스템의 특정 파일을 담당하는 패키지를 찾으려면 -S 플래그와 함께 dpkg 명령에 절대 경로를 전달할 수 있습니다.

그러면 해당 파일을 설치한 패키지가 인쇄됩니다.

  1. dpkg -S /path/to/file

사후 설치 스크립트에 의해 제자리로 이동된 모든 파일은 이 기술을 사용하여 패키지에 다시 연결할 수 없습니다.

설치하지 않고 파일을 제공하는 패키지 찾기

dpkg를 사용하면 -S 옵션을 사용하여 파일을 소유한 패키지를 찾을 수 있습니다. 그러나 연결된 패키지가 설치되어 있지 않은 경우에도 어떤 패키지가 파일이나 명령을 제공하는지 알아야 하는 경우가 있습니다.

이렇게 하려면 apt-file이라는 유틸리티를 설치해야 합니다. 이것은 데이터베이스의 패키지에 의해 제어되는 모든 파일의 설치 경로를 포함하는 자체 정보 데이터베이스를 유지합니다.

apt-file 패키지를 정상적으로 설치합니다.

  1. sudo apt update
  2. sudo apt install apt-file

이제 도구의 데이터베이스를 업데이트하고 다음을 입력하여 파일을 검색합니다.

  1. sudo apt-file update
  2. sudo apt-file search /path/to/file

이것은 패키지에 의해 직접 설치된 파일 위치에서만 작동합니다. 사후 설치 스크립트를 통해 생성된 모든 파일은 쿼리할 수 없습니다. 다음 단계에서는 설치된 패키지 목록을 가져오고 내보내는 방법을 배웁니다.

6단계 – 시스템 간 패키지 목록 전송

한 시스템에서 설치된 패키지 목록을 백업하고 이를 사용하여 다른 시스템에 동일한 패키지 세트를 설치해야 하는 경우가 많습니다. 이는 백업용으로도 유용합니다. 이 섹션에서는 패키지 목록을 내보내고 가져오는 방법을 보여줍니다.

한 시스템에 설치된 패키지 세트를 다른 시스템에 복제해야 하는 경우 먼저 패키지 목록을 내보내야 합니다.

dpkg --get-selections의 출력을 텍스트 파일로 리디렉션하여 설치된 패키지 목록을 파일로 내보낼 수 있습니다.

  1. dpkg --get-selections > ~/packagelist.txt

입력 및 출력 리디렉션에 대해 자세히 알아볼 수도 있습니다.

그런 다음 이 목록을 두 번째 컴퓨터에 복사하고 가져올 수 있습니다.

소스 목록과 신뢰할 수 있는 키 목록을 백업해야 할 수도 있습니다. 새 디렉터리를 만들고 /etc/apt/의 시스템 구성에서 복사하여 소스를 백업할 수 있습니다.

  1. mkdir ~/sources
  2. cp -R /etc/apt/sources.list* ~/sources

타사 리포지토리에서 패키지를 설치하기 위해 추가한 모든 키는 apt-key exportall을 사용하여 내보낼 수 있습니다.

  1. apt-key exportall > ~/trusted_keys.txt

이제 packagelist.txt 파일, sources 디렉터리 및 trusted_keys.txt 파일을 다른 컴퓨터로 전송하여 가져올 수 있습니다.

패키지 목록 가져오기

위에서 설명한 것처럼 dpkg --get-selections를 사용하여 패키지 목록을 만든 경우 dpkg 명령을 사용하여 다른 컴퓨터에서도 패키지를 가져올 수 있습니다.

먼저 신뢰할 수 있는 키를 추가하고 첫 번째 환경에서 복사한 소스 목록을 구현해야 합니다. 백업한 모든 데이터가 새 컴퓨터의 홈 디렉토리에 복사되었다고 가정하면 다음을 입력할 수 있습니다.

  1. sudo apt-key add ~/trusted_keys.txt
  2. sudo cp -R ~sources/* /etc/apt/

그런 다음 새 컴퓨터에서 필수가 아닌 모든 패키지의 상태를 지웁니다. 이렇게 하면 변경 사항을 깨끗한 슬레이트에 적용할 수 있습니다. 루트 계정 또는 sudo 권한으로 이 작업을 수행해야 합니다.

  1. sudo dpkg --clear-selections

이는 필수가 아닌 모든 패키지를 제거하도록 표시합니다. 설치하려는 모든 소프트웨어에 대한 레코드가 설치에 포함되도록 로컬 패키지 목록을 업데이트해야 합니다. 실제 설치 및 업그레이드 절차는 dselect라는 도구로 처리됩니다.

dselect 도구가 설치되어 있는지 확인해야 합니다. 이 도구는 자체 데이터베이스를 유지하므로 계속하기 전에 업데이트해야 합니다.

  1. sudo apt update
  2. sudo apt install dselect
  3. sudo dselect update

다음으로 현재 목록 위에 패키지 목록을 적용하여 보관하거나 다운로드해야 하는 패키지를 구성할 수 있습니다.

  1. sudo dpkg --set-selections < packagelist.txt

이렇게 하면 올바른 패키지 상태가 설정됩니다. 변경 사항을 적용하려면 apt dselect-upgrade를 실행합니다.

  1. sudo apt dselect-upgrade

그러면 필요한 패키지가 모두 다운로드되어 설치됩니다. 또한 선택 취소로 표시된 모든 패키지를 제거합니다. 구성 파일을 복사하거나 수정해야 하지만 결국 패키지 목록은 이전 컴퓨터의 목록과 일치해야 합니다. etckeeper와 같은 도구를 사용하여 /etc 디렉토리에서 구성 파일을 마이그레이션할 수 있습니다.

다음 및 마지막 단계에서는 타사 패키지 리포지토리 작업에 대해 배웁니다.

7단계 – 리포지토리 및 PPA 추가

대부분의 배포판에서 제공하는 기본 리포지토리 세트가 일반적으로 가장 유지 관리가 용이하지만 추가 소스가 도움이 될 수 있는 경우가 있습니다. 이 섹션에서는 추가 소스를 참조하도록 패키징 도구를 구성하는 방법을 알아봅니다.

Ubuntu의 기존 리포지토리에 대한 대안은 PPA 또는 개인 패키지 아카이브입니다. 다른 Linux 버전은 일반적으로 다르지만 유사한 타사 리포지토리 개념을 사용합니다. 일반적으로 PPA는 리포지토리보다 범위가 작고 PPA 소유자가 유지 관리하는 집중된 응용 프로그램 집합을 포함합니다.

시스템에 PPA를 추가하면 일반적인 패키지 관리 도구로 PPA에 포함된 패키지를 관리할 수 있습니다. 이것은 배포판의 리포지토리에 포함되지 않은 최신 패키지를 제공하는 데 사용할 수 있습니다. 비표준 관리자가 시스템용 패키지를 빌드하도록 허용하므로 신뢰할 수 있는 PPA만 추가하도록 주의하십시오.

PPA를 추가하려면 add-apt-repository 명령을 사용할 수 있습니다. 대상에는 ppa: 레이블, Launchpad의 PPA 소유자 이름, 슬래시 및 PPA 이름이 포함되어야 합니다.

  1. sudo add-apt-repository ppa:owner_name/ppa_name

패키지 작성자의 키를 수락하라는 메시지가 표시될 수 있습니다. 그런 다음 PPA가 시스템에 추가되어 일반적인 apt 명령으로 패키지를 설치할 수 있습니다. 패키지를 검색하거나 설치하기 전에 새 PPA에 대한 정보로 로컬 캐시를 업데이트해야 합니다.

  1. sudo apt update

리포지토리 구성을 직접 편집할 수도 있습니다. /etc/apt/sources.list 파일을 편집하거나 /etc/apt/sources.list.d 디렉토리에 새 목록을 배치할 수 있습니다. 후자의 경로를 사용하는 경우 생성하는 파일 이름은 .list로 끝나야 합니다.

  1. sudo nano /etc/apt/sources.list.d/new_repo.list

파일 내에서 다음 형식을 사용하여 새 리포지토리의 위치를 추가할 수 있습니다.

deb_or_deb-src url_of_repo release_code_name_or_suite component_names

리포지토리 사양의 다른 부분은 다음과 같습니다.

  • deb 또는 deb-src: 저장소 유형을 식별합니다. 기존 리포지토리는 deb로 표시되고 소스 리포지토리는 deb-src로 시작합니다.
  • url: 저장소의 기본 URL입니다. 저장소를 찾을 수 있는 위치여야 합니다.
  • 릴리스 코드 이름 또는 제품군: 이것은 일반적으로 배포 릴리스의 코드 이름이지만 배포 버전용으로 생성된 특정 패키지 집합을 식별하는 데 사용되는 이름이면 무엇이든 될 수 있습니다.
  • 구성 요소 이름: 사용하려는 패키지 선택에 대한 레이블입니다. 이것은 저장소 관리자가 저장소에 포함된 소프트웨어의 안정성 또는 라이선스 제한에 대해 표현하기 위해 제공하는 구분인 경우가 많습니다.

파일 내에 다음 행을 추가할 수 있습니다. 대부분의 리포지토리에는 사용해야 하는 정확한 형식에 대한 정보가 포함됩니다. 일부 다른 Linux 배포판에서는 해당 리포지토리에 대한 구성 파일만 포함된 패키지를 실제로 설치하여 추가 리포지토리 소스를 추가할 수 있습니다. 이는 패키지 관리자가 작동하도록 설계된 방식과 일치합니다.

결론

패키지 관리는 아마도 Linux 시스템 관리의 가장 중요한 단일 측면일 것입니다. 수행할 수 있는 다른 많은 패키지 관리 작업이 있지만 이 자습서에서는 Ubuntu 기본 사항의 기준을 제공했으며 그 중 대부분은 사소한 변경으로 다른 배포판에 일반화할 수 있습니다.

다음으로 다른 플랫폼의 패키지 관리에 대해 자세히 알아볼 수 있습니다.