Jak zobaczyć pakiety zainstalowane w danym dniu przy użyciu „aptitude”?

54

Czy ktoś wie, czy istnieje prosty sposób na znalezienie listy zainstalowanych pakietów, posortowanych według daty, podczas używania aptitude(lub apt-get)?

Zainstalowałem kilka pakietów, aby wypróbować coś nowego, ale to nie wyszło. Chciałbym usunąć wszystkie te pakiety, aby odzyskać trochę miejsca na dysku.

Próbowałem tylko spojrzeć na listę pobranych plików .deb, ale wydaje się, że jest to raczej odwrotny sposób (choć zadziałał).

Mikeage
źródło

Odpowiedzi:

43

Niestety, dpkg (program do obsługi pakietów działa na górze) nie zapisuje konkretnie daty instalacji pakietów, chociaż istnieją myśli o ich dodaniu. Jednak datę instalacji można znaleźć, patrząc na datownik plików zapisanych w katalogu /var/lib/dpkg/info.


źródło
4
Jeśli zastosujesz to podejście, pamiętaj tylko o znacznikach czasowych *.listplików, ponieważ inne pliki są stemplowane datą pakietu.
Dave
20

Skonfigurowałem aptitude do zapisu w log ( /var/log/aptitude). Wytwarza taki wynik;

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.

Pokazuje dokładną datę i zainstalowane pakiety aptitude. Aby to skonfigurować, postępuj zgodnie z opisem umiejętności;

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.

Link do odwołania do aptitude znajdziesz na stronie manuala aptitude.

jeremiah
źródło
1
Proszę zamieścić link i jak go wdrożyć. Samo odniesienie się do tekstu instrukcji nie jest zbyt pomocne.
not2qubit
17

Istnieje prosty sposób, aby zobaczyć datę instalacji wszystkich pakietów. Po prostu wykonaj:

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

W rezultacie otrzymasz listę wszystkich zainstalowanych pakietów z dokładną datą i godziną.

Dzięki za komentarze, które doprowadziły mnie do tego rozwiązania.

jmarceli
źródło
2
cdPolecenie nie jest konieczne w przypadku korzystania z pełną ścieżkę w catkomendzie ...
papukaija
1
Celem cdpolecenia było lssprawdzenie w tym katalogu dostępnych plików dpkg.log. Ale będzie działać lepsze rozwiązanie ls /var/log | grep 'dpkg.log', aby wyświetlić listę plików dziennika. Przepraszam za bałagan.
jmarceli
2
lub po prostu „grep install /var/log/dpkg.log*”?
Marc Van Daele,
1
Nie wiedziałem cat | cat, że możesz to zrobić. Ale dlaczego nie połączyć obu plików w jednym poleceniu? (Lub jeszcze lepiej: po prostu rób to, co mówi @MarcVanDaele.)
mwfearnley,
13

Znalazłem ten tutaj w Internecie. Tworzy historię dpkg z pliku dziennika dpkg.

Wygląda to bardzo prosto.

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
}

Źródło

EDYTOWAĆ

Wypróbowałem ten skrypt na serwerze Ubuntu 8.10 i działa bardzo dobrze. Czy możesz podać informacje, w jaki sposób rozwiązałeś problem?

guerda
źródło
5
  • Użyj dzienników dpkg

    locate dpkg.log | xargs cat {} | grep " install "
    
  • LUB jeśli nie masz locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Służy sortdo zapewnienia prawidłowego zamawiania na podstawie czasu

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Użyj tac(wstecz cat) *, head np., Aby uzyskać najnowsze 4 wpisy

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

np. za ostatnie polecenie otrzymuję:

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
a20
źródło
1
Dlaczego miałbyś używać tac+ headzamiast tail?
Zanna
1
Minęło trochę czasu, zapomniałem, dlaczego - ale jest możliwe, że jest to całkiem dobry powód .. a może miałem moment blond: D
a20
4

Możesz także wyśledzić poprzednie działania, sprawdzając /var/log/apt/term.log i starsze pliki term.log.1.gz itp.). Ma znaczniki czasu i pełny dziennik z komunikatów podczas instalacji.


źródło
2

[ODPOWIEDŹ NA RZECZYWISTE PYTANIE], Tak, istnieje ŁATWY sposób na wyszukiwanie pakietów zainstalowanych w określonym dniu, nawet jeśli zostało to zrobione wewnątrz terminala przy użyciu apt-get.

Jeśli zainstalujesz Menedżera pakietów Synaptic, który można bezpłatnie zainstalować z Centrum oprogramowania Ubuntu, wystarczy otworzyć menu PLIK i wybrać opcję „Historia”. Znajdziesz tam rozliczenie wszystkich dodanych i usuniętych pakietów aplikacji, uporządkowane według daty, niezależnie od tego, w jaki sposób zostały zainstalowane lub usunięte.

wiatrakowiec
źródło
2

Istnieje rzeczywiście „oficjalny” pkginstall.shskrypt, który może to zrobić. Postępuj zgodnie z instrukcjami w oficjalnej dokumentacji . W skrócie, pobierz skrypt z powyższego linku, upewnij się, że jest wykonywalny, a następnie uruchom z:

~/pkginstalls.sh

Spowoduje to utworzenie pkginstalls.txtpliku w twoim katalogu domowym, zawierającego wszystkie zainstalowane pakiety posortowane według daty.

BTW, to jest treść skryptu:

#!/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
Ron
źródło