¿Cómo ver los paquetes instalados en una fecha determinada usando 'aptitude'?

54

¿Alguien sabe si hay una manera fácil de encontrar una lista de paquetes instalados, ordenados por fecha, al usar aptitude(o apt-get)?

Instalé un montón de paquetes para probar algo nuevo, pero no funcionó. Me gustaría eliminar todos estos paquetes, para recuperar algo de espacio en disco.

He intentado simplemente mirar la lista de archivos .deb descargados, pero parece una forma bastante retrógrada de hacerlo (aunque funcionó).

Mikeage
fuente

Respuestas:

43

Desafortunadamente, dpkg (la aptitud del controlador de paquetes funciona además de) no guarda específicamente la fecha de instalación de los paquetes, aunque hay pensamientos de agregarlo. Sin embargo, la fecha de instalación se puede encontrar mirando el sello de fecha de los archivos escritos en el directorio /var/lib/dpkg/info.


fuente
44
Si utiliza este enfoque, asegúrese de verificar solo las marcas de tiempo en los *.listarchivos ya que los otros archivos están marcados con la fecha del paquete.
Dave
20

He configurado la aptitud para escribir en un log ( /var/log/aptitude). Produce resultados como este;

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.

Esto muestra la fecha exacta y los paquetes que aptitude instaló. Para configurar esto, siga la referencia de aptitud;

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.

Encontrará un enlace a la referencia de aptitude en la página del manual de aptitude.

jeremiah
fuente
1
Por favor, publique el enlace y cómo implementarlo. Simplemente hacer referencia a algún texto manual no es muy útil.
not2qubit
17

Hay una manera simple de ver la fecha de instalación de todos los paquetes. Solo ejecuta:

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

Como resultado, obtendrá una lista de todos los paquetes instalados con fecha y hora exactas.

Gracias por los comentarios que me llevaron a esa solución.

jmarceli
fuente
2
El cdcomando no es necesario si usa la ruta completa en el catcomando ...
papukaija
1
El propósito del cdcomando era lsdentro de este directorio para verificar los archivos dpkg.log disponibles. Pero se ejecutará una mejor solución ls /var/log | grep 'dpkg.log'para enumerar los archivos de registro. Perdón por el desastre.
jmarceli
2
o simplemente "grep install /var/log/dpkg.log*"?
Marc Van Daele
1
Huh, no sabía que cat | catera algo que pudieras hacer. Pero, ¿por qué no cat los dos archivos en un solo comando? (O incluso mejor: solo haz lo que @MarcVanDaele dice).
mwfearnley
13

Encontré este aquí en la web. Crea un historial de dpkg a partir del archivo de registro dpkg.

Se ve muy simple.

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
}

Fuente

EDITAR

Probé este script en Ubuntu 8.10 Server y funciona muy bien. ¿Podría proporcionar alguna información sobre cómo resolvió su problema?

guerda
fuente
5
  • Usa los registros de dpkg

    locate dpkg.log | xargs cat {} | grep " install "
    
  • O si no tienes locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Úselo sortpara garantizar un pedido basado en el tiempo

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Use tac(reverse cat) *, head eg para obtener las últimas 4 entradas

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

Por ejemplo, para el último comando, obtengo:

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
fuente
1
¿Por qué usarías tac+ en headlugar de tail?
Zanna
1
Ha pasado un tiempo, he olvidado por qué, pero es posible que haya una razón completamente buena para ello ... o tal vez tuve un momento rubio: D
a20
4

También puede rastrear sus acciones anteriores marcando /var/log/apt/term.log y los archivos anteriores term.log.1.gz, etc.). Tiene marcas de tiempo y registro completo de mensajes durante la instalación.


fuente
2

[RESPONDIENDO A LA PREGUNTA REAL], Sí, hay una manera FÁCIL de buscar paquetes instalados en una fecha en particular, incluso si se realizó dentro del terminal usando apt-get.

Si instala el Synaptic Package Manager, que se puede instalar libremente desde el Centro de software de Ubuntu, solo necesita abrir su menú ARCHIVO y elegir la opción "Historial". Allí encontrará una contabilidad de todos los paquetes de aplicaciones agregados y eliminados, organizados por fecha, independientemente de cómo se instalaron o eliminaron.

gyropyge
fuente
2

De hecho, hay un pkginstall.shscript 'oficial' que puede hacer esto. Siga las instrucciones en la documentación oficial . Brevemente, descargue el script desde el enlace anterior, asegúrese de que sea ejecutable y luego ejecute con:

~/pkginstalls.sh

Esto creará un pkginstalls.txtarchivo en su directorio de inicio que contiene todos los paquetes instalados ordenados por fecha.

Por cierto, este es el contenido del 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
Ron
fuente