Bagaimana saya bisa memeriksa daftar ketergantungan untuk paket deb


94

Bagaimana saya bisa memeriksa daftar ketergantungan untuk paket deb. Saya menjalankan Ubuntu 11.10 dan saya telah mencadangkan semua paket deb dari var/cache/apt/archives. Saya ingin memformat pc saya dan menginstal ulang aplikasi yang dipilih saja. Juga bagaimana saya bisa mendapatkan daftar paket dan dependensi yang diinstal.


Untuk pertanyaan kedua Anda, lihat askubuntu.com/questions/17823/…
htorque

Untuk daftar lengkap paket yang diinstal, gunakandpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Jawaban:


73

Selain dpkgmetode ini, Anda dapat memeriksa dependensi paket di repositori:

apt-cache depends package-name

EDIT Diperbarui dengan rekomendasi @ Tino. Komentar @ Tigran tidak lagi berlaku.


3
Catatan: ini hanya berfungsi jika paket sudah diinstal.
Tigran Saluev

@TigranSaluev Perhatikan bahwa dpkg -I packagehanya berfungsi untuk paket yang diinstal. apt-cacheberfungsi untuk semua paket yang dikenal setelah Anda selesai apt-get update.
Tino

1
apt-cache depends packageadalah cara yang lebih baik, dalam hal ini, karena showpkgtidak memberi tahu jika ketergantungan adalah rekomendasi, konflik dll, sehingga agak membingungkan. Untuk skrip yang dependsdikombinasikan dengan showpkglihat unix.stackexchange.com/a/362866/23450
Tino

100

Ini akan menunjukkan kepada Anda semua informasi tentang paket:

dpkg -I package.deb

Itu tidak lagi berfungsi di Ubuntu 14.04:dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <info@splunk.com> Architecture: amd64 Description: Splunk The platform for machine data.
Craig S. Anderson

@ CraigS.Anderson Menjalankan 14,04 di sini dan berfungsi dengan sempurna dalam kasus saya. Seharusnya jawaban yang diterima IMHO.
magic_al

Jangan lupa untuk meletakkan /var/cache/apt/archives/sebelum nama paket dan menggunakan tab completion untuk menemukan nama paket lengkap dengan versi, misalnya dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs

1
Saya tidak melihat informasi ketergantungan apa pun
Nick

Anda dapat menambahkan bahwa paket tersebut dapat diperoleh tanpa menginstalnya kembali (yang mungkin merupakan kasus penggunaan populer) dengan sudo apt-get install --reinstall --download-only [package name].
Karl Richter

2

apt-cache depends [Package-Name]akan bekerja juga. Meskipun jika Anda sumber .debpaket dari luar daftar sumber Anda, hal-hal seperti apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]mungkin menunjukkan info yang sudah ketinggalan zaman atau mungkin tidak disinkronkan dengan paket yang diinstal maka itu dpkg -I [Package-Name]akan bekerja paling baik dalam hal ini.


2

Untuk 14,04 dan yang lebih baru:

dpkgtidak memiliki -Ilagi dan Anda harus menggunakan dpkg-debuntuk menampilkan informasi paket termasuk dependensi:

dpkg-deb -I package.deb

1
Halo Fabby, dpkg tidak memiliki opsi -Saya saat ini. Diuji pada Ubuntu 12,04 dan 16,04. Anda harus menggunakan dpkg-deb sebagai gantinya.
Rup Narayan

Komentar ditarik kembali; Jawabannya diklarifikasi dan ditingkatkan
Fabby

0

Berikut adalah beberapa ceroboh, dan mungkin tidak terlalu mencakup post-processing yang dapat Anda lakukan untuk dpkg -Imenghasilkan item dependensi sebagai daftar:

Terkondensasi untuk komputer

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

Diperluas untuk manusia:

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"

Ini akan mengulangi paket-paket yang tergantung pada 'foo.deb' dan belum diinstal: dpkg -I foo.deb | untuk i in $ (awk -F ',' '/ Depends: / {gsub (/: /, ","); for (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); lakukan dpkg -s $ i &> / dev / null || echo $ i; selesai | tr '\ n' ''
Gregory Burd

@GregoryBurd, Silakan mengedit jawaban saya / psot semua yang saya suka, saya mempostingnya sebagai komunitas wiki karena alasan ini ^ u ^
ThorSummoner

Ketika saya menjalankan perintah ini di elasticsearch, itu memancarkan libc6\nadduser\n Installed-Size\n. Artinya, tampaknya lebih cocok dari sekadar garis Depends.
Jason R. Coombs

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.