Як я можу перевірити список залежностей для боргового пакету


93

Як я можу перевірити список залежностей для боргового пакету. У мене працює Ubuntu 11.10, і я створив резервну копію всіх деб-пакетів var/cache/apt/archives. Я хочу відформатувати свій ПК та перевстановити лише вибрані програми. Також як я можу отримати список встановлених пакетів та залежностей.


Для вашого другого питання дивіться askubuntu.com/questions/17823/…
htorque

Повний список встановлених пакетівdpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Відповіді:


72

Крім dpkgметоду, ви можете перевірити залежності пакетів у сховищі:

apt-cache depends package-name

EDIT Оновлено за рекомендацією @ Tino. @ Коментар Тіграна більше не застосовується.


3
Примітка. Це працює лише в тому випадку, коли пакет уже встановлений.
Тигран Салуєв

@TigranSaluev Зауважте, що dpkg -I packageпрацює лише для встановлених пакетів. apt-cacheпрацює для всіх пакетів, які відомі після вас apt-get update.
Тіно

1
apt-cache depends packageУ цьому випадку це кращий спосіб, оскільки showpkgвін не говорить про те, чи залежність є рекомендацією, конфліктом тощо, тому це трохи спантеличено. Про сценарій, який dependsпоєднується з showpkgдив. Unix.stackexchange.com/a/362866/23450
Tino

100

Це покаже вам всю інформацію про пакет:

dpkg -I package.deb

Це більше не працює на 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.
Крейг С. Андерсон

@ CraigS.Anderson Працює тут 14.04, і в моєму випадку це працює ідеально. Повинна бути прийнята відповідь ІМХО.
magic_al

Не забудьте поставити /var/cache/apt/archives/перед назвою пакета і використовувати завершення вкладки, щоб знайти повне ім'я пакета з версією, наприклад dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Джейсон Р. Кумбс

1
Я не бачу жодної інформації про залежність
Нік

Ви можете додати, що пакет можна отримати без (повторної) його установки (що, мабуть, є популярним випадком використання) sudo apt-get install --reinstall --download-only [package name].
Карл Ріхтер

2

apt-cache depends [Package-Name]також працюватиме. Хоча, якщо ви надсилаєте .debпакет поза своїм списком джерел, такі речі, як-от, apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]можуть відображати застарілу інформацію або не синхронізуватись із фактично встановленим пакетом, отже dpkg -I [Package-Name], найкраще в цьому випадку працюватиме.


2

Для 14.04 та пізніших версій:

dpkgбільше не має, -Iі вам доведеться використовувати dpkg-debдля показу інформації про пакет, включаючи залежності:

dpkg-deb -I package.deb

1
Привіт Fabby, dpkg наразі не має опції -I. Тестували на Ubuntu 12.04 та 16.04. Ви повинні використовувати замість dpkg-deb.
Rup Narayan

Коментар відкликаний; відповідь уточнена та підтверджена
Fabby

0

Ось деякі неохайні, і, мабуть, не дуже охоплюючі післяобробки, які ви можете зробити для dpkg -Iвиведення, щоб отримати елементи залежності як список:

Конденсований для комп’ютерів

# 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(',')])"
#

Розширено для людей:

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(',')
    ])
"

Це відлучить від пакунків, які залежать від 'foo.deb' і ще не будуть встановлені: dpkg -I foo.deb | для i в $ (awk -F ',' '/ Залежить: / {gsub (/: /, ","); для (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); робити dpkg -s $ i &> / dev / null || ехо $ i; зроблено | tr '\ n' ''
Грегорі Берд

@GregoryBurd, не соромтесь редагувати свою відповідь / psot все, що вам подобається, я опублікував це як вікі спільноти з цієї причини ^ u ^
ThorSummoner

Коли я запускаю цю команду на еластичному дослідженні, вона видає libc6\nadduser\n Installed-Size\n. Тобто, схоже, це збігається більше, ніж просто лінія залежних.
Джейсон Р. Кумбс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.