Dapatkah saya melihat mengapa suatu paket diinstal?

112

Untuk paket tertentu, dapatkah saya mencari tahu mengapa itu diinstal?

Jadi, dapatkah saya melihat atau diinstal secara manual, atau diinstal sebagai dependensi dari paket lain? Atau itu diinstal sebagai bagian dari distro?

Peter Smit
sumber
Ini terkait dengan (bagian dari) pertanyaan ini , lihat jawaban ini untuk perincian.
koushik
Jawaban yang jauh lebih baik untuk 2017 di sini: askubuntu.com/questions/128524/...
Lambart

Jawaban:

107

Solusi cepat adalah memasukkan perintah berikut di terminal:

aptitude why $package

atau, jika Anda hanya tertarik pada penyebab utama:

aptitude why $package --show-summary

Ganti $ paket dengan nama paket, dan Anda mungkin perlu menginstal aptitudepaket terlebih dahulu.

Ini adalah output yang mungkin Anda dapatkan aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

Untuk lebih detail Anda akan lari aptitude why aspell. Anda dapat membaca contoh output, di bawah ini, sebagai berikut: "Anda menginstal secara manual inkscape, yang membutuhkan libgtkspell, yang membutuhkan libenchantic2a, yang membutuhkan aspell". ( imarker menunjukkan paket yang diinstal; Amarker menunjukkan paket yang diinstal secara otomatis.)

i   inkscape       Depends libgtkspell0 (>= 2.0.10)                                                                    
i A libgtkspell0   Depends libenchant1c2a (>= 1.6.0)                                                                   
i A libenchant1c2a Depends aspell-en | myspell-dictionary | aspell-dictionary | ispell-dictionary | hunspell-dictionary
i A aspell-en      Depends aspell (>= 0.60.3-2)

Akhirnya, perintah berikut

apt-cache rdepends --installed $package

daftar paket-paket lain yang diinstal pada komputer Anda yang bergantung langsung pada $ package . Anda dapat menambahkan --recurseopsi untuk mendaftar semua paket yang bergantung secara langsung atau tidak langsung padanya.

enzotib
sumber
Bakat sayang
1
@badp terima kasih untuk menunjukkan. Ini adalah hal baru yang buruk dengan maverick, hanya untuk menghemat ruang pada gambar iso livecd. Tapi itu adalah alat yang sangat berharga, dan aku tidak akan pergi tanpanya.
enzotib
15
apt-cache rdepends --recurse $packagemungkin memberikan terlalu banyak paket. Saya akan menambahkan --installedopsi untuk membatasi paket yang diinstal. -iopsi membatasi paket yang terkait dengan pra-ketergantungan dan ketergantungan. Tetapi suatu paket dapat diinstal karena direkomendasikan oleh paket lain. Untuk memasukkan paket-paket terkait rekomendasi tersebut, saya kira ini akan memberikan yang tepat:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
jarno
4
sedikit lebih pendek dari mantra @ jarno, dengan asumsi Anda menggunakan bash atau shell lain dengan ekspansi brace:apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
aliasvel
30

Alasan cepat dan pendek tentang mengapa paket tertentu diinstal dapat ditemukan dengan mengetikkan perintah berikut di terminal ( Applications -> Accessories -> Terminal):

aptitude why <package-name>

Ganti dengan nama paket yang Anda minati. Misalnya, ketikkan aptitude why libgoo-canvas-perlkeluaran berikut ini:

i   shutter Suggests libgoo-canvas-perl

Ini pada dasarnya berarti bahwa paket shutterdalam hal ini telah menyarankan libgoo-canvas-perluntuk diinstal. Saat mengetik aptitude why shuttersaya bisa berjalan di rantai ketergantungan.

Namun, ada peringatan. Saya sering melihat bakat menemukan penjelasan yang paling masuk akal untuk situasi yang mungkin bukan kasus yang sebenarnya, tetapi tetap akan memberi Anda petunjuk untuk melihat lebih jauh.

Dalam kasus saya, shuttersaran libgoo-canvas-perl- namun, paket yang disarankan tidak secara otomatis diinstal secara default. Namun demikian, memori saya berlari dari "pengalaman" dengan tidak dapat mengedit screenshot shutteryang membuat saya menginstal secara manualligbgoo-canvas-perl

Terakhir, Anda dapat mengetahui apakah suatu paket diinstal secara otomatis (artinya diputuskan oleh sistem manajemen paket sebagai keharusan untuk melihat dependensi dan rekomendasi dari paket lain yang Anda minta untuk diinstal) dengan menjalankan perintah berikut.

aptitude show <package-name>

Ini akan menampilkan baris seperti di bawah ini (baris ketiga dari output):

Automatically installed: no

Untuk info lebih lanjut jalankan info aptitude(di terminal) atau kunjungi halaman wiki Aptitude

Untuk mengetahui kapan paket tertentu diinstal, ada 2 opsi:

  1. Manajer paket Synaptic menyimpan log riwayat semua aktivitas. Untuk melihat file log riwayat, pilih Sejarah dari menu File. Anda dapat mencari Install(ingat kasusnya) untuk mendaftar semua entri mengenai instalasi. Namun, ini hanya akan menunjukkan paket yang diinstal menggunakan Synaptic
  2. Jalankan perintah berikut di terminal. Ini akan mencari log dpkg untuk entri riwayat instalasi. Namun, ada batas maksimum berapa banyak log ini dipertahankan, jadi jika paket yang Anda cari sudah diinstal sejak lama, Anda mungkin tidak menemukannya. Lebih detail di sini

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    
koushik
sumber
1
Jika Anda ingin mencari tahu kapan paket diinstal atau ditingkatkanzcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
Chris Good
@ChrisGood: bisakah Anda memasukkan kembali komentar Anda tanpa tanda kutip yang cerdas, sehingga ini bisa disalin?
Dan Dascalescu
1
Terima kasih telah menunjukkannya. Dengan tanda kutip ganda yang benar: zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep "\ install \ | \ upgrade \"
Chris Good
12

Ya, Anda bisa, dan itu perintah yang cukup jelas. Dengan asumsi Anda telah menginstal aptitude, Anda dapat membuka jenis iklan Terminal Window:

aptitude why package

Itu harus memberikan daftar paket yang tergantung pada paket spesifik itu. Jika ini adalah paket yang diinstal secara manual, itu akan mengatakan sesuatu seperti "Tidak mungkin menemukan alasan untuk menginstal paket".

Daniel Rodrigues
sumber
5

Inilah cara sederhana yang tidak bergantung aptitude, yang 10.10 tidak kirimkan secara default lagi.

Secara grafis

Buka Synaptic dan coba hapus.

Jika sebuah dialog muncul meminta Anda untuk menghapus paket lain, itu adalah paket yang (secara rekursif) bergantung padanya.

Dari terminal

apt-get remove package_name_goes_here -s

Sekali lagi, paket-paket yang akan dihapus sebagai hasilnya adalah semua yang (secara rekursif) bergantung padanya. ( -sParameter mengatakan apt-gettidak benar-benar menghapus paket.)

badp
sumber
2
Ini adalah solusi berisiko karena sebenarnya bisa menghapus paket dan semua dependensi jika mereka salah klik.
ImaginaryRobots
1
@ImaginaryRobots, itu banyak kesalahan klasifikasi. (Anda harus salah klik OK pada dialog pertama, lalu Terapkan, lalu lagi OK pada dialog konfirmasi.) Untuk versi terminal, ada juga y/Npermintaan konfirmasi tambahan jika Anda salah ketik -s. Saya menambahkan peringatan.
badp
1
-1 karena informasi ini tersedia dalam Synaptic di bawah tab dependensi, ketika melihat properti suatu paket.
alexanderpas
@ alex salah - dialog itu tidak memberi tahu Anda apakah paket itu diinstal secara manual atau otomatis. PS: Reset penghitung kotak masuk, cobalah lebih keras.
badp
@tolak tidak, tetapi info itu dapat ditemukan dengan filter status "Terpasang (manual)" di layar utama, dan dapat dilihat di menu paket saat Anda memilih paket.
alexanderpas