'적분'을 사용하여 주어진 날짜에 설치된 패키지를 보는 방법은 무엇입니까?


54

aptitude(또는 apt-get)를 사용할 때 날짜별로 정렬되어 설치된 패키지 목록을 쉽게 찾을 수있는 방법이 있는지 아는 사람이 있습니까?

새로운 것을 시도하기 위해 많은 패키지를 설치했지만 제대로 작동하지 않았습니다. 디스크 공간을 확보하기 위해 이러한 패키지를 모두 제거하고 싶습니다.

다운로드 한 .deb 파일 목록을 보려고 시도했지만 다소 역행적인 것처럼 보입니다 (작동하지만).

답변:


43

불행하게도, dpkg (패키지 처리기 적성이 작동하는)는 패키지를 추가 할 생각은 있지만 패키지 설치 날짜를 구체적으로 저장하지는 않습니다. 그러나 설치 날짜는 디렉토리에 기록 된 파일의 날짜 스탬프를 확인하여 찾을 수 있습니다 /var/lib/dpkg/info.


4
이 방법을 사용하는 경우 *.list다른 파일에는 패키지 날짜가 표시 되므로 파일 의 타임 스탬프 만 확인하십시오 .
Dave

20

로그에 쓰도록 적성을 구성했습니다 ( /var/log/aptitude). 다음과 같은 출력을 생성합니다.

Aptitude 0.4.11.11: log report
Mon, Feb  9 2009 13:21:28 +0100

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================

Log complete.

이것은 적성이 설치된 정확한 날짜와 패키지를 보여줍니다. 이를 구성하려면 적성 기준을 따르십시오.

Option:Aptitude::Log

Default:/var/log/aptitude

Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.

적성 매뉴얼 페이지에서 적성 기준에 대한 링크를 찾을 수 있습니다.


1
링크와 그 구현 방법을 게시하십시오. 일부 수동 텍스트를 참조하는 것만으로는 도움이되지 않습니다.
not2qubit

17

모든 패키지 설치 날짜를 확인 하는 간단한 방법이 있습니다. 그냥 실행하십시오 :

grep " install" /var/log/dpkg.log*

결과적으로 정확한 날짜와 시간을 가진 설치된 모든 패키지 목록이 표시됩니다.

해당 솔루션으로 안내하는 의견에 감사드립니다.


2
cd당신의 전체 경로를 사용하는 경우 명령은 필요하지 않습니다 cat명령을 ...
papukaija

1
cd명령 의 목적은 ls사용 가능한 dpkg.log 파일을 확인하기 위해이 디렉토리 내부에있었습니다. 그러나 ls /var/log | grep 'dpkg.log'로그 파일을 나열하기 위해 더 나은 솔루션이 실행 됩니다. 엉망으로 죄송합니다.
jmarceli

2
또는 "grep install /var/log/dpkg.log*"?
Marc Van Daele

1
허, 네가 cat | cat할 수있는 일인 줄 몰랐어 그러나 하나의 명령으로 두 파일을 모두 정리하지 않는 이유는 무엇입니까? (또는 더 나은 :. 단지 @MarcVanDaele의 말씀 할)
mwfearnley

13

나는 이것을 웹에서 발견했다. dpkg 로그 파일에서 dpkg의 히스토리를 작성합니다.

매우 간단 해 보입니다.

function apt-history(){
      case "$1" in
        install)
              cat /var/log/dpkg.log | grep 'install '
              ;;
        upgrade|remove)
              cat /var/log/dpkg.log | grep $1
              ;;
        rollback)
              cat /var/log/dpkg.log | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              ;;
        *)
              cat /var/log/dpkg.log
              ;;
      esac
}

출처

편집하다

우분투 8.10 서버 에서이 스크립트를 사용해 보았고 잘 작동합니다. 문제 해결 방법에 대한 정보를 제공해 주시겠습니까?


5
  • dpkg 로그 사용

    locate dpkg.log | xargs cat {} | grep " install "
    
  • 또는 당신이없는 경우 locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • sort적절한 시간 기반 주문을 보장하기 위해 사용

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • 사용 tac(역 cat*), 헤드 등 최신 4 개 항목을 얻을 수 있습니다

    locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
    

예를 들어 마지막 명령의 경우 다음을 얻습니다.

2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1

1
왜 대신 tac+ 를 사용 하시겠습니까? headtail
잔나

1
그것은 오랜만이야 그 이유를 잊어 버린 - 그러나 그것을 위해 완전히 좋은 이유가 가능합니다 .. 아니면 내가 금발의 순간이 있었다 : D
A20

4

/var/log/apt/term.log 및 이전 파일 인 term.log.1.gz 등을 확인하여 이전 작업을 추적 할 수도 있습니다. 설치 중에 메시지에 타임 스탬프 및 완전한 로그가 있습니다.


2

[실제 질문 답변], 예. apt-get을 사용하여 터미널 내부에서 완료된 경우에도 특정 날짜에 설치된 패키지를 쉽게 찾을 수있는 방법이 있습니다.

Ubuntu Software Center에서 무료로 설치할 수있는 Synaptic Package Manager를 설치하는 경우 FILE 메뉴를 열고 "History"옵션 만 선택하면됩니다. 여기에는 설치 또는 제거 방법에 관계없이 모든 추가 및 제거 된 응용 프로그램 패키지가 날짜별로 구성되어 있습니다.


2

실제로이를 pkginstall.sh수행 할 수 있는 '공식' 스크립트가 있습니다. 공식 문서 의 지침을 따르십시오 . 간단히, 위 링크에서 스크립트를 다운로드하여 실행 가능한지 확인한 후 다음을 실행하십시오.

~/pkginstalls.sh

이렇게하면 pkginstalls.txt설치된 모든 패키지가 날짜별로 정렬 된 파일 이 홈 디렉토리에 생성 됩니다.

BTW, 이것은 스크립트의 내용입니다 :

#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date

#first append all info from archived logs

i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))

while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append all info from unarchived logs

i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append current log

cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt

#sort text file by date

sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt

rm $HOME/pkgtmp.txt

exit 0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.