¿Cómo muestro el historial de administración de paquetes de apt-get a través de la línea de comandos?


Respuestas:


131

Todas las acciones con apt (apt-get) se registran. Estos archivos están disponibles en / var / log / apt /. Para ver el registro histórico más reciente, ejecute:

less /var/log/apt/history.log

Estos registros se rotan (cada mes, supongo), los archivos antiguos tendrán un sufijo con un número y se comprimirán. Entonces, para ver el siguiente registro del historial, use:

zless /var/log/apt/history.log.1.gz

Para ver los registros disponibles:

ls -la /var/log/apt/

44
Esto es excelente. Lo único que falta es quién ejecutó los comandos.
Expiación limitada el

3
@LimitedAtonement Eche un vistazo a /var/log/auth.log, puede contener el usuario que ejecuta la instalación. (esto no ayudará si la instalación se invocó a través de un shell / programa que se ejecuta como root)
Lekensteyn

3
También útil: zgrep, zcat
ishmael

¿Este archivo también registra los paquetes de dependencia instalados como resultado de apt-get original?
Mahesha999

2
@LimitedAtonement las últimas versiones de APT ofrecen una parte del registro "Solicitado por:" para mostrar quién invocó el comando y qué comando invocaron como "Commandline: packagekit role = 'update-packages'" o "Commandline: apt actualización "
Michael Tunnell

21

También puede hacer un comando breve para mostrar el contenido interesante.

  • Agregue esta función personalizada a su ~/.bashrc:

    ### pars for fun: install | remove | rollback
    function apt-history(){
    
          case "$1" in
            install)
                  grep 'install ' /var/log/dpkg.log
                  ;;
            upgrade|remove)
                  grep $1 /var/log/dpkg.log
                  ;;
            rollback)
                  grep upgrade /var/log/dpkg.log | \
                      grep "$2" -A10000000 | \
                      grep "$3" -B10000000 | \
                      awk '{print $4"="$5}'
                  ;;
            *)
                  cat /var/log/dpkg.log
                  ;;
          esac
    }
  • Y llámalo en una terminal como esta:

    kreso@h17:~$ apt-history install
    2013-08-06 14:42:36 install gir1.2-nautilus-3.0:amd64 <none> 1:3.8.2-0ubuntu1~ubuntu13.04.1
    2013-08-06 14:42:36 install python-nautilus:amd64 <none> 1.1-3ubuntu1
    2013-08-06 14:42:37 install insync-nautilus:all <none> 1.0.20
    2013-08-07 14:41:37 install powertop:amd64 <none> 2.1-0ubuntu1
    2013-08-07 18:44:10 install libdiscid0:amd64 <none> 0.2.2-3build1
    2013-08-07 18:44:11 install sound-juicer:amd64 <none> 3.5.0-0ubuntu1
    

Tomado de aquí


zgrep ... /var/log/dpkg.log*- también genera entradas de archivos.
Ctrl-C

6

También puede usar el siguiente comando para enumerar los paquetes instalados recientemente

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

1
aún mejor: grep "\ install\ " /var/log/apt/history.logen caso de que necesite copiar y pegar una lista en apt-get
mchid

2

Si desea esos paquetes que se instalaron y no se desinstalaron posteriormente, intente esto:

comm -23 <(grep "apt-get install" /var/log/apt/history.log | sed 's/.* //' | sort) \ 
<(grep "apt-get remove" /var/log/apt/history.log | sed 's/.* //' | sort) 

Estas son las instalaciones menos las eliminaciones coincidentes.

Referencias


+1: una sola línea, pero solo válida para el último período de rotación de registros. También, en lugar de sortusarlo, sort -uen ambos casos para evitar que aparezcan líneas duplicadas, como en package like oracle-java8-installery muchos otros.
Cbhihe

1

Así es como lo haces realmente, di paquete murmullo:

_P=mutter &&
(cat /var/log/dpkg.log{,.1};zcat /var/log/dpkg.log.*.gz) |
egrep --text "^[^ ]* [^ ]* (configure|install|remove|status [^ ]*|trigproc|upgrade) $_P[: ]" |
sort --reverse | less

El uso de dpkg.log captura operaciones que apt-get no ve.

Salida:

2016-12-20 09:47:35 status unpacked mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
2016-12-20 09:47:35 status installed mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
…

1
Tenga en cuenta que los triple backticks aquí no funcionan de la manera que usted piensa que lo hacen.
edwinksl

1

Para obtener el historial de actualizaciones de un paquete específico, suponiendo que se haya instalado / actualizado a través de apt, aquí hay un oneliner (bash y zgrep), por ejemplo, para el paquete skypeforlinux:

package='skypeforlinux'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)

Esto incluye los archivos de registro del historial de apt para skypeforlinux, incluidas las tres líneas anteriores para obtener la fecha. Luego itera sobre el resultado y hace eco de las fechas y versiones relevantes.

Reemplace el valor de la variable del paquete con el nombre de su paquete, incluso funciona para varios paquetes, siempre que comiencen con la misma cadena.

Ejemplo con salida:

package='apache'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)
2017-10-19  15:00:09  apache2-utils:amd64 (2.4.18-2ubuntu3.5)
2017-11-24  14:24:45  apache-pom-java:amd64 (10-2build1, automatic)
2018-02-22  16:42:02  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:34:34  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:36:32  apache2-data:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:40:50  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:42:07  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:42:39  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-03-15  10:08:50  apache-pom-java:amd64 (10-2build1)
2018-04-20  08:55:07  apache2-data:amd64 (2.4.18-2ubuntu3.5, 2.4.18-2ubuntu3.8)
2018-07-06  08:55:11  apache2-data:amd64 (2.4.18-2ubuntu3.8, 2.4.18-2ubuntu3.9)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.