debian – Enumere los paquetes en un sistema basado en apt por fecha de instalación

Pregunta:

¿Cómo puedo enumerar los paquetes instalados por fecha de instalación?

Necesito hacer esto en debian / ubuntu. Las respuestas para otras distribuciones también serían buenas.

Instalé muchas cosas para compilar cierto código y quiero obtener una lista de los paquetes que tuve que instalar.

Respuesta:

Las distribuciones basadas en RPM como Red Hat son fáciles:

rpm -qa --last

En Debian y otras distribuciones basadas en dpkg, su problema específico también es fácil:

grep install /var/log/dpkg.log

A menos que se haya rotado el archivo de registro, en cuyo caso debería intentar:

grep install /var/log/dpkg.log /var/log/dpkg.log.1

En general, dpkg y apt no parecen rastrear la fecha de instalación, debido a la falta de dicho campo en la página de manual de dpkg-query .

Y, finalmente, los archivos /var/log/dpkg.log.* antiguos se eliminarán mediante la rotación de registros, por lo que no se garantiza que de esa manera se proporcione el historial completo de su sistema.

Una sugerencia que aparece algunas veces (por ejemplo, este hilo ) es mirar el directorio /var/lib/dpkg/info . Los archivos allí sugieren que puede intentar algo como:

ls -t /var/lib/dpkg/info/*.list | sed -e 's/\.list$//' | head -n 50

Para responder a su pregunta sobre las selecciones, aquí tiene un primer paso.

crear lista de paquetes por fechas

$ find /var/lib/dpkg/info -name "*.list" -exec stat -c $'%n\t%y' {} \; | \
    sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list\t,\t,' | \
    sort > ~/dpkglist.dates

crear lista de paquetes instalados

$ dpkg --get-selections | sed -ne '/\tinstall$/{s/[[:space:]].*//;p}' | \
    sort > ~/dpkglist.selections

únete a las 2 listas

$ join -1 1 -2 1 -t $'\t' ~/dpkglist.selections ~/dpkglist.dates \
    > ~/dpkglist.selectiondates

Por alguna razón, no me imprime muchas diferencias, por lo que puede haber un error o una suposición no válida sobre lo que significa --get-selections .

Obviamente, puede limitar los paquetes utilizando find . -mtime -<days> o head -n <lines> , y cambie el formato de salida como desee, p. ej.

$ find /var/lib/dpkg/info -name "*.list" -mtime -4 | \
    sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list$,,' | \
    sort > ~/dpkglist.recent

$ join -1 1 -2 1 -t $'\t' ~/dpkglist.selections ~/dpkglist.recent \
    > ~/dpkglist.recentselections

para enumerar solo las selecciones que se instalaron (¿cambiaron?) en los últimos 4 días.

Probablemente también podría eliminar los comandos de sort después de verificar el orden de clasificación utilizado por dpkg --get-selections y hacer que el comando de find más eficiente.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım