¿Cómo ver el historial de instalación de apt-get?

18

¿Cómo puedo ver el historial de apt-get installcomandos que he ejecutado manualmente?

Me parece que todos los métodos disponibles muestran todo lo que se ha instalado desde el inicio de la instalación de Ubuntu.

¿Cómo puedo ver el historial apt-get installdesde el momento en que se completó mi proceso de instalación del sistema?

Dime por qué
fuente
Bueno, sí. ¿Qué más esperarías? ¿Desea mostrar solo aquellos que ejecutó desde la terminal y no aquellos que fueron ejecutados por una GUI o algo así? Por favor, editar su pregunta y aclarar.
terdon el
@terdon Okay hizo una nueva edición
TellMeWhy
1
Hay registros de dpkgadentro /var/log/dpkg.log*.
Velkan
1
@ParanoidPanda Eso falla de varias maneras. Truncamientos historia, las cosas funcionan en otras conchas, retirados de la historia las cosas, o nunca ponen allí en primer lugar, que se han instalado desde scripts, las cosas funcionan por otros usuarios, etc, etc
Squidly
1
@MrBones: Lo sé, y lo he dicho en mi respuesta (y en los comentarios a continuación). Sin embargo, el OP solicitó una forma de ver todas las instancias cuando ejecutaron manualmente el apt-get installcomando para instalar un paquete, y proporcioné una solución que brinda esta información a menos que el archivo de historial haya sido alterado de cierta manera (por ejemplo: las entradas tienen sido eliminado).

Respuestas:

20

Creo que la respuesta dada aquí por Kos es la mejor forma que he visto hasta ahora. Aunque a medida que utiliza Software Center apt, todo lo que haya instalado también aparecerá en la lista.

El comando es:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'
Arronico
fuente
Probaré
¡No es! echa un vistazo a la actualización: askubuntu.com/a/680405/320386
kos
Usar esto, es mucho más seguro para esta tarea: zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d': grep -Po '^Commandline:(?=.* install ) \K.*'filtrará sólo los apt-getcomandos que contienen installcon un espacio de ataque y de salida, sed '1,4d' podría ser dependiente de la instalación específica; in mine 1,4elimina exactamente la cantidad de entradas que provienen de Ubiquity, que son las que desea eliminar. Avíseme si el número es el mismo en su instalación, de esa manera al menos tenemos una línea de base: |
kos
@kos obtengo líneas adicionales como apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericcon el nuevo comando. ¿Son las líneas de ubicuidad?
Arronical
No, parece que vinieron de Software Updater; no hay forma de distinguir entre los comandos ejecutados por el usuario y los comandos ejecutados por alguna apt-getinterfaz, aparte de Ubiquity, que se ejecuta solo una vez (por ejemplo aptdaemon, ese comando también mostrará las entradas). Sin embargo, la mejor opción es usar ese comando, que al menos excluye las entradas de Ubiquity.
kos
9

Simplemente escriba el siguiente comando en su terminal para ver todos los registros de instalación.

grep " install " /var/log/dpkg.log
Vikas Chaudhary
fuente
3

Para simplificar la respuesta @Arronical, un buen truco que aprendí recientemente es que puedes usar zcat -qfpara capturar archivos comprimidos txt y txt.

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

se convierte

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

De man zcat:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.
jjcf89
fuente
2

Aquí hay un script que imprime solo los paquetes de nivel superior instalados actualmente , donde los "paquetes de nivel superior" se definen como paquetes atp de los que no dependen otros paquetes atp. Si tales programas de nivel superior fueron instalados por atp o un administrador de paquetes como synaptic, el usuario los elegía manualmente.

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

Los paquetes se imprimen en orden inverso bajo el supuesto de que es más probable que el usuario quiera la información más reciente antes, y porque el programa es lento.

Flujo de programa:

  • El programa primero reúne en una lista todos los paquetes instalados leyendo los nombres de archivo debajo /var/lib/dpkg/info/. Los tiempos de modificación del archivo son los tiempos de instalación.
  • Esa lista está ordenada en orden inverso.
  • Para cada paquete instalado $Pkg, una llamada a apt-cache rdepends $Pkg solicita las dependencias inversas de $Pkg. Si no hay dependencias, entonces es un paquete de nivel superior y la información del paquete se imprime: fecha hora nombre del paquete

Notas:

  • La secuencia de comandos depende del formato de salida del apt-cache rdepends $Pkgque estaba destinado a los ojos humanos y podría cambiar en las futuras versiones de apt.
  • El código para la parte que recopila los nombres de archivo en / var / lib / dpkg / info / provino de esta publicación unix.stackexchange . Como señaló el cartel 'mikel' , los dpgkarchivos de registro de historial no son confiables porque se rotarán después de alcanzar un cierto volumen.
  • Página de manual para apt-chache
  • La llamada apt-cache rdepends ...es muy lenta presumiblemente porque cada llamada se calcula iterando a través de todas las dependencias. Por lo tanto, el script anterior comienza con las instalaciones más recientes para ofrecer al usuario la mayor satisfacción instantánea posible.
  • El --installedindicador después de apt-cacheverifica que los paquetes instalados con dpkg también estén instalados. Si el usuario u otro software de instalación omitiera apt y utilizara dpkg directamente, sería posible. ESTE CASO NO HA SIDO PROBADO, pero creo que algo notable se imprimiría en la salida estándar o de error
  • La salida no incluye paquetes elegidos manualmente que luego dependieron de un paquete superior. La salida también puede incluir paquetes que se instalaron a través de apt por otro software de instalación de terceros y, por lo tanto, no se instalan realmente manualmente. Sin embargo, si el propósito de la salida es como base para configurar un Linux restaurado desde un /homedirectorio de respaldo que incluye dicho software de terceros, entonces esta salida sería adecuada.
  • Algunos de los nombres de paquetes incluyen números de versión, y otros no. Mencionado solo para dar a conocer el hecho.
Craig Hicks
fuente
1

Si quieres ver todas las cosas que has instalado ejecutando:

sudo apt-get install [package]

Y no se ha metido con el historial de bash, ni desea ver el historial de este tipo de tipo de instalación para otro usuario (o todos los usuarios), entonces simplemente puede ejecutar:

history | grep "apt-get install"

Y eso debería obtener resultados principalmente relevantes.


fuente
1
¿Tendré toda la historia con esto?
TellMeWhy
@DevRobot: a menos que haya modificado manualmente las entradas con el apt-get installen ellas en el.bash_history archivo, o haya eliminado este archivo, el comando le mostrará todas las instancias cuando haya ejecutado un comando con la cadena apt-get installdentro de su cuenta de usuario (incluso si ejecute el comando como root y, por lo tanto, no exactamente como su cuenta de usuario, es decir, ejecuta un comando con sudo).
2
Sin embargo
Arronical
2
@ Se espera una prueba arrítmica al hacer reclamos ;-)
Rinzwind
1
Yo mismo asumiría que 500 es el valor predeterminado ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind
1

Si desea el historial de apt-get installcomandos, use el siguiente comando:

grep "apt-get install" .bash_history

Salida:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

Para otra información, consulte Información adicional .

También hay información de instalación más detallada en /var/log/apt/ de las history.logy los history.log.X.gzarchivos y term.logy term.log.X.gzarchivos

Si desea el historial de solo los apt-getcomandos incluidos, entonces

history | grep apt-get

Ravan
fuente
apt-mark showmanualmuestra todos los paquetes instalados cuando también se instaló el sistema operativo, en lugar de solo aquellos que realmente se instalaron manualmente. ¡Es una forma extraña de comportarse!
Arronical
1
Esto no necesariamente da detalles específicos en cuanto a la historia. Lo que la gente necesita ver es /var/log/apt/history.logarchivos similares. Solo obtiene la lista de paquetes seleccionados y seleccionados automáticamente. No proporciona ningún historial cronológico de lo que se instaló, lo que se eliminó, lo que se actualizó, etc. de esta respuesta.
Thomas Ward
@Arronical - ¿Dónde está la página del manual apt -mark showmanual? No puedo verlo en la página de manual de Ubuntu 16.04 LTS para apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Craig Hicks
0

Para ver lo que instaló y quitó, reinstaló, etc. Más información sobre el viaje de las instalaciones de apt-get.

La respuesta se puede modificar en un alias:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'
Miguel
fuente
0

Tenga en cuenta que algunos argumentos se pueden establecer antes de la instalación, como lo hace el script virtualmin durante la instalación: apt-get -y install packagename.

Entonces, si desea capturar todos los comandos de instalación, debe cambiar la consulta de expresiones regulares.

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
Yann Papouin
fuente