배포판·패키지와 실행 환경
배포판과 저장소, 패키지 관리 도구, 실제 실행 파일의 위치를 함께 확인해야 환경 차이를 이해할 수 있습니다.
개념부터 찾아보기
정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.
이 노트에서 설명할 수 있게 되는 것
- 저장소 메타데이터·패키지 파일·설치 상태의 관계를 설명한다.
- 패키지 설치와 현재 프로세스·실행 경로의 차이를 추적한다.
- 업데이트 전후 의존성과 서비스 영향을 확인한다.
01배포판의 사용자 공간과 실행 중인 커널을 구별하기
- 커널·패키지라는 커널을 공통으로 사용해도 패키지 형식, 기본 경로, 서비스 이름, , 보안 정책은 배포판마다 다르다.
- 식별 필드/etc/의 ID는 식별자, ID_LIKE는 호환 계열, VERSION_ID는 릴리스를 뜻한다.
- unameuname -r은 현재 실행 중인 커널 버전이다.
- ·커널컨테이너에서는 이 여도 커널은 호스트의 것을 공유하므로 두 출력이 서로 다른 계열을 가리킬 수 있다.
- 을 사용하는 RHEL··Fedora가 모두 같은 와 수명주기를 갖는 것은 아니다.
- ·는 와 계열을 사용한다.
- 패키지CPU 도 패키지 선택의 일부이며 x86_64용 바이너리를 aarch64 시스템에 복사했다고 바로 실행할 수 있는 것은 아니다.
- 설치 환경의 좌표·릴리스·는 설치 절차를 선택하는 좌표다.
cat /etc/os-release
uname -r
uname -m
command -v rpm
command -v dpkg교육용 설정·명령 예시. 실행 환경과 대상 경로를 가정하며 이 페이지를 만들면서 실행하지 않았다.
02패키지 파일, 설치 데이터베이스, 저장소 관리자의 관계
- 패키지에는 프로그램 파일과 함께 이름·버전··의존성·설치 스크립트·설정 파일 정보 같은 메타데이터가 들어간다.
- 이나 는 로컬 패키지를 설치하고 설치 데이터베이스를 관리하는 기반 도구다.
- ·메타데이터와 는 를 조회하고 의존 관계를 해결하여 여러 패키지를 하나의 설치 계획으로 묶는다.
- 수동 설치와 관리패키지 파일 하나를 수동으로 설치하는 작업과 에서 필요한 구성 요소를 함께 선택하는 작업의 층이 다르다.
- 예를 들어 웹 서버 패키지가 특정 를 필요로 하면 관리자는 현재 설치 상태와 의 후보 버전을 비교해 충족 가능한 조합을 찾는다.
- 변경 목록 계산내려받기 전에 설치·업그레이드·제거 예정 목록을 보여 주는 이유가 여기에 있다.
- · 과 패키지 검증은 신뢰한 배포자가 제공한 자료인지 검사하는 부분이며, 단순히 파일이 다운로드되었다는 사실과 구별된다.
- ·의존성서로 다른 릴리스의 를 섞으면 의존성을 형식상 충족해도 ABI와 지원 관계가 깨질 수 있다.
저장소의 모듈 목록과 실제 설치 버전 구별하기
사용 가능한 패키지 선택지, 설치 데이터베이스, 실행 파일 버전을 구분하여 버전 확인 결과를 해석한다.
실습 구성과 전제
- 의 모듈 목록과 의 는 서로 다른 시스템 사례다. 같은 서버에서 이어 실행한 결과가 아니다.
- 화면의 버전은 촬영 시점의 상태다. 현재 권장 버전이나 최신 버전 목록으로 읽지 않는다.
module list를 설치 목록으로 오해하지 않는다
- 의 모듈 목록에는 이름·스트림·프로필과 표시 기호가 나온다. 스트림은 이 제공하는 패키지 계열의 선택지이며, 여러 줄이 모두 설치되어 있다는 뜻은 아니다.
- 기본값 표시 [d]와 ·설치 표시는 서로 다르다. 출력 하단의 기호 설명과 구성을 함께 읽어야 한다.
bashdnf module list php rpm -q php php --version모듈을 제공하는 계열 환경의 조회 예시다.
원본 크기로 보기 ↗- MariaDB·nginx·PHP 등 이름 아래에 여러 버전 스트림이 나열된다.
- 각 스트림에는 프로필과 [d] 같은 표시가 붙어 있어 단순 버전 문자열 이상의 상태를 담는다.
확인 기준사용 중인 버전을 확인하려면 설치 데이터베이스와 실행 파일을 추가 조회한다. 모듈을 제공하지 않는 버전에서는 같은 출력이 나오지 않을 수 있다.
설치 데이터베이스의 이름·버전을 읽는다
- -W는 계열 설치 데이터베이스에서 지정 패키지를 조회한다. 화면의 두 제품 버전은 이 시스템에 등록된 패키지 정보다.
- 패키지가 설치되었다고 서비스가 정상 실행 중인 것은 아니다. 설정 오류나 중지 상태는 서비스 조회로 별도 확인한다.
bashdpkg-query -W -f='${Package}\t${Version}\t${db:Status-Status}\n' nginx계열에서 버전과 설치 상태 필드를 함께 읽는 재구성 예시다.
원본 크기로 보기 ↗- dpkg-query -W 뒤에 elasticsearch와 kibana 두 패키지명이 지정되어 있다.
- 결과는 제품별 한 줄로 버전을 출력하며, 두 줄 모두 9.5.2가 보인다.
확인 기준조회 오류와 비어 있는 결과를 성공적인 미설치 확인과 혼동하지 않는다. 패키지명 및 명령 종료 상태도 함께 읽는다.
실행되는 파일의 출처까지 연결한다
- 에서 먼저 찾은 프로그램이 방금 조회한 패키지의 실행 파일인지 확인한다. 별도 설치한 버전이나 가상 환경이 앞에 있을 수 있다.
- 명령 경로를 찾은 뒤 -qf 또는 -S로 소유 패키지를 연결한다. 패키지 버전과 프로그램의 자체 버전 표기는 수정 번호 등으로 형태가 다를 수 있다.
bashcommand -v php readlink -f "$(command -v php)" # RPM 계열: rpm -qf /실제/실행파일 # Debian 계열: dpkg-query -S /실제/실행파일경로를 먼저 확인한 다음 해당 의 파일 소유 조회를 적용한다.
확인 기준설치 버전과 실행 버전이 다르면 를 바로 바꾸기보다 실제 경로·심볼릭 링크·가상 환경부터 확인한다.
실습에서 확인한 동작 원리
- 의 선택지, 설치 기록, 실행 중인 프로그램은 서로 다른 관찰 지점이다.
- 목록의 버전 숫자만 비교하지 말고 스트림 표시·설치 상태·실행 경로를 함께 연결한다.
설정·출력 추가로 확인하기 3장
아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.
실습 화면 묶음 01 1장
원본 크기로 보기 ↗- 에 삽입된 원본 학습 화면이다. inxi의 CPU·메모리·저장장치·네트워크·배포판·저장소 등 분야별 조회 옵션을 정리한 화면이다.
실습 화면 묶음 02 2장
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. 배포판·패키지와 실행 환경 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
원본 크기로 보기 ↗- 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. 배포판·패키지와 실행 환경 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
동작·명령 참고 문서
03패키지 갱신, 제거와 설정 파일의 수명
- ·메타데이터 갱신은 이용 가능한 버전 목록을 새로 받는 작업이다.
- 계열의 는 이 단계이며 실제 설치된 패키지 업그레이드와 다르다.
- 실행 중인 이전 코드설치된 바이너리가 바뀌어도 실행 중인 는 이전 나 이미 매핑된 라이브러리를 사용할 수 있다.
- 패키지·커널그래서 패키지 갱신과 서비스 재시작, 커널 갱신과 새 커널로 재부팅하는 단계를 구별해야 한다.
- 패키지·의존성제거할 패키지가 다른 패키지의 의존성으로 사용되면 함께 영향을 받는 범위를 계산한다.
- 의존성자동으로 설치된 의존성을 정리하는 autoremove는 의존성 기록에 기초하므로 사람이 실제로 사용하는 프로그램까지 자동 설치 상태로 남겨 두지 않았는지 의미를 이해해야 한다.
- 설정 파일 보존 방식도 도구마다 다르다.
- 최종 동작 설정의 기본 파일과 관리자가 수정한 파일이 충돌하면 별도 새 파일을 남기거나 선택을 요구할 수 있으므로 업그레이드를 모든 설정의 무조건 덮어쓰기로 생각하지 않는다.
# RHEL 계열의 조회 예시
dnf repolist
dnf info bash
rpm -q bash
rpm -ql bash
# Debian 계열의 조회 예시
apt-cache policy bash
dpkg-query -L bash교육용 설정·명령 예시. 실행 환경과 대상 경로를 가정하며 이 페이지를 만들면서 실행하지 않았다.
04명령 이름에서 실제 실행 파일까지 추적하기
- 명령 이름과 실행 대상셸에 입력한 이름이 곧 디스크 파일이라고 단정할 수 없다.
- ·명령alias, 함수, builtin, 해시된 경로, 검색이 명령 해석에 관여한다.
- 명령 후보 조회Bash에서 type -a는 여러 후보를 보여 주고 command -v는 현재 해석 결과를 알려 준다.
- whichwhich는 별도 프로그램이라 셸의 함수나 별칭 상태를 완전히 반영하지 못할 수 있다.
- 링크·Alternatives경로가 확인되어도 심볼릭 링크를 따라간 실제 파일과 alternatives가 선택한 구현을 다시 구분한다.
- 패키지·프로그램 파일의 소유 패키지는 -qf 또는 -S로 찾는다.
- /usr/local/bin에 수동 설치한 파일은 데이터베이스에 없을 수 있다.
- 인터랙티브 셸과 서비스는 와 환경 변수가 다를 수 있으므로 서비스의 ExecStart와 /proc/PID/exe가 실제 실행 대상을 보여 준다.
- 서비스의 실제 버전파일이 교체된 뒤 이전 가 남아 있는 경우에는 버전 명령만 새 셸에서 실행해서는 현재 서비스의 버전을 설명할 수 없다.
type -a python3
command -v python3
readlink -f /usr/bin/python3
systemctl show demo.service -p ExecStart -p MainPID교육용 설정·명령 예시. 실행 환경과 대상 경로를 가정하며 이 페이지를 만들면서 실행하지 않았다.
05공유 라이브러리와 Python 패키지를 혼동하지 않기
- 동적 실행 파일은 가 필요한 를 찾은 뒤 실행을 이어 간다.
- 실행 파일과 라이브러리실행 파일 자체의 위치가 맞아도 필요한 라이브러리나 호환 심볼이 없으면 적재가 실패할 수 있다.
- 캐시readelf -d의 NEEDED 항목은 필요한 라이브러리를 정적으로 살펴보는 방법이고, ldconfig 캐시는 시스템 라이브러리 검색에 관여한다.
- 신뢰하지 않는 실행 파일에 분석 도구를 적용할 때는 그 도구가 파일을 실제로 실행할 수 있는지도 구분한다.
- 모듈 모듈은 인터프리터의 sys.에서 찾는다.
- 가상 환경, 사용자 설치, 설치가 섞이면 같은 import 이름으로 다른 버전이 선택될 수 있다.
- python3 -m 는 그 python3에 연결된 를 사용한다는 의미다.
- 패키지운영체제 패키지 관리자는 시스템 구성 요소의 의존성을 관리하고 가상 환경은 프로젝트의 모듈 집합을 분리하므로 두 범위를 한 디렉터리에서 무분별하게 덮어쓰지 않는다.
readelf -d /usr/bin/ls
python3 -m pip show requests
python3 -c "import sys; print(sys.executable); print(*sys.path, sep=chr(10))"교육용 설정·명령 예시. 실행 환경과 대상 경로를 가정하며 이 페이지를 만들면서 실행하지 않았다.
06Anaconda·conda와 실제 Python 실행 환경
- 과 관리자은 ··분석 패키지 등을 묶은 이다. 는 그 안에서도 사용되는 패키지·환경 관리자이며 언어나 자체가 아니다.
- 환경별 설치 경로환경은 서로 다른 실행기·패키지 조합을 별도 경로로 관리한다. 한 환경에 설치한 모듈이 다른 환경의 에서도 자동으로 보이는 것은 아니다.
- 의 범위 activate는 현재 셸의 와 환경 변수 등을 조정한다. 기존 서비스나 다른 터미널, 이미 떠 있는 Notebook 커널의 실행기를 자동 교체하지 않는다.
- base 표시 읽기프롬프트의 (base)는 기본 환경이 활성화됐다는 표시일 수 있다. 이 표시는 독립 운영체제나 보안 샌드박스 안에 있다는 뜻이 아니다.
- 현재 실행기 대조터미널과 편집기·Notebook에서 sys.executable을 비교하면 실제로 어느 이 코드를 실행하는지 알 수 있다. 패키지를 재설치하기 전에 이 경계를 확인한다.
- 재현 자료환경 이름만 남기기보다 ·패키지 버전과 ·플랫폼 조건을 기록한다. 정확한 빌드 조합을 보존하는 파일과 다른 OS로 옮길 요구 목록은 목적이 다르다.
conda env list
python -c "import sys; print(sys.executable)"
python -m pip --version조회용 교육 예시. 이 페이지를 작성하면서 실행하지 않았으며 와 해당 환경의 이 설치되어 있다고 가정한다.
07패키지 후보와 설치 가능한 조합은 다르다
- 설치 DB와 설치 DB는 현재 설치한 이름·버전·파일의 정보이며 는 이용 가능한 후보와 의존성을 제공한다. 목록 갱신만으로 설치 상태가 바뀌지는 않는다.
- 후보의 식별 계열의 는 이름·epoch·version·release·architecture를 구별한다. 같은 upstream 버전 문자열이라도 release와 가 다른 패키지일 수 있다.
- 해결기는 요청한 패키지뿐 아니라 요구·충돌·제공 관계를 만족하는 조합을 찾는다. 최신 후보가 보인다는 사실과 그 후보를 현재 조합에 설치할 수 있다는 사실은 별개다.
- 버전 선택 옵션의 --best는 직접 요청한 패키지의 최신 후보를 우선하여 해결하고 불가능하면 이유를 보고할 수 있다. 모든 의존 패키지를 무조건 가장 큰 버전으로 고른다는 뜻은 아니다.
- 다운로드와 설치--downloadonly는 필요한 패키지를 내려받되 를 실행하지 않는 기능이다. 파일 보유· 검증·실제 설치 DB 갱신·서비스 반영은 각각 다른 완료 기준이다.
08check-update의 100은 실패 코드가 아닐 수 있다
- 판정 전제여기서는 문서화된 동작을 예로 든다. 다른 프로그램이나 구현·명령의 종료값을 이 표에 그대로 대입하지 않는다.
- 종료값 0사용 가능한 업데이트가 없으면 0을 반환한다. 모든 보안 문제가 없다는 판정이 아니라 현재 설정된 와 검사 범위의 결과다.
- 종료값 100업데이트가 있으면 후보 목록과 함께 100을 반환한다. 자동화가 0 외의 모든 값을 실행 오류로 기록하면 정상적인 업데이트 발견을 장애로 잘못 분류한다.
- 종료값 1검사 중 오류는 1로 보고할 수 있다. 이 경우 업데이트 없음으로 저장하지 말고 stderr· 접근· 또는 메타데이터 오류를 분리해 기록한다.
- 설치 가능성 확인후보가 보고돼도 실제 는 의존성 등의 제약을 다시 적용한다. 발견 목록을 곧바로 설치 완료 목록으로 사용하는 집계는 틀린다.
| 가상 종료값 | 의미 | 자동화 분류 |
|---|---|---|
| 0 | 업데이트 없음 | 조회 성공 / 변화 없음 |
| 100 | 업데이트 후보 존재 | 조회 성공 / 후보 있음 |
| 1 | 조회 오류 | 결과 미확정 |
09업데이트 후 버전 불일치를 네 지점에서 해석하기
- 이름 해석먼저 type -a·command -v의 선택 결과로 별칭·가상환경· 앞쪽 수동 설치를 구별한다. 패키지 관리자가 갱신한 파일과 실제 실행 파일이 다를 수 있다.
- 패키지 소유권 -qf나 -S가 가리키는 소유 패키지와 파일 경로를 연결한다. 패키지 DB 밖에 있는 파일은 관리자가 새 버전을 설치해도 그대로 남을 수 있다.
- 실행 중 참조디스크 파일이 교체돼도 장기 실행 가 이전 실행 파일·라이브러리 매핑을 보유할 수 있다. 새 셸에서 --version을 한 번 실행한 결과로 기존 서비스를 대표하지 않는다.
- 설정 파일 반영패키지 업데이트의 설정 보존 정책에 따라 기존 수정본과 새 기본 설정이 따로 남을 수 있다. 실제 가 읽은 경로와 최종 적용값을 확인해야 한다.
- 보안 버전 해석은 수정 사항을 이전 upstream 버전에 backport할 수 있다. 버전 숫자만 비교하기보다 패키지 release·보안 공지와 적용 거래를 대조한다.
10변경 전후 확인
- 의존성업데이트에는 파일 교체뿐 아니라 설정 형식 변화, 의존성 변경, 서비스 재시작이 따를 수 있다.
- 변경 대상과 영향 범위변경 대상과 영향 범위를 확인하고 필요한 경우 이전 상태로 돌아갈 절차를 준비한다.
- 설치 성공 메시지는 서비스 정상 동작 검증을 대신하지 않는다.
cat /etc/os-release
uname -m
command -v python3
python3 --version··현재 선택된 실행 환경을 조회한다.
11패키지가 설치되기까지의 단계
- 패키지·패키지 관리자는 의 이름·버전·의존성 같은 메타데이터와 현재 설치 상태를 비교한다.
- 의존성설치나 업그레이드 요청에서는 필요한 의존성을 계산하고 거래 단위의 변경 목록을 만든다.
- 검증·설치 정보 갱신패키지 파일을 받아 출처·무결성 검증을 거친 뒤 파일과 패키지 데이터베이스를 갱신한다.
- 설치 후 처리패키지에 포함된 설치 후 처리도 실행될 수 있으므로 이는 파일 압축을 푸는 것보다 넓은 변경이다.
- 구체적인 순서와 보증은 도구와 패키지 형식에 따라 다르다.
- 목록을 갱신하는 단계는 설치 후보에 대한 정보를 새로 읽는 것이다.
- 설치된 프로그램의 실행 파일을 교체하는 단계와 구분해야 한다.
- 교체 후 남은 또한 디스크의 실행 파일이 교체돼도 이미 떠 있는 가 같은 코드나 라이브러리를 계속 사용하고 있을 수 있다.
- 업데이트 완료 이후 서비스 재시작 또는 시스템 재부팅 필요 여부를 안내와 도구의 진단으로 확인한다.
- 단순히 버전 출력 한 번으로 모든 실행 중 구성 요소의 상태를 설명할 수는 없다.
- 후보 조회현재 정보로 제공 버전을 확인한다.
- 의존성 계산요청 패키지뿐 아니라 함께 바뀔 항목을 검토한다.
- 검증 후 설치정책에 맞는 패키지를 설치 상태에 반영한다.
- 실행 반영 확인새 파일과 현재 실행 중인 프로그램이 같은 상태인지 확인한다.
설명과 함께 보는 보조 도식
설치 정보와 실행 중 상태
메타데이터 갱신, 패키지 설치, 실행 반영을 서로 다른 단계로 보여 준다.
후보 조회
현재 저장소 정보로 제공 버전을 확인한다.
- 설치 변경
- 아직 없음
전체 단계를 한 번에 읽기
- 01
후보 조회
현재 저장소 정보로 제공 버전을 확인한다.
- 설치 변경
- 아직 없음
- 02
의존성 계산
요청 패키지뿐 아니라 함께 바뀔 항목을 검토한다.
- 범위
- 의존 패키지 포함
- 03
검증 후 설치
정책에 맞는 패키지를 설치 상태에 반영한다.
- 관찰
- 설치 버전
- 04
실행 반영 확인
새 파일과 현재 실행 중인 프로그램이 같은 상태인지 확인한다.
- 추가 확인
- 서비스 재시작 필요 여부
12설치됐는데 명령 결과가 다른 이유
- 실행 파일 선택command -v 같은 조회로 현재 셸이 선택한 경로를 먼저 확인한다.
- 앞쪽의 가상환경이나 사용자 설치 경로가 패키지보다 먼저 선택될 수 있고, 같은 이름의 별칭·함수도 영향을 준다.
- 패키지패키지 관리자가 보고한 파일의 소유 패키지와 현재 실행 경로를 연결하면 설치 상태와 사용 상태를 구별할 수 있다.
- 실행 환경의 차이다른 셸·서비스·예약 작업은 환경 변수가 다르므로 터미널에서의 성공만으로 자동 실행 환경을 검증하지 않는다.
- ·패키지문제 재현에는 , , 패키지 출처, 버전, 가상환경과 실행 경로를 함께 기록한다.
- 의존성의존성 충돌에서는 특정 라이브러리만 임의 덮어쓰거나 시스템 을 교체하기보다 어떤 프로그램이 어떤 버전을 요구하는지 먼저 확인한다.
- 보안 수정은 이 기존 버전에 역이식할 수 있으므로 상위 프로젝트의 버전 숫자만으로 취약 여부를 단정하지 않는다.
- 변경 목록과 서비스 응답변경 목록과 서비스 응답을 비교해야 업데이트로 해결된 문제와 새로 생긴 문제를 분리할 수 있다.
| 구성·관찰 대상 | 확인하는 정보 | 구분할 문제 |
|---|---|---|
| 후보 | 제공 버전·출처 | 오래된 목록과 설치 실패 |
| 설치 데이터베이스 | 설치 버전·소유 파일 | 다른 경로의 수동 설치 |
| 현재 셸 | ·별칭·가상환경 | 예상과 다른 프로그램 선택 |
| 실행 | 사용 중 코드·라이브러리 | 설치 후 미반영 |
함께 보는 학습 자료
아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.
Anaconda Distribution과 Miniconda의 구성 비교
과 절에서 처음 설치되는 도구와 패키지를 비교한다. , 관리자, 의 관계를 나눈 뒤 프로젝트별 환경을 만드는 이유로 연결한다.
- 두 설치 묶음이 공통으로 제공하는 와
- Navigator와 미리 포함된 패키지의 차이
- 을 설치한 상태와 특정 프로젝트 환경을 선택한 상태의 구별
conda 활성화·내보내기로 실행 환경 추적
Activating an environment에서 · 스크립트의 역할을 읽고 Managing environments의 내보내기 예제로 이동한다. 활성 환경 표시와 실제 실행기·패키지·플랫폼을 함께 기록하는 학습 경로다.
- 가 현재 터미널 세션에 적용되는 범위
- 대화형 셸과 비대화형 스크립트의 초기화 차이
- 이식용 요구 목록과 특정 플랫폼의 정확한 패키지 명세의 차이
이해했는지 확인하기
- 배포판·아키텍처·패키지 버전을 따로 확인한다.
- 저장소 갱신과 패키지 업그레이드를 구분한다.
- 실행 파일과 라이브러리의 출처를 추적한다.


