Belirli bir tarihte kurulmuş olan paketleri 'yetenek' kullanarak nasıl görebilirim?


54

aptitude(Veya apt-get) kullanırken yüklenen, tarihe göre sıralanmış bir paket listesi bulmanın kolay bir yolu olup olmadığını bilen var mı ?

Yeni bir şeyler denemek için bir sürü paket yükledim, fakat işe yaramadı. Disk alanını geri kazanmak için tüm bu paketleri kaldırmak istiyorum.

Sadece indirilen .deb dosyalarının listesine bakmayı denedim, ancak bu (bunu yapmasına rağmen) yapmanın oldukça geriye dönük bir yoluna benziyor.

Yanıtlar:


43

Ne yazık ki, dpkg (paket işleyici özelliği üstünde çalışır), ekleme düşünceleri olmasına rağmen paketlerin yükleme tarihini özellikle kaydetmez. Ancak, yükleme tarihi dizine yazılan dosyaların tarih damgasına bakılarak bulunabilir /var/lib/dpkg/info.


4
Bu yaklaşımı kullanırsanız, sadece *.listdosyalar üzerindeki zaman damgalarını kontrol ettiğinizden emin olun , çünkü diğer dosyalar paket tarihi ile damgalanır.
Dave

20

Bir log ( /var/log/aptitude) yazmak için yetenek yapılandırdım . Bu şekilde çıktı üretir;

Aptitude 0.4.11.11: log report
Mon, Feb  9 2009 13:21:28 +0100

IMPORTANT: this log only lists intended actions; actions which fail due to
dpkg problems may not be completed.

Will install 6 packages, and remove 0 packages.
4096B of disk space will be used
===============================================================================
[UPGRADE] apt 0.7.20.1 -> 0.7.20.2
[UPGRADE] apt-utils 0.7.20.1 -> 0.7.20.2
[UPGRADE] base-passwd 3.5.19 -> 3.5.20
[UPGRADE] libgnutls26 2.4.2-5 -> 2.4.2-6
[UPGRADE] libpq5 8.3.5-1 -> 8.3.6-1
[UPGRADE] ucf 3.0015 -> 3.0016
===============================================================================

Log complete.

Bu, yüklenen yeteneğin tam tarihini ve paketlerini gösterir. Bunu yapılandırmak için yetenek referansını izleyin;

Option:Aptitude::Log

Default:/var/log/aptitude

Description: If this is set to a nonempty string, aptitude will log the package
installations, removals, and upgrades that it performs. If the value of
Aptitude::Log begins with a pipe character (ie, ``|''), the remainder of its
value is used as the name of a command into which the log will be piped: for
instance, |mail -s 'Aptitude install run' root will cause the log to be emailed
to root. To log to multiple files or commands, you may set this option to a list
of log targets.

Yetenek man sayfasında yetenek başvurusuna bir link bulacaksınız.


1
Lütfen bağlantıyı ve nasıl uygulanacağını gönderin. Sadece bazı manuel metinlere atıfta bulunmak pek yardımcı olmaz.
not2qubit

17

Bir yoktur basit bütün paketler kurulum tarihini görmek için bir yol. Sadece yürütün:

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

Sonuç olarak, kurulu tüm paketlerin tam tarih ve saatli bir listesini alacaksınız.

Beni bu çözüme götüren yorumlarınız için teşekkürler.


2
cdEğer tam yolunu kullanırsanız komut gerekli değildir catkomuta ...
papukaija

1
cdKomutun amacı, lsmevcut dpkg.log dosyalarını kontrol etmek için bu dizinde bulunmaktı. Ancak ls /var/log | grep 'dpkg.log'log dosyalarını listelemek için daha iyi bir çözüm çalışıyor olacaktır . Dağınıklık için özür dilerim.
jmarceli

2
ya da sadece "grep install /var/log/dpkg.log*"?
Marc Van Daele

1
Huh, cat | catyapabileceğin bir şey olduğunu bilmiyordum. Ama neden her iki dosyayı da tek bir komutta yakalamıyorsunuz? (Ya da daha iyisi: sadece @MarcVanDaele'nin dediğini yapın.)
mwfearnley

13

Bunu web’de buldum. Dpkg günlük dosyasından dpkg geçmişi oluşturur.

Çok basit görünüyor.

function apt-history(){
      case "$1" in
        install)
              cat /var/log/dpkg.log | grep 'install '
              ;;
        upgrade|remove)
              cat /var/log/dpkg.log | grep $1
              ;;
        rollback)
              cat /var/log/dpkg.log | grep upgrade | \
                  grep "$2" -A10000000 | \
                  grep "$3" -B10000000 | \
                  awk '{print $4"="$5}'
              ;;
        *)
              cat /var/log/dpkg.log
              ;;
      esac
}

Kaynak

DÜZENLE

Bu betiği Ubuntu 8.10 Server'da denedim ve çok iyi çalışıyor. Sorununuzu nasıl çözdüğünüze biraz bilgi verebilir misiniz?


5
  • Dpkg günlüklerini kullanın

    locate dpkg.log | xargs cat {} | grep " install "
    
  • VEYA yoksa locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • sortZamana uygun sipariş vermek için kullanın

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Kullanın tac(reverse cat*), baş mesela son 4 girdileri almak için

    locate dpkg.log | xargs cat {} | grep " install " | sort | tac | head -n4
    

örneğin, son komut için şunu alıyorum:

2014-10-08 18:56:12 install xorg-server-source:all <none> 2:1.16.1-1
2014-10-08 18:49:34 install libelementary-data:all <none> 0.7.0.55225-1
2014-10-08 18:46:57 install e17:i386 <none> 0.17.6-1
2014-10-08 18:46:56 install libedje-bin:i386 <none> 1.8.6-2.1+b1

1
Neden yerine tac+ headkullandın tail?
Zanna

1
Bir süre oldu, nedenini unuttum - ama bunun tamamen iyi bir nedeni olabilir. Belki de sarışın bir an yaşadım: D
a20

4

Ayrıca /var/log/apt/term.log ve daha eski dosyaları term.log.1.gz vs.) işaretleyerek önceki işlemlerinizi takip edebilirsiniz. Yükleme sırasında mesajlardan zaman damgası ve tam günlüğü vardır.


2

[GERÇEK SORULAN CEVAP], Evet, apt-get kullanarak terminalin içinde yapılmış olsa bile, belirli bir tarihte kurulu paketleri aramak için KOLAY bir yol var.

Ubuntu Yazılım Merkezi'nden serbestçe kurulabilen Synaptic Paket Yöneticisi'ni kurarsanız, yalnızca DOSYA menüsünü açmanız ve "Geçmiş" seçeneğini seçmeniz gerekir. Orada, eklenen ve kaldırılan tüm uygulama paketlerinin, nasıl kurulup çıkarılmadıklarına bakılmaksızın, tarihe göre düzenlenmiş bir hesap bulacaksınız.


2

Gerçekten pkginstall.shbunu yapabilen bir 'resmi' senaryo var. Resmi belgelerde verilen talimatları izleyin . Kısaca, betiği yukarıdaki linkten indirin, çalıştırılabilir olduğundan emin olun ve sonra şunu çalıştırın:

~/pkginstalls.sh

Bu, pkginstalls.txtana dizininizde tarihe göre sıralanmış tüm kurulu paketleri içeren bir dosya oluşturacaktır .

Btw, bu betiğin içeriği:

#!/bin/bash
#pkginstalls.sh
#creates text file with a list of all packages installed by date

#first append all info from archived logs

i=2
mycount=$(ls -l /var/log/dpkg.log.*.gz | wc -l)
nlogs=$(( $mycount + 1 ))

while [ $i -le $nlogs ]
do
if [ -e /var/log/dpkg.log.$i.gz ]; then
zcat /var/log/dpkg.log.$i.gz | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append all info from unarchived logs

i=1
nulogs=$(ls -l /var/log/dpkg.log.* | wc -l)
nulogs=$(( $nulogs - $nlogs + 1 ))
while [ $i -le $nulogs ]
do
if [ -e /var/log/dpkg.log.$i ]; then
cat /var/log/dpkg.log.$i | grep "\ install\ " >> $HOME/pkgtmp.txt
fi
i=$(( $i+1 ))

done

#next append current log

cat /var/log/dpkg.log | grep "\ install\ " >> $HOME/pkgtmp.txt

#sort text file by date

sort -n $HOME/pkgtmp.txt > $HOME/pkginstalls.txt

rm $HOME/pkgtmp.txt

exit 0
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.