Чи можу я зрозуміти, чому встановлений пакет?


112

Чи можу я дізнатись про конкретний пакет, чому він встановлений?

Отже, чи можу я бачити, чи це встановлено вручну, або що він встановлений як залежність іншого пакета? Або що він встановлений як частина дистрибутива?


Це пов'язано з (частиною) цього питання, детальну інформацію див. У цій відповіді .
кушик

Набагато краща відповідь за 2017 рік тут: askubuntu.com/questions/128524/…
Ламбарт

Відповіді:


107

Швидке рішення - це ввести таку команду в термінал:

aptitude why $package

або, якщо вас цікавить лише кінцева причина:

aptitude why $package --show-summary

Замініть $ package на ім'я пакета, і вам може знадобитися спочатку встановити aptitudeпакет.

Ось вихід, який ви можете отримати aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

Більш детально ви біжите aptitude why aspell. Ви можете прочитати приклад виводу нижче: "Ви встановили вручну inkscape, що вимагає libgtkspell, що вимагає libenchantic2a, що вимагає aspell". ( iмаркери вказують на встановлені пакети; Aмаркери вказують автоматично встановлені пакети.)

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)

Нарешті, наступна команда

apt-cache rdepends --installed $package

перелічує інші пакунки, встановлені на вашому комп’ютері, що безпосередньо залежать від $ package . Ви можете додати --recurseопцію, щоб перелічити всі пакунки, які безпосередньо або опосередковано залежать від неї.


Шкода придатності за замовчуванням не включається :(
badp

1
@badp, дякую, що наголосили. Це погана новинка в Maverick, тільки щоб заощадити місце на зображенні livecd iso. Але це неоціненний інструмент, і я не обійдуся.
enzotib

15
apt-cache rdepends --recurse $packageймовірно, дає занадто багато пакетів. Я б додав --installedваріант обмеження встановлених пакетів. -iопція обмежується пакетами, пов'язаними з попередньою залежністю та залежністю. Але пакет може бути встановлений, оскільки його рекомендує інший пакет. Щоб включити такі пакунки, пов’язані з рекомендаціями, я думаю, це дасть правильні:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
jarno

4
трохи коротший еквівалент заклику @ jarno, якщо припустити, що ви на баші чи іншій оболонці з розширенням apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
дужок

30

Швидке та коротке міркування про те, чому встановлено певний пакет, можна дізнатись, ввівши в терміналі ( Applications -> Accessories -> Terminal) наступну команду :

aptitude why <package-name>

Замініть назви пакета, який вас цікавить. Наприклад, набравши aptitude why libgoo-canvas-perlрезультати:

i   shutter Suggests libgoo-canvas-perl

Це в основному означає, що пакет shutterв цьому випадку запропонував libgoo-canvas-perlвстановити. Набравши тоді aptitude why shutterя можу піти по ланцюгу залежностей.

Однак є застереження. Я часто помічаю, що здібність знаходить найбільш правдоподібне пояснення ситуації, яка може не бути фактичним випадком, але все-таки дасть вам підказку для подальшого пошуку.

У моєму випадку shutterпропонує libgoo-canvas-perl- однак пропоновані пакети не встановлюються автоматично за замовчуванням. Тим не менш, це пробуджує мою пам'ять про "досвід", оскільки я не можу редагувати скріншоти, за допомогою shutterяких я могла встановити вручнуligbgoo-canvas-perl

Нарешті, ви можете дізнатись, чи встановлено пакет автоматично (тобто рішення системи управління пакунками було визначено як обов'язкове для перегляду залежностей та рекомендацій інших пакетів, які ви попросили встановити), виконавши наступну команду.

aptitude show <package-name>

Це виведе рядок, як показано нижче (3-й рядок виводу):

Automatically installed: no

Для отримання додаткової інформації запустіть info aptitude(у терміналі) або відвідайте сторінку вікі Aptitude

Щоб дізнатися, коли встановлено певний пакет, є два варіанти:

  1. Менеджер пакунків Synaptic веде журнал історії всієї діяльності. Щоб переглянути файл журналу історії, виберіть «Історія» у меню «Файл». Ви можете шукати Install(майте на увазі випадок), щоб перелічити всі записи щодо встановлення. Однак це покаже лише пакети, встановлені за допомогою Synaptic
  2. Виконайте наступну команду в терміналі. Це буде шукати журнали dpkg для записів історії встановлення. Однак існує максимальний обмеження кількості збережених журналів, тому якщо шуканий пакет був встановлений давно, ви його не знайдете. Детальніше тут

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    

1
Якщо ви хочете дізнатися, коли пакет був встановлений або оновленийzcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
Chris Good

@ChrisGood: чи можете ви повторно ввести коментар без розумних цитат, тож це копія / вставка?
Дан Даскалеску

1
Дякуємо, що вказали на це. З правильними подвійними лапками: zcat -f /var/log/dpkg.log* | grep -i PackageName | egrep "\ install \ | \ upgrade \"
Кріс Добрий

12

Так, ви можете, і насправді це досить очевидна команда. Якщо припустимо, що встановлено придатність, ви можете відкрити тип оголошення у вікні терміналу:

aptitude why package

Це повинно дати список пакетів, які залежать від конкретного пакету. Якщо це встановлений пакет вручну, він скаже щось на кшталт "Не вдалося знайти причину для встановлення пакета".


5

Ось простий спосіб, на який не покладаються, на aptitudeякий 10.10 більше не постачається за замовчуванням.

Графічно

Відкрийте Synaptic і спробуйте його видалити.

Якщо з'явиться діалогове вікно з проханням видалити інші пакети, це ті пакунки, які (рекурсивно) залежать від нього.

З терміналу

apt-get remove package_name_goes_here -s

Знову ж таки, пакети, які були б вилучені в результаті, - це всі ті, які (рекурсивно) залежать від цього. ( -sПараметр говорить apt-getфактично не видаляти пакет.)


2
Це ризиковане рішення, оскільки воно може фактично видалити пакет і всі залежності, якщо вони неправильно клацнуть.
ImaginaryRobots

1
@ImaginaryRobots, це багато помилок. (У першому діалоговому вікні потрібно неправильно натиснути кнопку Ок, потім застосувати, потім знову Ок у діалоговому вікні підтвердження.) Для термінальної версії, також слід ввести додатковий y/Nзапит на підтвердження, якщо ви введете помилку -s. Однак я додав попередження.
badp

1
-1 оскільки ця інформація доступна в Synaptic на вкладці залежностей під час перегляду властивостей пакету.
Олександрпас

@alex невірно - це діалогове вікно не вказує, чи встановлено цей пакет вручну чи автоматично. PS: Скидання лічильника вхідних, спробуйте більше.
badp

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