Vraag Hoe toon ik apt-get pakketbeheerhistorie via de opdrachtregel?


Is er een manier om de geschiedenis van pakketten weer te geven die zijn gewijzigd door apt-get via de opdrachtregel?


110
2018-01-15 13:04


oorsprong


mogelijk duplicaat van Is het mogelijk om een ​​lijst met meest recent geïnstalleerde pakketten te krijgen? - BuZZ-dEE


antwoorden:


Alle acties met apt (apt-get) worden vastgelegd. Deze bestanden zijn beschikbaar in / var / log / apt /. Voer het volgende uit om het meest recente geschiedenislogboek te bekijken:

less /var/log/apt/history.log

Deze logboeken worden geroteerd (elke maand denk ik), oude bestanden worden voorzien van een achtervoegsel en gecomprimeerd. Gebruik het volgende om het volgende geschiedenislogboek te bekijken:

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

Om de beschikbare logs te bekijken:

ls -la /var/log/apt/

120
2018-01-15 13:10



Dit is geweldig. Het enige wat ontbreekt, is wie de commando's heeft uitgevoerd. - Limited Atonement
@LimitedAtonement Bekijk /var/log/auth.log, it mei bevat de gebruiker die de installatie uitvoert. (dit zal niet helpen als de installatie werd aangeroepen via een shell / programma dat als root draaide) - Lekensteyn
Ook nuttig: zgrep, zcat - ishmael
registreert dit bestand ook de afhankelijkheidspakketten die zijn geïnstalleerd als gevolg van de oorspronkelijke apt-get? - Mahesha999
@LimitedAtonement de nieuwste versies van APT bieden een "Requested-By:" -gedeelte van het logboek om te laten zien wie de opdracht heeft ingeroepen en welke opdracht ze hebben opgeroepen, zoals "Commandline: packagekit role = 'update-packages'" of "Commandline: apt upgrade" - Michael Tunnell


U kunt ook een korte opdracht uitvoeren om de interessante inhoud weer te geven.

  • Voeg deze aangepaste functie toe aan uw ~/.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
    }
    
  • En noem het in een terminal als deze:

    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
    

Genomen van hier


19
2017-08-25 10:12



zgrep ... /var/log/dpkg.log*- voert ook vermeldingen uit archieven uit. - Ctrl-C


U kunt ook de volgende opdracht gebruiken om onlangs geïnstalleerde pakketten weer te geven

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

5
2018-02-13 23:28



nog beter: grep "\ install\ " /var/log/apt/history.log voor het geval u een lijst moet kopiëren en plakken in apt-get - mchid


Als u de pakketten wilt die zijn geïnstalleerd en niet vervolgens verwijderd, probeer dit:

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) 

Dit zijn de installaties minus eventuele koppelingen worden verwijderd.

Referenties:


2
2017-07-30 03:26



+1: Mooie one-liner maar alleen geldig voor de laatste log rotatieperiode. Ook in plaats van sort, gebruik sort -uin beide gevallen om te voorkomen dat dubbele regels verschijnen zoals in pakket-achtige oracle-java8-installer en vele anderen. - Cbhihe


Hier is hoe je het eigenlijk doet, zegt package mompel:

_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

Gebruik makend van dpkg.log legt bewerkingen vast die apt-get niet ziet.

Output:

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
2017-12-20 22:58



Let op: triple backticks werken hier niet zoals jij denkt dat ze doen. - edwinksl


Om de updategeschiedenis van een specifiek pakket te krijgen, ervan uitgaande dat het is geïnstalleerd / bijgewerkt via apt, is hier een oneliner (bash en zgrep), bijvoorbeeld voor pakket 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)

Dit grept apt's geschiedenis log bestanden voor skypeforlinux inclusief de vorige drie regels om de datum te krijgen. Vervolgens wordt het resultaat herhaald en worden de relevante datums en versies weergegeven.

Vervang de pakket variabele waarde met uw pakketnaam, werkt zelfs voor meerdere pakketten op voorwaarde dat ze beginnen met dezelfde reeks.

Voorbeeld met uitvoer:

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)

0
2017-07-19 09:54