¿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 un cierto código, y quiero obtener una lista de los paquetes que tuve que instalar.
debian
package-management
apt
Elazar Leibovich
fuente
fuente
Respuestas:
Las distribuciones basadas en RPM como Red Hat son fáciles:
En Debian y otras distribuciones basadas en dpkg, su problema específico también es fácil:
A menos que se haya girado el archivo de registro, en cuyo caso debe intentar:
En general,
dpkg
yapt
no parece rastrear la fecha de instalación, debido a la falta de dicho campo en ladpkg-query
página del manual.Y, finalmente, los
/var/log/dpkg.log.*
archivos antiguos se eliminarán mediante la rotación de registros, por lo que no se garantiza que le proporcione 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 podrías probar algo como:Para responder a su pregunta sobre las selecciones, aquí hay un primer paso.
construir una lista de paquetes por fechas
lista de compilación de paquetes instalados
únete a las 2 listas
Por alguna razón, no está imprimiendo muchas diferencias para mí, por lo que puede haber un error o una suposición no válida sobre lo que
--get-selections
significa.Obviamente, puede limitar los paquetes usando
find . -mtime -<days>
ohead -n <lines>
, y cambiar el formato de salida como desee, p. Ej.para enumerar solo las selecciones que se instalaron (¿cambiaron?) en los últimos 4 días.
Probablemente también podría eliminar los
sort
comandos después de verificar el orden de clasificación utilizado pordpkg --get-selections
y hacer que elfind
comando sea más eficiente.fuente
apt-get
más que esorpm
, pero ahora debian obtiene -1 por no guardar la fecha de instalación en la base de datos. El truco de Debian incluye todos los paquetes instalados, no solo los paquetes seleccionados , sino que es un buen comienzo.half-installed
entradas) si lo haces:grep install\ /var/log/dpkg.log
grep " install " /var/log/dpkg.log
enumera solo las líneas de "instalación" en lugar de mostrar también las de "estado".Mikel ha mostrado cómo hacer esto en el nivel dpkg . En particular,
/var/lib/dpkg/info/$packagename.list
se crea cuando se instala el paquete (y no se modifica después).Si usó las herramientas APT (que presumiblemente lo hizo porque le preocupan los paquetes instalados automáticamente o manualmente), hay un historial
/var/log/apt/history.log
. Mientras no se haya girado, realiza un seguimiento de todas las instalaciones, actualizaciones y eliminaciones de APT, con una anotación para los paquetes marcados como instalados automáticamente. Esta es una característica bastante reciente, introducida en APT 0.7.26, por lo que en Debian apareció en compresión. En Ubuntu, 10.04 tienehistory.log
pero la anotación instalada automáticamente no está presente hasta 10.10.fuente
Áspero, pero funciona:
fuente
ls
. Consulte mywiki.wooledge.org/ParsingLs para obtener notas sobre por qué esto es peligroso / intrínsecamente defectuoso: la opción más segura es usarfind -printf
ostat --format
generar una secuencia que pueda analizarse sin ambigüedades.ls -al --time-style=long-iso
debería ser útil. Además, probablemente no se haya escuchado que alguien nombre un paquete APT\n\t\r\v
en su nombre.El
/var/log/apt/history.log
archivo tiene un formato incómodo en mi humilde opinión.Hubiera preferido un registro con más formato de archivo de registro
o algún XML que muestre no solo un {paquete} sino cualquier {dependencias}.
Tal como está implementado actualmente, puede descubrir la información que busca, pero requiere un procesamiento forense para extraer los detalles.
fuente
Esto funciona para mí en un sistema Debian, supongo que el formato del archivo ha cambiado desde 2011. Este sistema es bastante nuevo, por lo que no esperaría que funcione en un sistema anterior, aunque eso podría requerir descomprimir los registros y usar un globo para referirse a todos ellos.
Los primeros dos campos en cada línea del archivo
/var/log/dpkg.log
son la fecha y la hora. Tenga en cuenta el espacio final con la instalación en la parte grep, esto se debe a que las actualizaciones pueden desencadenar instalaciones, pero si entendí correctamente, querría saber qué instalaron los usuarios.fuente
Aquí está la frase que todos quieren y necesitan:
El resultado mostrará todos los paquetes (recientemente) instalados y actualizados en orden cronológico.
La explicación de la línea:
ls -1t
- obtener todosdpkg.log*
los nombres de archivos en orden cronológicozcat -f
- Si el archivo es del tipo gzip , descomprímalo, ELSE simplemente pasa el contenido.tac
- Salida inversa de cat , línea por línea para asegurarse de obtener el orden cronológico correcto.grep
- Solo verifique si hay paquetes instalados o actualizados .awk -F ':a'
- Separe el campo de arquitectura del nombre del paquetecolumn -t
- bonito imprimir las columnas separadas por espacioPor supuesto, a uno le gustaría hacer un alias para esto, pero desafortunadamente no es posible ya que awk depende de comillas simples y dobles. En ese sentido, esto es mejor ponerlo en un script bash y donde el
:
separador se maneja mejor para otras arquitecturas en la columna de campo.El resultado es:
Retirarse:
fuente
Observando esto porque mencionas que otras respuestas de distribución son bienvenidas. rpm tiene un gran conjunto de etiquetas de formato de salida, una de las cuales es INSTALLTIME. (Utilizando
wget
como ejemplo)Esto se puede formatear de varias maneras. Lo uso de esta manera:
Estas dos páginas tienen una tonelada de gran información sobre cómo resolver problemas de metadatos RPM:
http://www.rpm.org/max-rpm/s1-rpm-query-parts.html
http://www.rpm.org/max-rpm/s1-rpm-query-handy-queries.html
Ordenar esta información le daría una solución funcional para su problema.
fuente
GNU / Linux Debian no tiene herramientas integradas para este problema, pero toda la información sobre los programas instalados de forma estándar se guarda en archivos con nombre -programa.list en la ubicación / var / lib / dpkg / info / . Pero no hay información sobre programas instalados manualmente allí.
Una solución larga de una sola línea :
Explicacion :
ls -rt
genera archivos ordenados por modificación de fecha en orden inverso, es decir , con los archivos más nuevos al final de la lista.stat
imprime la fecha del archivo en forma legible para humanos.printf
muestra el nombre del paquete y la fecha de su última modificación.for
ciclo en su conjunto imprime nombres de paquetes y fechas desde la más antigua hasta la más nueva.Ejemplo de salida (truncado):
El principal defecto de esta solución es que no está bien probada en producción.
fuente
/var/lib/dpkg/info/
. Esa es también la razón por la que/var/log/dpkg.log*
puede preferirse el uso.Es difícil, pero funciona tan rápido como otras soluciones. El formato de fecha es aaaammddhhmmss, lo que significa que un poco de reordenamiento y eliminación de formato da como resultado un número que se puede ordenar.
Muchas gracias a las otras soluciones, esta lista de nombres de paquetes en orden de instalación que podrían usarse en un sistema operativo creado para hacer copias.
fuente