/var/lib/portage/world
젠투에는 내가 명시적으로 설치한 패키지가 포함된 파일이 있습니다 . 내 말은, 내가 선택한 패키지에는 기본적으로 설치된 항목이나 종속성에 의해 가져온 패키지가 포함되어 있지 않다는 것입니다.
이 정보를 찾기 위해 Ubuntu에 유사한 파일이나 명령이 있습니까?
답변1
그냥 코드
aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
| cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt
설명하다
이 질문에 대해 생각하는 한 가지 방법은 이를 세 부분으로 나누는 것입니다.
- 종속성으로 설치되지 않은 패키지 목록을 얻는 방법은 무엇입니까?
- 기본적으로 설치된 패키지 목록을 얻는 방법은 무엇입니까?
- 이 두 목록의 차이점을 어떻게 알 수 있나요?
종속성으로 설치되지 않은 패키지 목록을 얻는 방법은 무엇입니까?
다음 명령이 내 시스템에서 작동하는 것 같습니다.
$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
Giles가 이 질문에 대한 의견으로 게시한 링크에서도 비슷한 접근 방식을 찾을 수 있습니다. 일부 소식통에서는 이것이 적성을 사용하여 패키지를 설치하는 경우에만 작동한다고 주장하지만 저는 적성을 사용하여 패키지를 설치하는 경우가 거의 없으며 이것이 여전히 작동한다는 것을 알았습니다. 이는 --disable-columns
적성이 패키지 이름 줄을 공백으로 채우는 것을 방지하여 아래 비교를 방해합니다. 파일을 정렬 | sort -u
하고 중복 항목을 제거합니다. 이렇게 하면 마지막 단계가 훨씬 쉬워집니다.
기본적으로 설치된 패키지 목록을 얻는 방법은 무엇입니까?
노트:이 섹션은 설명이 가능한 "잘못된 경로"로 시작됩니다. 두 번째 코드는 유효합니다.
이것은 약간 까다롭습니다. 처음에는 좋은 근사치가 ubuntu-minimal, ubuntu-standard, ubuntu-desktop 메타패키지와 다양한 Linux 커널 관련 패키지에 종속된 모든 패키지가 될 것이라고 생각했습니다. Google 검색의 일부 결과는 이 접근 방식을 사용하는 것으로 보입니다. 이러한 종속성 목록을 얻으려면 먼저 다음을 시도했지만 작동하지 않았습니다.
$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u
기본적으로 제공되어야 하는 일부 패키지가 누락된 것 같습니다. 나는 올바른 메타패키지 목록이 구성되면 이 접근 방식이 작동해야 한다고 여전히 믿습니다.
그러나 Ubuntu 이미지에는 기본 설치에 포함된 모든 패키지가 포함된 "매니페스트" 파일이 포함되어 있는 것으로 보입니다. Ubuntu 12.04.3의 매니페스트는 다음과 같습니다.
http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest
이 페이지(또는 가까운 미러 페이지)를 검색하는 경우:
http://mirror.pnl.gov/releases/precise/
사용 중인 버전 및 아키텍처에 해당하는 ".manifest" 파일을 찾을 수 있어야 합니다. 패키지 이름만 추출하려면 다음을 수행했습니다.
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt
목록이 이미 정렬되어 고유할 수 있지만 다음 단계를 더 쉽게 수행할 수 있도록 올바르게 정렬되었는지 확인하고 싶습니다. 그런 다음 출력을 defaultinstalled.txt
.
이 두 목록의 차이점을 어떻게 알 수 있나요?
대부분의 Unix 계열 시스템에는 이 작업을 위한 여러 도구가 있으므로 이는 쉬운 부분입니다. 이 comm
도구는 이를 수행하는 여러 방법 중 하나입니다.
comm -23 currentlyinstalled.txt defaultinstalled.txt
그러면 첫 번째 파일에 고유한 줄 목록이 인쇄됩니다. 따라서 기본 설치에는 없지만 설치된 패키지 목록을 인쇄해야 합니다.
답변2
이 두 개의 단일 라이너 중 하나를 사용할 수 있습니다. 둘 다 내 컴퓨터에서 정확히 동일한 출력을 생성하며 지금까지(2014년 7월) 이 질문에 제안된 모든 솔루션보다 더 정확합니다. 두 가지 답변의 조합입니다.(1)그리고(2). 내가 원래 이 답변을 게시했음을 참고하세요.여기.
사용 apt-mark
:
comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
사용 aptitude
:
comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
의심에도 불구하고 아직 누락된 패키지가 거의 없습니다.예언어 현지화 설정을 통해 설치 직후 또는 Totem 코덱 설치 프로그램을 통해 사용자가 물리적으로 설치합니다. 또한, 버전별 메타패키지만 설치해도 리눅스 헤더 버전이 누적되는 것 같습니다. 예:
libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29
어떻게 작동하나요?
- 수동으로 설치된 패키지 목록을 가져옵니다. 적성의 경우 추가하면
sed
줄 끝에 남은 공백이 모두 제거됩니다. - 새로 설치한 후 즉시 설치된 패키지 목록을 가져옵니다.
- 파일을 비교하여 파일 2에 존재하지 않는 파일 1의 줄만 출력합니다.
다른 가능성도 작동하지 않습니다.
- 파일 사용
ubuntu-14.04-desktop-amd64.manifest
(여기Ubuntu 14.04) 대신/var/log/installer/initial-status.gz
수동으로 설치되지 않은 경우에도 더 많은 패키지가 수동으로 설치된 것으로 나타납니다. apt-mark showauto
대신 사용하십시오/var/log/installer/initial-status.gz
.apt-mark
예를 들어 xserver-xorg 패키지는 포함되지 않지만 다른 파일은 포함됩니다.
둘 다 위의 솔루션보다 더 많은 패키지를 나열합니다.
답변3
에 따르면 man apt-mark
:
apt-mark showauto
apt-mark showmanual
답변4
이 쿼리를 검색했을 때 이 아름다운 oneliner를 발견했습니다.
첫 번째 라이너는
comm -13 \
<(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
<(comm -23 \
<(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
<(apt-mark showauto | sort) \
)`
이 oneliner는 다음 로그를 사용하여 시스템에 의해 설치된 패키지를 필터링합니다./var/log/installer/initial-status.gz
원본 스레드를 찾으면 링크를 게시하겠습니다. 왜냐하면 이 원라이너는 제 것이 아니고 어디서 본 것인지 기억이 나지 않는 것 같기 때문입니다.