Bagaimana cara melihat riwayat pemasangan apt-get?

18

Bagaimana saya bisa melihat riwayat apt-get installperintah yang telah saya jalankan secara manual?

Sepertinya saya bahwa semua metode yang tersedia menunjukkan semua yang telah diinstal langsung dari awal instalasi Ubuntu.

Bagaimana saya bisa melihat riwayat apt-get installsejak saat proses instalasi sistem saya selesai?

TellMeWhy
sumber
Baiklah. Apa lagi yang Anda harapkan? Apakah Anda ingin memperlihatkan hanya yang Anda jalankan dari terminal dan bukan yang dijalankan oleh GUI atau apalah? Harap edit pertanyaan Anda dan klarifikasi.
terdon
@terdon Okay, buat edit baru
TellMeWhy
1
Ada log dpkgin /var/log/dpkg.log*.
Velkan
1
@ParanoidPanda Itu gagal dengan berbagai cara. Pemotongan riwayat, hal-hal dijalankan dalam cangkang lain, hal-hal yang dihapus dari sejarah, atau tidak pernah diletakkan di sana di tempat pertama, hal-hal yang diinstal dari skrip, hal-hal yang dijalankan oleh pengguna lain dll dll
Squidly
1
@ Mr.Bones: Saya tahu, dan saya telah menyatakannya dalam jawaban saya (dan di komentar di bawahnya). Namun OP meminta cara untuk melihat semua instance ketika mereka secara manual mengeksekusi apt-get installperintah untuk menginstal paket, dan saya telah memberikan solusi yang memberikan informasi ini kecuali file history telah diubah dengan cara tertentu (misalnya: entri memiliki telah dihapus).

Jawaban:

20

Saya pikir jawaban yang diberikan di sini oleh kos adalah cara terbaik yang pernah saya lihat sejauh ini. Meskipun seperti yang digunakan Pusat Perangkat Lunak apt, apa pun yang telah diinstal akan terdaftar juga.

Perintahnya adalah:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'
Arronikal
sumber
Saya akan menguji ini ketika saya sampai di rumah dan menerimanya jika bekerja :)
TellMeWhy
Ini bukan! lihat pembaruan: askubuntu.com/a/680405/320386
kos
Gunakan ini, adalah cara yang lebih aman untuk tugas ini: 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.*'akan menyaring hanya apt-getperintah yang berisi installdengan ruang terkemuka dan trailing, sed '1,4d' mungkin tergantung pada instalasi tertentu; di tambang 1,4menghapus persis jumlah entri yang berasal dari Ubiquity, yang ingin Anda hapus. Beri tahu saya jika angkanya sama pada instalasi Anda, dengan begitu setidaknya kita memiliki data dasar: |
kos
@ cs Saya mendapatkan baris tambahan seperti apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericdengan perintah baru. Apakah mereka garis Ubiquity?
Arronical
Tidak, yang sepertinya berasal dari Pembaruan Perangkat Lunak; tidak ada cara untuk membedakan dari perintah yang dijalankan dari pengguna dan perintah yang dijalankan oleh beberapa apt-getfrontend, selain dari Ubiquity yang hanya berjalan sekali (misalnya aptdaemonentri akan ditunjukkan oleh perintah itu juga). Namun taruhan terbaik adalah masih menggunakan perintah itu, yang setidaknya mengecualikan entri Ubiquity.
kos
9

Cukup ketik perintah berikut di terminal Anda untuk melihat semua instal log.

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

Untuk menyederhanakan jawaban @Arronical, Trik rapi yang saya pelajari baru-baru ini adalah Anda dapat menggunakannya zcat -qfuntuk menyimpan file txt dan txt yang di-gzip.

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

menjadi

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

Dari 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
sumber
2

Berikut ini skrip yang hanya mencetak paket tingkat atas yang saat ini diinstal , di mana "paket tingkat atas" didefinisikan sebagai paket ATP yang tidak bergantung pada paket ATP lainnya. Jika program tingkat atas semacam itu diinstal oleh ATP atau manajer paket seperti sinaptik, maka mereka dipilih secara manual oleh pengguna.

#!/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"

Paket-paket dicetak dalam urutan terbalik dengan asumsi bahwa pengguna lebih cenderung menginginkan info yang lebih baru lebih cepat, dan karena programnya lambat.

Aliran program:

  • Program pertama mengumpulkan ke dalam daftar semua paket yang diinstal dengan membaca nama file di bawah /var/lib/dpkg/info/ . Waktu mod file adalah waktu instalasi.
  • Daftar itu diurutkan dalam urutan terbalik.
  • Untuk setiap paket yang diinstal $Pkg, panggilan untuk apt-cache rdepends $Pkg meminta dependensi terbalik dari $Pkg. Jika tidak ada dependensi, maka itu adalah paket tingkat atas dan info paket dicetak: nama tanggal waktu paket

Catatan:

  • Script tergantung pada format output dari apt-cache rdepends $Pkg yang dimaksudkan untuk mata manusia dan dapat berubah di versi apt masa depan.
  • Kode untuk bagian yang mengumpulkan nama file di bawah / var / lib / dpkg / info / berasal dari pos unix.stackexchange ini . Seperti yang ditunjukkan poster 'mikel' , thedpgk file log sejarah tidak dapat diandalkan karena mereka akan diputar setelah mencapai volume tertentu.
  • Halaman manual untuk apt-chache
  • Panggilan apt-cache rdepends ...sangat lambat mungkin karena setiap panggilan dihitung dengan mengulangi semua dependensi. Oleh karena itu skrip di atas dimulai dari instalasi terbaru untuk menawarkan pengguna kepuasan instan sebanyak mungkin.
  • The --installedbendera setelahapt-cache cek bahwa paket dpkg-instal juga apt-instal. Jika pengguna atau perangkat lunak instalasi lain langsung memotong dan menggunakan dpkg secara langsung, itu mungkin. KASUS INI BELUM DIUJI, tetapi saya pikir sesuatu yang nyata akan dicetak dalam standar atau keluaran kesalahan
  • Output tidak termasuk paket yang dipilih secara manual yang kemudian menjadi tergantung oleh paket yang lebih tinggi. Output juga dapat mencakup paket yang diinstal melalui apt oleh perangkat lunak instalasi pihak ketiga lainnya, dan karenanya tidak benar-benar diinstal secara manual. Namun, jika tujuan dari output adalah sebagai dasar untuk mengatur linux yang dipulihkan dari /homedirektori cadangan yang termasuk perangkat lunak pihak ketiga tersebut, maka output ini akan sesuai.
  • Beberapa nama paket menyertakan nomor versi, dan beberapa tidak. Disebutkan hanya untuk membawa kesadaran akan fakta.
Craig Hicks
sumber
1

Jika Anda ingin melihat semua hal yang telah Anda instal dengan menjalankan:

sudo apt-get install [package]

Dan Anda belum mengacaukan riwayat bash, Anda juga tidak ingin melihat riwayat jenis instalasi ini untuk pengguna lain (atau semua pengguna) maka Anda bisa menjalankannya:

history | grep "apt-get install"

Dan itu seharusnya memberi Anda sebagian besar hasil yang relevan.


sumber
1
Akankah saya mendapatkan semua sejarah dengan ini?
TellMeWhy
@DevRobot: Kecuali jika Anda telah mengubah entri secara manual dengan apt-get installdi dalamnya dalam .bash_historyfile, atau menghapus file ini, perintah akan menunjukkan kepada Anda semua contoh ketika Anda telah menjalankan perintah dengan string apt-get installdi dalamnya pada akun pengguna Anda (bahkan jika Anda jalankan perintah sebagai root dan karena itu tidak persis seperti akun pengguna Anda - yang menjalankan perintah dengan sudo).
2
Mungkin ada masalah jika Anda memasukkan lebih dari 200 perintah
Arronical
2
@Arronical proof diharapkan saat mengajukan klaim ;-)
Rinzwind
1
Saya sendiri akan menganggap 500 sebagai default ( gnu.org/software/bash/manual/html_node/… ).
Rinzwind
1

Jika Anda ingin histori apt-get installperintah, gunakan perintah berikut:

grep "apt-get install" .bash_history

Keluaran:

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" 

Untuk informasi lain, rujuk informasi tambahan .

Ada juga informasi instalasi yang lebih rinci di /var/log/apt/dalam history.logdan history.log.X.gzfile dan term.logdan term.log.X.gzfile

Jika Anda ingin riwayat hanya apt-getperintah yang disertakan, maka

history | grep apt-get

Ravan
sumber
apt-mark showmanualmenunjukkan semua paket yang diinstal ketika OS diinstal juga, bukan hanya yang benar-benar diinstal secara manual. Ini cara yang aneh untuk berperilaku!
Arronical
1
Ini tidak selalu memberikan rincian spesifik tentang sejarah. Yang perlu dilihat orang adalah /var/log/apt/history.logfile yang serupa. Anda hanya mendapatkan daftar paket yang dipilih secara manual dan otomatis. Anda tidak memberikan apa pun sejarah kronologis apa yang diinstal, apa yang telah dihapus, apa yang upgrade, dll dari jawaban ini.
Thomas Ward
@Arronical - Di mana halaman manualnya apt -mark showmanual? Saya tidak dapat melihatnya di halaman manual Ubuntu 16.04 LTS untuk apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >.
Craig Hicks
0

Untuk melihat apa yang telah Anda instal dan hapus, instal ulang, dll. Info lebih lanjut tentang perjalanan pemasangan apt-get.

Jawabannya dapat diubah menjadi 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"'
Mike
sumber
0

Perhatikan bahwa beberapa argumen dapat diset sebelum menginstal, seperti yang dilakukan skrip virtualmin saat menginstal: apt-get -y install nama paket.

Jadi jika Anda ingin menangkap semua perintah instal, Anda perlu mengubah permintaan regex.

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