모든 사용자 설치 패키지 찾기


38

Ubuntu 시스템에서 모든 사용자 설치 패키지, 즉 기본 설치된 패키지 위에 설치된 패키지 목록을 가져 오는 방법이 있습니까?

(이 아이디어는 깨끗한 우분투 설치에 동일한 패키지를 설치하는 데 사용할 수있는 포괄적 인 목록을 얻는 것입니다)

답변:


15

이 파일들을 봐

  1. ' /var/log/installer/initial-status.gz'-기본 설치
    • 이 파일 날짜는 설치 날짜가 될 것입니다.
    • ' /var/log/dpkg.log'업데이트 타임 라인 (원하는 것)
    • ' /var/log/apt/term.log'- apt시스템에서 업데이트 된 것들
    • ' 설치를 위해 다운로드 /var/cache/apt/archives/'deb패키지 를 포함 합니다

업데이트 : 정확한 새 설치 목록을 보려면 다음 두 단계를 사용하십시오.

  1. 실행 : grep -w install /var/log/dpkg.log > full-list.log
  2. /var/log/installer/initial-status.gz타임 스탬프 너머의 라인을보십시오

이러한 패키지를 사용하여 다른 시스템에 새로 설치하려면 '캐시 / apt / 아카이브'경로에서 'deb'파일을 새 설치 경로로 복사하여 다운로드없이 한 번에 설치할 수 있습니다. 다시)).


팁 고마워. 이 목록을 얻기 위해 단일 명령을 더 찾고 있었지만 유용합니다. 고양이 /var/log/dpkg.log | grep 'install'은 설치 날짜 / 시간까지 설치된 항목을 무시하면 가까이 온 것 같습니다
Rabarberski

다운 투표 이유를 추가하면 답변에 문제가있는 경우이를 이해하는 데 도움이됩니다. 또한 미래에 더 나은 답변으로 이어질 것입니다.
nik

공감대가 실수로 내 꺼야 나는 이미 당신의 대답을 상향 조정했습니다. 귀하의 답변을 '최종'으로 표시하려고 할 때 클릭이 잘못되어 아래쪽 화살표를 누르십시오. 실행 취소를 시도하면 "이 답변을 편집하지 않으면 투표하기에 너무 오래된 투표입니다." downvote와 혼란 모두에 대해 죄송합니다. :-(
Rabarberski

@Rabarberski, 그런 일이 ... 해를 끼치 지 않습니다.
nik

서버 설치와 같이 / var / log / installer가 없으면 작동하지 않습니다. 또한 "우분투"에 대해 이야기하는 경우 버전 번호를 추가하는 것이 좋습니다. 어떤 우분투?

8

grins을 위해, 처음 설치된 패키지와 자동으로 설치된 패키지를 제외하고 수동으로 설치된 패키지를 알아내는 하나의 라이너 (여기에서는 명확성을 위해 분할)를 정리했습니다 .

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) \
  )

이것은 안으로 bash그리고 안으로 작동합니다 zsh.


초기 설치 중에 설치된 많은 라이브러리를 인쇄하는 것을 제외하고는 거의 완벽하게 작동합니다. 잔뜩있다 libtiff, libxcb나는 나 자신을 설치하지 않은, 등. 이 답변 : superuser.com/a/105000/24349 는 설치 시간에 따라 정렬하고 시스템 설치 시간 전에 모든 것을 제거하여이를 처리합니다. 쉘의 대단한 사용!
haxney

3

위의 정보를 바탕으로 수동으로 설치된 패키지를 나열하는 간단한 Python 스크립트를 작성했습니다. 이 링크를 참조하십시오 .

책임을지지 않더라도 자유롭게 사용하십시오. 그러나 피드백과 제안은 언제나 환영합니다.


훌륭한! 실행하는 데 시간이 걸리지 만, 내가 찾은 유일한 솔루션으로 내가 필요한 것을 정확하게 수행합니다!
haxney

2
불행히도 링크가 끊어졌습니다 (파이썬 트레이스 백 표시). 여기에 답을 넣는 가치를 보여줍니다 (특히 "짧은 파이썬 스크립트")
David Ljung Madison Stellar

github.com/gerjantd/bin/blob/master / ... 스크립트를 사용하여 github 저장소를 찾았습니다 . 'raw'를 클릭하여 다운로드하고 'python list_manually_installed_packages.py'를 실행하십시오
David Ljung Madison Stellar

2
github 링크도 끊어졌습니다.
Suzana

2

관련 질문에 대한 답변을 여기 에서 확인하십시오 . 데비안 시스템에 설치된 모든 패키지 목록을 표시하려면 어떻게해야합니까? . 질문에 대한 다른 답변 중 일부에는 그러한 목록을 얻는 것에 대한 좋은 제안이 포함되어 있습니다.

이전 질문도이 질문을 다루므로이 질문은 중복으로 표시되어야하지만 쉽게 찾을 수 있도록이 질문을 독자적으로 세우는 것이 유용 할 수 있습니다.


1

일관된 기록이 있고 적성을 사용한다고 가정합니다.

history | grep -e "^..... aptitude install"

aptitude install ... duh로 설치 한 패키지 만 나열합니다.


1

이것은 해킹 작업이지만 완전히 작동합니다.

먼저 http://releases.ubuntu.com/maverick/ (또는 사용중인 Ubuntu 버전)으로 이동 하여 사용중인 Ubuntu 버전 *.manifest file과 관련된 버전을 가져옵니다 .

그런 다음 <manifest file>다운로드 한 파일의 경로와 함께 다음 스크립트 (바꾸기 , 꺾쇠 괄호 및 모두)를 실행하십시오. 파일 > output끝에 항상 추가 하여 파일 덤프를 만들 수 있습니다 .

diff --suppress-common-lines <(sed 's/ .*//' <manifest file>) <(dpkg --get-selections | sed 's/[ \t].*//') | grep '>' | sed 's/[>] //'

1

감사합니다 괴짜, 좋은 코드. 나는 그것을 사용했지만 어떻게 작동시키는 지 알아내는 데 시간이 걸렸다. Ubuntu 11.10에서이 작업을 수행 한 방법은 다음과 같습니다. bash 터미널에서 작동합니다.

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) \
  ) > user-installed-packages

그런 다음 탭 - 추가 \t- 그리고를 install각 줄에 :

sed 's/$/\tinstall/' user-installed-packages >uip

그런 다음 새 컴퓨터에서 :

sudo dpkg --set-selections < uip

패키지를 설치하려면 다음을 수행하십시오.

sudo apt-get dselect-upgrade

0

이를 수행하는 또 다른 방법은 초기 작업에 따라 설치할 기본 패키지를 결정하는 "작업"을 기반으로 설치된 항목을 확인하는 것입니다.

tasksel --list-tasks

최소한 당신은 가질 것 server입니다. 그러나 더 많은 것을 선택할 수 있습니다. 설치 한 각 작업에 대해 다음 명령이 설치되어있는 패키지 목록을 얻을 수 있습니다. 설치에서 선택한 작업에 대해 한 줄로 (명확하게하기 위해) 한 줄로 수행합니다.

(tasksel --task-packages server ; \
 tasksel --task-packages openssh-server ; \
 tasksel --task-packages lamp-server) | sort | uniq

위의 일반적인 접근 방식은 다음과 같습니다.

(for a in $( tasksel --list-tasks | grep "^i" | awk '{ print $2 }' ) ; \
 do tasksel --task-packages $a; done) | sort | uniq

이제 apt-cache depends --installed -i --recurse <packagename> | grep -v "^ "작업에 정의 된 모든 패키지가 사용하는 종속성 목록을 얻는 데 사용하십시오. 이것은 다음과 같이 한 줄로 수행 할 수 있습니다

apt-cache depends --installed -i --recurse \
     $(for a in $( tasksel --list-tasks | \
                   grep "^i" | \
                   awk '{ print $2 }' ) ; \
       do tasksel --task-packages $a; done) | grep -v "^ " | sort | uniq

다음은 시스템에 설치된 모든 패키지 (종속성을 포함하지 않음)를 나열합니다.

dpkg --get-selections | grep "[[:space:]]install" | awk '{print $1}'

이제 comm명령을 사용하여 두 번째 목록에만있는 것을 찾으십시오 (즉, 두 파일과 첫 번째 파일에있는 것을 무시하십시오)

comm -13 <(apt-cache depends --installed -i --recurse \
              $(for a in $( tasksel --list-tasks | \
                            grep "^i" | \
                            awk '{ print $2 }' ) ; \
                do tasksel --task-packages $a; done) | grep -v "^ " | sort ) \
         <( dpkg --get-selections | grep "[[:space:]]install" | \
            awk '{print $1}' | sort)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.