¿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 estarían bien.
Instalé muchas cosas para compilar una determinada pieza de código y quiero obtener una lista de los paquetes que tuve que instalar.
Respuesta aceptada:
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 sencillo:
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 dpkg-query
página man.
Y eventualmente el viejo /var/log/dpkg.log.*
los archivos se eliminarán mediante la rotación de registros, por lo que no se garantiza que esa forma le brinde el historial completo de su sistema.
Una sugerencia que aparece varias veces (por ejemplo, este hilo) es mirar el /var/lib/dpkg/info
directorio.
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.
construir lista de paquetes por fechas
$ find /var/lib/dpkg/info -name "*.list" -exec stat -c $'%nt%y' {} ; |
sed -e 's,/var/lib/dpkg/info/,,' -e 's,.listt,t,' |
sort > ~/dpkglist.dates
lista de compilación 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 muestra muchas diferencias para mí, por lo que podría haber un error o una suposición no válida sobre qué --get-selections
significa.
Obviamente, puede limitar los paquetes usando find . -mtime -<days>
o head -n <lines>
y cambie el formato de salida como desee, por ejemplo,
$ 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 el sort
comandos después de verificar el orden de clasificación utilizado por dpkg --get-selections
y hacer el find
comando más eficiente.