DNF
디엔에프
는 계열에서 저장소와 의존성, 패키지 설치 거래를 관리하는 상위 도구이다. 설치된 목록과 저장소 후보를 비교하여 필요한 추가·교체·제거를 계산한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 여러 저장소의 패키지 메타데이터와 후보 버전을 조회한다.
- 의존성·충돌·버전 조건을 해결하여 일관된 설치 거래를 계획한다.
- 패키지 거래 이력과 업데이트 후보를 통해 시스템 변경을 추적한다.
02어떤 순서로 동작하나
- 현재 상태 수집
데이터베이스에서 설치된 패키지를 읽고 활성화된 저장소 구성을 확인한다. 저장소 우선순위·제외 설정 등에 따라 사용할 후보가 제한된다.
- 후보와 조건 비교
메타데이터의 이름·버전··의존성 정보를 읽어 요청과 맞는 후보를 찾는다. 같은 프로그램의 외부 직접 설치는 이 관리 상태와 다를 수 있다.
- 거래 계획 계산
가 함께 설치하거나 교체해야 하는 패키지를 정한다. 한 패키지의 새 버전이 요구하는 라이브러리가 없으면 원하는 업그레이드가 선택되지 않을 수 있다.
- 검증과 적용
계획을 승인하면 패키지를 받아 검증하고 거래를 실행한다. 이력은 패키지 변경을 기록하지만 데이터베이스 내용과 모든 사용자 파일을 되돌리는 완전한 백업은 아니다.
03먼저 알아둘 용어와 구성요소
- 패키지 파일과 후보·의존성 메타데이터를 제공하는 저장소이다.
- 현재 상태와 요청을 만족하도록 패키지 조합을 계산하는 구성요소이다.
- 이름·epoch·version·release·architecture를 함께 고려하는 패키지 식별 관점이다.
- 업데이트 후보를 조회하는 동작이다. 에서 후보가 있으면 100이라는 특수 종료 코드를 사용할 수 있다.
- 설치·업데이트·제거를 묶어 수행하는 작업 단위이다.
- 과거 거래를 조회하는 인터페이스이다. 이전 패키지의 가용성과 외부 상태 때문에 되돌리기 가능 범위가 제한될 수 있다.
저장소의 모듈 목록과 실제 설치 버전 구별하기
사용 가능한 패키지 선택지, 설치 데이터베이스, 실행 파일 버전을 구분하여 버전 확인 결과를 해석한다.
실습 구성과 전제
- 의 모듈 목록과 의 -query는 서로 다른 시스템 사례다. 같은 서버에서 이어 실행한 결과가 아니다.
- 화면의 버전은 촬영 시점의 상태다. 현재 권장 버전이나 최신 버전 목록으로 읽지 않는다.
module list를 설치 목록으로 오해하지 않는다
- 의 모듈 목록에는 이름·스트림·프로필과 표시 기호가 나온다. 스트림은 배포판이 제공하는 패키지 계열의 선택지이며, 여러 줄이 모두 설치되어 있다는 뜻은 아니다.
- 기본값 표시 [d]와 활성화·설치 표시는 서로 다르다. 출력 하단의 기호 설명과 저장소 구성을 함께 읽어야 한다.
bashdnf module list php rpm -q php php --version모듈을 제공하는 계열 환경의 조회 예시다.
원본 크기로 보기 ↗- MariaDB·nginx·PHP 등 이름 아래에 여러 버전 스트림이 나열된다.
- 각 스트림에는 프로필과 [d] 같은 표시가 붙어 있어 단순 버전 문자열 이상의 상태를 담는다.
확인 기준사용 중인 버전을 확인하려면 설치 데이터베이스와 실행 파일을 추가 조회한다. 모듈을 제공하지 않는 배포판 버전에서는 같은 출력이 나오지 않을 수 있다.
설치 데이터베이스의 이름·버전을 읽는다
- -query -W는 계열 설치 데이터베이스에서 지정 패키지를 조회한다. 화면의 두 제품 버전은 이 시스템에 등록된 패키지 정보다.
- 패키지가 설치되었다고 서비스가 정상 실행 중인 것은 아니다. 설정 오류나 중지 상태는 서비스 조회로 별도 확인한다.
bashdpkg-query -W -f='${Package}\t${Version}\t${db:Status-Status}\n' nginx계열에서 버전과 설치 상태 필드를 함께 읽는 재구성 예시다.
원본 크기로 보기 ↗- dpkg-query -W 뒤에 elasticsearch와 kibana 두 패키지명이 지정되어 있다.
- 결과는 제품별 한 줄로 버전을 출력하며, 두 줄 모두 9.5.2가 보인다.
확인 기준조회 오류와 비어 있는 결과를 성공적인 미설치 확인과 혼동하지 않는다. 패키지명 및 명령 종료 상태도 함께 읽는다.
실행되는 파일의 출처까지 연결한다
- PATH에서 먼저 찾은 프로그램이 방금 조회한 패키지의 실행 파일인지 확인한다. 별도 설치한 버전이나 가상 환경이 앞에 있을 수 있다.
- 명령 경로를 찾은 뒤 -qf 또는 -query -S로 소유 패키지를 연결한다. 패키지 버전과 프로그램의 자체 버전 표기는 배포판 수정 번호 등으로 형태가 다를 수 있다.
bashcommand -v php readlink -f "$(command -v php)" # RPM 계열: rpm -qf /실제/실행파일 # Debian 계열: dpkg-query -S /실제/실행파일경로를 먼저 확인한 다음 해당 배포판의 파일 소유 조회를 적용한다.
확인 기준설치 버전과 실행 버전이 다르면 저장소를 바로 바꾸기보다 실제 경로·심볼릭 링크·가상 환경부터 확인한다.
실습에서 확인한 동작 원리
- 저장소의 선택지, 설치 기록, 실행 중인 프로그램은 서로 다른 관찰 지점이다.
- 목록의 버전 숫자만 비교하지 말고 스트림 표시·설치 상태·실행 경로를 함께 연결한다.
동작·명령 참고 문서
04예제로 따라가기
- info 는 저장소와 설치 상태의 정보를 읽는 조회 예이다. 설치 여부와 후보 가용성을 구분한다.
- 결과 0은 업데이트 후보 없음, 100은 후보 있음, 오류 코드는 실패라는 의미를 나누어 자동화한다.
- 웹 서버가 이미 메모리에 적재한 라이브러리는 패키지 교체만으로 즉시 새 파일을 다시 읽지 않을 수 있다. 변경 적용은 상태까지 연결한다.
05혼동하기 쉬운 점과 확인 기준
- 라는 이름만으로 모든 세대의 옵션·플러그인이 동일하다고 보지 않는다. 와 DNF5 등 설치된 구현과 문서를 맞춘다.
- 의존성 오류를 해결하기 위해 강제 제거·검증 생략을 먼저 적용하지 않는다. 어떤 패키지 조건이 충돌하는지 계획을 읽는 것이 우선이다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.