Bagaimana cara mendaftar paket dependen (membalikkan dependensi)?

201

Untuk meneliti apa yang menyebabkan pemasangan paket yang diberikan, saya ingin mendapatkan daftar paket yang bergantung pada paket itu. Saya tidak dapat menemukan sesuatu yang jelas man dpkg.

l0b0
sumber
5
Jawaban pertanyaan yang lebih tua semuanya berputar aptitude, sesuatu yang belum diinstal secara default selama bertahun-tahun. Pada 2017, semua orang di Ubuntu masih memilikinya apt-cache. Siapa pun yang mengikuti pertanyaan terkait akan tersesat dalam diskusi tentang beberapa program.
Lambart

Jawaban:

252

apt-cache rdepends packagename harus melakukan apa yang Anda inginkan

RobotHumans
sumber
1
Luar biasa! apt-cache rdepends tofrodosmengkonfirmasi kecurigaan bahwa itu diinstal oleh paket lain (usang dos2unix).
l0b0
2
Adapun hari ini (apt versi 0.9.9.1), ada opsi --recurse yang bekerja dengan rdepends.
jarno
43
Jika Anda menambahkan --installed, hasilnya bahkan berguna untuk paket-paket yang dapat digunakan oleh banyak orang lain:apt-cache rdepends --installed packagename
quazgar
2
Ada sintaks yang sedikit berbeda yang membantu saya membedakan antara Recommends, Depends, Suggests, etc. Sintaksnya adalah sudo apt rdepends packagename(Perhatikan itu tidak menggunakan apt-cache tetapi hanya apt)
Vahid Pazirandeh
4
Untuk output, mengapa beberapa paket memiliki bar vertikal (simbol pipa) sebelum mereka?
Vahid Pazirandeh
62

aptitude memiliki cara penanganan yang cukup bagus:

$ aptitude why bash
i   foomatic-filters PreDepends bash (>= 2.05)

Secara default, ini hanya mencantumkan alasan "paling terinstal, terkuat, ketat, terpendek", tetapi Anda dapat menggunakannya aptitude -v whyuntuk membuatnya menampilkan semua yang ditemukannya.

tumbleweed
sumber
4
Sepertinya itu hanya mempertimbangkan paket yang diinstal, tidak semuanya tersedia. Dan itulah yang saya butuhkan.
Tuukka Mustonen
3
Untuk itu Anda ingin reverse-dependsdiubuntu-dev-tools
tumbleweed
Bagaimana dengan debian?
Tuukka Mustonen
1
ubuntu-dev-toolsada di Debian
tumbleweed
Ini bagus. Saya belajar bahwa openssh-server merekomendasikan (dan karena itu diinstal) xauthpada server tanpa kepala, menyeret ratusan dependensi x11 dan puluhan pembaruan tidak berguna sebulan. Itulah masalah dengan manajemen paket otomatis!
BaseZen
18
apt-cache showpkg <pkgname> 

Contoh:

apt-cache showpkg lightdm
qorrow
sumber
sintaksis saat iniapt showpkg <pkgname>
l --marc l
16

Ada lebih dari satu cara, dengan masing-masing metode menunjukkan keluaran yang berbeda.

Untuk tampilan terperinci dari pohon dependensi terbalik penuh;

aptitude install apt-rdepends
apt-rdepends -r bash

Kalau tidak;

apt-cache showpkg bash

Atau daftar ringkas:

apt-cache rdepends bash
papashou
sumber
Apa sebenarnya yang rdependsditampilkan di pohon itu? apt-rdepends php7.0-fpmmenunjukkan sed. sedtidak tergantung pada PHP, apalagi PHP FPM.
Dan Dascalescu
Itu tergantung terbalik, itu berarti bahwa PHP tergantung pada sed.
Erik Berkun-Drevnig
1
Hai teman-teman, sebenarnya "apt-rdepends" adalah singkatan dari "dependensi rekursif". Jika Anda ingin membalikkan ketergantungan rekursif, Anda harus mengetik:apt-rdepends -r yourPackageNameHere
SebMa
Halaman manual apt-cache mengatakan "rdepends menunjukkan daftar setiap dependensi terbalik yang dimiliki paket". Sedangkan apt-rdepends membutuhkan opsi -r untuk melakukan dependensi terbalik, seperti yang dikatakan @SebMa.
NeilG
8

Opsi paling sederhana adalah:

apt rdepends package-name

yang tidak mengharuskan Anda untuk menginstal paket apa pun.

Corrado Topi
sumber
1
Apa ini menambah jawaban yang diterima?
l0b0
2
Jawaban yang diterima tidak ada hubungannya dengan yang ini. Output adalah benar-benar berbeda dan cara yang lebih bermanfaat bagi konsumsi manusia dari apt-cache. Jawabannya menyebutkan bahwa apt-cache tidak diinstal secara default di mana-mana - itu saja seharusnya menjadi petunjuk yang cukup baik mengapa jawaban ini memiliki tujuan. akhirnya, ini sebenarnya jawaban yang saya cari, jadi downvote agak konyol.
stefanct
Salah satu alasan yang sangat signifikan mengapa ini lebih baik daripada versi yang diterima adalah bahwa ia termasuk versi dependensi, tidak seperti apt-cachekeluaran s. Ini persis apa yang saya butuhkan saat ini (men-debug ketidakcocokan glibc 2.28, jadi upvoting)
Per Lundberg
upvote untuk menggunakan apt. pada saat jawaban aslinya, saya tidak yakin solusi tepat ini akan valid, tetapi jika sekarang, itu bagus.
RobotHumans
7

Selain jawaban baik lainnya, APT / APT-GET -smelakukan penghapusan "simulasi" (atau instal).

sudo apt -s remove <pkgname>

Menggunakan -satau --simulatedmenghapus (atau menginstal) paket, biasanya akan mencantumkan dependensi yang terpengaruh. Ini akan menampilkan paket yatim ketika menghapus, atau dependensi yang diperlukan saat menginstal tanpa benar-benar menjalankan installatau remove. Hanya informasi.

bshea
sumber
apt remove -s php7.0-fpmmenunjukkan The following additional packages will be installed: apache2 apache2-bin apache2-data libapache2-mod-php7.0 libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0. Mengapa apache diinstal jika saya menghapus PHP FPM?
Dan Dascalescu
@DanDascalescu Hmm. Mungkin skrip instal / hapus yang buruk untuk apt pkg atau mungkin Anda memiliki beberapa dependensi lain yang menginstal apache2 sebagai dep (artinya server web diperlukan - dan saya percaya apache2 adalah server web default). Bisa jadi beberapa hal. Tidak yakin. Memiliki bau kiriman yang bagus di AskUbuntu jika Anda belum menemukan jawaban.
bshea