Могу ли я понять, почему установлен пакет?

92

Для конкретного пакета можно узнать, почему он установлен?

Итак, могу ли я увидеть или установить его вручную или установить его как зависимость другого пакета? Или что он установлен как часть дистрибутива?

    
задан Peter Smit 10.10.2010 в 16:08
источник

4 ответа

87

Быстрое решение состоит в том, чтобы ввести следующую команду в терминал:

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 , чтобы отображать все пакеты, которые напрямую или косвенно зависят от него.

    
ответ дан enzotib 10.10.2010 в 16:14
источник
29

Быстрое и короткое рассуждение о том, почему был установлен определенный пакет, можно найти, введя следующую команду в терминале ( 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 , я могу подойти к цепочке зависимостей.

Однако есть оговорка. Я часто замечаю, что aptitude находит наиболее правдоподобное объяснение ситуации, которая может быть не реальным, но, тем не менее, даст вам ключ к дальнейшему поиску.

В моем случае shutter предлагает libgoo-canvas-perl - однако предлагаемые пакеты по умолчанию не устанавливаются автоматически. Тем не менее, это пробегает мою память об «опыте», не имея возможности редактировать скриншоты с помощью shutter , что привело меня вручную установить ligbgoo-canvas-perl

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

aptitude show <package-name>

Здесь будет выводиться строка, как показано ниже (3-я строка вывода):

Automatically installed: no

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

Чтобы узнать , когда установлен определенный пакет, есть 2 варианта:

  1. Менеджер синаптического пакета поддерживает журнал истории всех действий. Чтобы просмотреть файл журнала истории, выберите «История» в меню «Файл». Вы можете найти Install (помните об этом), чтобы перечислить все записи, касающиеся установки. Тем не менее, это будет показывать только пакеты, установленные , используя Synaptic
  2. Выполните следующую команду в терминале. Это приведет к поиску журналов dpkg для записей истории установки. Тем не менее, существует максимальный предел того, сколько из этих журналов сохранено, поэтому, если пакет, который вы ищете, был установлен давно, вы можете его не найти. Подробнее здесь

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    
ответ дан koushik 21.09.2010 в 16:02
11

Да, вы можете, и это довольно очевидная команда, на самом деле. Предполагая, что у вас установлен aptitude, вы можете открыть тип объявления терминального окна:

aptitude why package

Это должно предоставить список пакетов, которые зависят от этого конкретного пакета. Если это установленный вручную пакет, он скажет что-то вроде «Невозможно найти причину для установки пакета».

    
ответ дан Daniel Rodrigues 10.10.2010 в 16:14
2

Вот простой способ, который не полагается на aptitude , который 10.10 больше не отправляет по умолчанию.

  

Примечание

     

Для запуска этих команд необходим root-доступ.

Графически

Откройте Synaptic и попытайтесь удалить его.

Если появится диалоговое окно с просьбой удалить другие пакеты, это пакеты, которые (рекурсивно) зависят от него.

От терминала

apt-get remove package_name_goes_here -s

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

    
ответ дан badp 10.10.2010 в 16:27