Apt-get paket yönetim geçmişini komut satırı ile nasıl gösteririm?


Yanıtlar:


131

Apt (apt-get) ile yapılan tüm eylemler günlüğe kaydedilir. Bu dosyalar / var / log / apt / dizininde bulunur. En son geçmiş günlüğü görüntülemek için, yürütün:

less /var/log/apt/history.log

Bu günlükler döndürülür (her ay sanırım), eski dosyalara bir sayı eklenir ve sıkıştırılır. Böylece bir sonraki geçmiş günlüğünü görüntülemek için şunu kullanın:

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

Kullanılabilir günlükleri görüntülemek için:

ls -la /var/log/apt/

4
Bu mükemmel. Eksik olan tek şey emirleri kim yönetti.
Sınırlı Kefaret

3
/Var/log/auth.log göz at @LimitedAtonement, bu olabilir tesisin işletilmesi kullanıcıyı içerir. (bu kurulum, root olarak çalışan bir kabuk / program aracılığıyla başlatılmışsa yardımcı olmaz)
Lekensteyn

3
Ayrıca faydalı: zgrep, zcat
ishmael

Bu dosya, orijinal apt-get sonucu yüklenen bağımlılık paketlerini de kaydediyor mu?
Mahesha999

2
@LimitedAtonement, APT'nin en son sürümleri, "Komut Satırı: packagekit role = 'update-paket" veya "Komut Satırı: apt yükseltme "
Michael Tunnell,

21

Ayrıca ilginç içeriği görüntülemek için kısa bir komut da verebilirsiniz.

  • Bu özel işlevi aşağıdakilere ekleyin ~/.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
    }
    
  • Ve buna benzer bir terminalde arayın:

    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
    

Buradan alındı


zgrep ... /var/log/dpkg.log*- girdileri de arşivlerden çıkarır.
Ctrl-C

6

Son yüklenen paketleri listelemek için aşağıdaki komutu da kullanabilirsiniz

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

1
daha da iyisi: grep "\ install\ " /var/log/apt/history.loglisteyi apt-get içine kopyalayıp yapıştırmanız
gerekirse

2

Eğer takıldı ve o paketleri istiyorsanız değil daha sonra kaldırılması, bu deneyin:

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) 

Bu yükleme eksi herhangi bir eşleşen kaldırır.

Referanslar:


+1: Güzel bir astar, ancak yalnızca son günlük rotasyon süresi için geçerlidir. Ayrıca bunun yerine, her iki durumda da, paket gibi ve diğer birçoklarında olduğu gibi yinelenen satırların görünmesini önlemek için sortkullanın . sort -uoracle-java8-installer
Cbhihe

1

İşte aslında bunu nasıl yapıyorsunuz, paket paketini söyleyin:

_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

Dpkg.log kullanılarak apt- get'in görmediği işlemleri yakalar.

Çıktı:

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
Lütfen buradaki üçlü geri dönüş çubuklarının sizin düşündüğünüz gibi çalışmadığını unutmayın.
edwinksl

1

Belirli bir paketin güncelleme geçmişini öğrenmek için apt ile yüklendiğini / güncellendiğini varsayarak bir oneliner (bash ve zgrep), örnek skypeforlinux paketi içindir:

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)

Bu, tarihin önceki üç satırını da içeren skypeforlinux için geçmişin günlük dosyalarını greps eder. Sonra sonuç üzerinde tekrar eder ve ilgili tarih ve sürümleri tekrarlar.

Değiştir paket hatta birden paketler için çalışır, sizin paket adıyla değişken değeri aynı dizeyle başlayan sağladı.

Çıktı ile örnek:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.