Come vedere i pacchetti installati in una determinata data usando 'aptitude'?


54

Qualcuno sa se c'è un modo semplice per trovare un elenco di pacchetti installati, ordinati per data, quando si utilizza aptitude(o apt-get)?

Ho installato un sacco di pacchetti per provare qualcosa di nuovo, ma non ha funzionato. Vorrei rimuovere tutti questi pacchetti, per recuperare un po 'di spazio su disco.

Ho provato solo a guardare l'elenco dei file .deb scaricati, ma sembra un modo piuttosto arretrato di farlo (anche se ha funzionato).

Risposte:


43

Sfortunatamente, dpkg (il gestore dei pacchetti aptitude funziona sopra) non salva specificamente la data di installazione dei pacchetti, anche se si pensa di aggiungerlo. Tuttavia, la data di installazione può essere trovata osservando l'indicatore della data dei file scritti nella directory /var/lib/dpkg/info.


4
Se si utilizza questo approccio, assicurarsi di controllare solo i timestamp sui *.listfile poiché gli altri file sono contrassegnati con la data del pacchetto.
Dave,

20

Ho configurato aptitude per scrivere su un log ( /var/log/aptitude). Produce output in questo modo;

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.

Questo mostra la data esatta e i pacchetti installati da aptitude. Per configurarlo, segui il riferimento aptitude;

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.

Troverai un link al riferimento aptitude nella pagina man di aptitude.


1
Pubblica il link e come implementarlo. Il solo riferimento ad alcuni testi manuali non è molto utile.
not2qubit,

17

C'è un modo semplice per vedere la data di installazione di tutti i pacchetti. Esegui solo:

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

Di conseguenza otterrai un elenco di tutti i pacchetti installati con data e ora esatte.

Grazie per i commenti che mi hanno portato a quella soluzione.


2
Il cdcomando non è necessario se si utilizza l'intero percorso nel catcomando ...
papukaija

1
Lo scopo del cdcomando era lsall'interno di questa directory per verificare i file dpkg.log disponibili. Ma sarà in esecuzione una soluzione migliore ls /var/log | grep 'dpkg.log'per elencare i file di registro. Dispiace per la confusione.
jmarceli,

2
o semplicemente "grep install /var/log/dpkg.log*"?
Marc Van Daele,

1
Eh, non sapevo cat | catfosse una cosa che potevi fare. Ma perché non cat entrambi i file in un solo comando? (O ancora meglio: fai quello che dice @MarcVanDaele.)
mwfearnley,

13

Ho trovato questo qui sul web. Crea una cronologia di dpkg dal file di registro di dpkg.

Sembra molto semplice.

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
}

fonte

MODIFICARE

Ho provato questo script su Ubuntu 8.10 Server e funziona molto bene. Potresti fornire alcune informazioni su come hai risolto il tuo problema?


5
  • Utilizzare i registri di dpkg

    locate dpkg.log | xargs cat {} | grep " install "
    
  • O se non lo hai locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Utilizzare sortper garantire un corretto ordine basato sul tempo

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Usa tac(reverse cat) *, head es. Per ottenere le ultime 4 voci

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

ad es. per l'ultimo comando, ottengo:

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
Perché dovresti usare tac+ headinvece di tail?
Zanna,

1
È passato un po 'di tempo, ho dimenticato il perché - ma è possibile che ci sia una ragione del tutto valida per farlo .. o forse ho avuto un momento biondo: D
a20

4

Puoi anche rintracciare le tue azioni precedenti controllando /var/log/apt/term.log e file più vecchi term.log.1.gz ecc.). Ha i timestamp e il registro completo dei messaggi durante l'installazione.


2

[RISPONDERE ALLA DOMANDA ATTUALE], Sì, esiste un modo FACILE per cercare i pacchetti installati in una data particolare, anche se è stato fatto all'interno del terminale usando apt-get.

Se installi Synaptic Package Manager, che è liberamente installabile da Ubuntu Software Center, devi solo aprire il menu FILE e scegliere l'opzione "Cronologia". Qui troverai una contabilità di tutti i pacchetti di applicazioni aggiunti e rimossi, organizzati per data, indipendentemente da come sono stati installati o rimossi.


2

Esiste davvero una pkginstall.shsceneggiatura "ufficiale" che può farlo. Seguire le istruzioni nella documentazione ufficiale . In breve, scarica lo script dal link sopra, assicurati che sia eseguibile e quindi esegui con:

~/pkginstalls.sh

Questo creerà il pkginstalls.txtfile nella tua home directory contenente tutti i pacchetti installati ordinati per data.

A proposito, questo è il contenuto dello script:

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.