Bagaimana cara melihat paket diinstal pada tanggal tertentu menggunakan 'aptitude'?

54

Adakah yang tahu apakah ada cara mudah untuk menemukan daftar paket yang diinstal, disortir berdasarkan tanggal, saat menggunakan aptitude(atau apt-get)?

Saya menginstal banyak paket untuk mencoba sesuatu yang baru, tetapi tidak berhasil. Saya ingin menghapus semua paket ini, untuk mendapatkan kembali beberapa ruang disk.

Saya sudah mencoba hanya melihat daftar file deb. Diunduh, tapi itu sepertinya cara yang agak mundur untuk melakukannya (meskipun itu berhasil).

Mikeage
sumber

Jawaban:

43

Sayangnya, dpkg (paket handler aptitude berfungsi di atas) tidak secara khusus menyimpan tanggal instalasi paket, meskipun ada pemikiran untuk menambahkannya. Namun, tanggal instal dapat ditemukan dengan melihat cap tanggal file yang ditulis ke direktori /var/lib/dpkg/info.


sumber
4
Jika Anda menggunakan pendekatan ini, pastikan untuk hanya memeriksa stempel waktu pada *.listfile karena file lain dicap dengan tanggal paket.
Dave
20

Saya telah mengkonfigurasi aptitude untuk menulis ke log ( /var/log/aptitude). Ini menghasilkan output seperti ini;

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.

Ini menunjukkan tanggal dan paket pasti yang dipasang oleh aptitude. Untuk mengonfigurasi ini, ikuti referensi aptitude;

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.

Anda akan menemukan tautan ke referensi aptitude di halaman manual aptitude.

Yeremia
sumber
1
Silakan kirim tautan dan cara menerapkannya. Mengacu pada beberapa teks manual tidak terlalu membantu.
not2qubit
17

Ada cara sederhana untuk melihat semua tanggal pemasangan paket. Eksekusi saja:

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

Sebagai hasilnya, Anda akan mendapatkan daftar semua paket yang diinstal dengan tanggal dan waktu yang tepat.

Terima kasih atas komentar yang mengarahkan saya ke solusi itu.

Jmarceli
sumber
2
The cdperintah tidak diperlukan jika Anda menggunakan path lengkap di catperintah ...
papukaija
1
Tujuan dari cdperintah adalah untuk berada lsdi dalam direktori ini untuk memeriksa file dpkg.log yang tersedia. Tetapi solusi yang lebih baik akan berjalan ls /var/log | grep 'dpkg.log'untuk membuat daftar file log. Maaf atas kekacauan ini.
jmarceli
2
atau hanya "grep install /var/log/dpkg.log*"?
Marc Van Daele
1
Hah, saya tidak tahu cat | catadalah hal yang bisa Anda lakukan. Tapi mengapa tidak cat kedua file dalam satu perintah? (Atau lebih baik lagi: lakukan saja apa yang dikatakan @MarcVanDaele.)
mwfearnley
13

Saya menemukan ini di sini di web. Ini menciptakan riwayat dpkg dari file log dpkg.

Terlihat sangat sederhana.

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
}

Sumber

SUNTING

Saya mencoba skrip ini di Ubuntu 8.10 Server dan berfungsi dengan sangat baik. Bisakah Anda memberikan beberapa informasi, bagaimana Anda memecahkan masalah Anda?

guerda
sumber
5
  • Gunakan log dpkg

    locate dpkg.log | xargs cat {} | grep " install "
    
  • ATAU jika Anda tidak punya locate

    find /var/log/ -name 'dpkg.log' | xargs cat {} | grep " install "
    
  • Gunakan sortuntuk memastikan pemesanan berdasarkan waktu yang tepat

    locate dpkg.log | xargs cat {} | grep " install " | sort
    
  • Gunakan tac(mundur cat) *, misalnya kepala untuk mendapatkan 4 entri terbaru

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

mis. Untuk perintah terakhir, saya mendapatkan:

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
a20
sumber
1
Mengapa Anda menggunakan tac+ headalih-alih tail?
Zanna
1
Sudah lama, saya lupa mengapa - tetapi mungkin ada alasan yang sepenuhnya bagus untuk itu .. atau mungkin saya memiliki momen pirang: D
a20
4

Anda juga dapat melacak tindakan sebelumnya dengan memeriksa /var/log/apt/term.log, dan file lama term.log.1.gz dll.). Ini memiliki cap waktu dan log lengkap dari pesan saat menginstal.


sumber
2

[JAWABAN PERTANYAAN SEBENARNYA], Ya, ada cara MUDAH untuk mencari paket yang diinstal pada tanggal tertentu, bahkan jika itu dilakukan di dalam terminal menggunakan apt-get.

Jika Anda menginstal Synaptic Package Manager, yang dapat diinstal secara bebas dari Ubuntu Software Center, Anda hanya perlu membuka menu FILE dan memilih opsi "History". Di sana Anda akan menemukan penghitungan semua paket aplikasi yang ditambahkan dan dihapus, yang diatur berdasarkan tanggal, terlepas dari bagaimana paket itu diinstal atau dihapus.

Gyropyge
sumber
2

Memang ada pkginstall.shskrip 'resmi' yang bisa melakukan ini. Ikuti instruksi dalam dokumentasi resmi . Secara singkat, unduh skrip dari tautan di atas, pastikan skrip itu dapat dieksekusi dan kemudian jalankan dengan:

~/pkginstalls.sh

Ini akan membuat pkginstalls.txtfile di direktori home Anda yang berisi semua paket diinstal yang diurutkan berdasarkan tanggal.

BTW, ini adalah isi skrip:

#!/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
Ron
sumber