¿Cómo obtengo el historial de "apt-get install" en Ubuntu?

85

Estoy a punto de mover un servidor de un cuadro de Ubuntu a otro. No estoy clonando la caja vieja a la nueva; Estoy creando un nuevo sistema y moveré los datos según sea necesario. Quiero instalar todo el software que tengo en la caja vieja en la nueva.

¿Hay una manera simple de encontrar el historial de todos los comandos "sudo apt-get install" que he dado a lo largo del tiempo? Es decir, dpkg -l me muestra todos los paquetes que se han instalado, pero no qué paquete de nivel superior los instaló. Si hay una manera para que dpkg me dé el paquete de instalación, puedo encontrar los únicos allí; de lo contrario, quiero algo más que diga "instaló estos 24 paquetes".

Paul Hoffman
fuente
¿Puedes aceptar una respuesta a continuación? Agradecer a las personas que respondieron.
m-ric
Estas soluciones solo verificarán lo que sucedió DESPUÉS de la última rotación de registros. No verifican toda la historia.
Kraang Prime
Esta respuesta da una forma simple y rápida, askubuntu.com/a/250530/197730 , a esta pregunta Cómo enumerar todos los paquetes instalados .
TooTone

Respuestas:

69

La apthistoria está /var/log/apt/history.logcomo se dijo en un comentario anterior. Dicho esto, esto no enumerará los paquetes que se instalaron manualmente, usando dpkgo GUI como gdebi. Para ver todos los paquetes que pasaron dpkg, puedes mirar /var/log/dpkg.log.

Phaphink
fuente
8

http://www.debianadmin.com/clone-your-ubuntu-installation.html

y /var/adm/apt/history.log

M_1
fuente
55
El procedimiento en el primer enlace no distingue entre paquetes instalados automáticamente y paquetes instalados manualmente. /var/log/apt/history.log(te equivocaste de ubicación por cierto) se habrá girado después de unos meses.
Gilles
Gilles tiene razón en ambos aspectos. Solo tengo aproximadamente el mes de esos registros, y ni siquiera puedo ver cómo se establece la tasa de eliminación de registros (se hace con 'newsyslog' en FreeBSD). Así que todavía no tengo una solución, pero tengo algunos consejos. Al menos puedo obtener el resultado del comando en el artículo de clonación, buscar nombres de "alto nivel", instalarlos en el nuevo, hacer lo mismo en el nuevo cuadro, diferenciar los dos resultados y repetir hasta que esté satisfecho. Todavía me gustaría escuchar más ideas.
Paul Hoffman
7

Puede enumerar paquetes cuya instalación se ha solicitado explícitamente con apt-mark.

apt-mark showmanual

En caso de que esté ejecutando una versión antigua de Debian, aquí hay una forma manual.

El siguiente comando proporciona la lista de paquetes cuya instalación se solicitó, ya sea manual o automáticamente. A menos que esté en medio de (des) instalar paquetes, esta es la lista de paquetes instalados.

dpkg --get-selections | sed -n 's/\t\+install$//p'

El siguiente comando proporciona un superconjunto de paquetes instalados automáticamente:

</var/lib/apt/extended_states awk -v RS= '/\nAuto-Installed: *1/{print$2}'

En conjunto, el siguiente comando enumera los paquetes instalados manualmente:

comm -23 <(dpkg --get-selections | sed -n 's/\t\+install$//p') \
         <(</var/lib/apt/extended_states \
           awk -v RS= '/\nAuto-Installed: *1/{print$2}' |sort)
Gilles
fuente
1
--- resultado muy diferente decomm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)
Cbhihe
En Debian, existe apt-mark showmanualel equivalente a su último comando.
maxschlepzig
3
grep -i "Commandline" /var/log/apt/history.log

Muestra todos los paquetes que has instalado usando: sudo apt-get install xxxxx

Prent Rodgers
fuente
Esto no difiere lo suficiente de la respuesta de @ ℝaphink y debería ser un comentario.
Karl Richter
2

En lugar de la combinación tac / cabeza, es mejor usar cola (para las últimas 25 líneas):

tail -n 25 /var/log/apt/history.log
Entero
fuente
Esto no difiere lo suficiente de la respuesta de @ ℝaphink y debería ser un comentario.
Karl Richter
Además, no es lo mismo. tail enumerará las últimas líneas en el archivo, en el orden en que están en el archivo. tac invertirá el orden para que la última línea sea ahora la primera, la penúltima es la segunda, etc. Además, parece que corre el riesgo de equivocarse cuando dice que algo es "mejor" sin explicar por qué. Quiero decir, "mejor" según quién? ¿Para qué requerimiento? Parece un poco demasiado confiado.
Todd Walton el
0

Las otras respuestas ayudaron, pero me dieron demasiada salida. Para reducir el resultado, comencé apt-mark showmanualcomo en esta respuesta , y luego filtré los paquetes instalados originalmente (vea esta respuesta para obtener una lista de los paquetes instalados originalmente; estoy usando ubuntu 18.04.2 de ahí el siguiente enlace) .

BASE_PACKAGES_MANIFEST=http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.manifest
REMOVE_VERSIONS_REGEX='[0-9][.-][0-9][.-][0-9]|[0-9][.-][0-9]|[0-9]'
paste  <( apt-mark showmanual ) <( apt-mark showmanual | sed -r "s/$REMOVE_VERSIONS_REGEX//g" ) |
    grep -vf <( curl $BASE_PACKAGES_MANIFEST | cut -f1 | sed -r "s/$REMOVE_VERSIONS_REGEX|:amd//g" ) |
    cut -f1 |
    sort |
    uniq

El script filtra los paquetes que estaban en el manifiesto original al hacer una comparación independiente de la versión, de modo que los paquetes actualizados no aparecen en la lista. Terminé con una lista de unos 60 paquetes.

La otra forma que me gusta es esta respuesta que busca en todos los registros de apt .

TooTone
fuente
-1

Para obtener la lista de los paquetes instalados más recientes en orden descendente, me gusta usar (por ejemplo, 25 líneas):

tac /var/log/apt/history.log |head --lines=25
Hartmut P.
fuente
1
Más eficiente (y aliterativo) sería: tail -25 /var/log/apt/history.log | tac
agc
Esto no difiere lo suficiente de la respuesta de @ ℝaphink y debería ser un comentario.
Karl Richter