Czy mogę zobaczyć, dlaczego pakiet jest zainstalowany?

112

Czy w przypadku konkretnego pakietu mogę dowiedzieć się, dlaczego został zainstalowany?

Czy mogę zobaczyć, czy jest instalowany ręcznie, czy też jest instalowany jako zależność od innego pakietu? A może jest zainstalowany jako część dystrybucji?

Peter Smit
źródło
Jest to związane z (częścią) tego pytania . Szczegółowe informacje można znaleźć w tej odpowiedzi .
koushik,
Znacznie lepsza odpowiedź na rok 2017 tutaj: askubuntu.com/questions/128524/…
Lambart

Odpowiedzi:

107

Szybkim rozwiązaniem jest wprowadzenie następującego polecenia w terminalu:

aptitude why $package

lub jeśli interesuje Cię tylko ostateczna przyczyna:

aptitude why $package --show-summary

Zamień pakiet $ na nazwę pakietu i może być konieczne wcześniejsze zainstalowanie aptitudepakietu.

Oto wyjście, które możesz uzyskać aptitude why aspell --show-summary

Packages requiring aspell:
  inkscape

Aby uzyskać więcej szczegółów, uruchomiłbyś aptitude why aspell. Przykładowy wynik możesz przeczytać w następujący sposób: „Zainstalowałeś ręcznie inkscape, co wymaga libgtkspell, co wymaga libenchantic2a, co wymaga aspell”. ( iznaczniki wskazują zainstalowane pakiety; Aznaczniki wskazują automatycznie zainstalowane pakiety).

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)

Wreszcie następujące polecenie

apt-cache rdepends --installed $package

wyświetla listę innych pakietów zainstalowanych na twoim komputerze, które zależą bezpośrednio od pakietu $ . Możesz dodać --recurseopcję, aby wyświetlić listę wszystkich pakietów, które zależą bezpośrednio lub pośrednio od niego.

enzotib
źródło
Szkoda, że ​​aptitude nie jest domyślnie uwzględniony :(
badp 10.10.10
1
@badp dziękuję wskazać. To jest zła nowość z indywidualistą, tylko po to, by zaoszczędzić trochę miejsca na obrazie ISO na żywo. Ale jest to bezcenne narzędzie i nie obejdę się bez niego.
enzotib,
15
apt-cache rdepends --recurse $packageprawdopodobnie daje zbyt wiele pakietów. Dodałbym --installedopcję ograniczenia do zainstalowanych pakietów. -iopcja ogranicza się do pakietów poprzedzających i powiązanych. Ale pakiet może zostać zainstalowany, ponieważ jest zalecany przez inny pakiet. Uwzględnienie takich pakietów związanych z rekomendacjami, przypuszczam, że dałoby to właściwe:apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed --recurse $package
jarno
4
nieco krótszy odpowiednik inkantacji @ jarno, zakładając, że jesteś w bash lub innej powłoce z rozszerzeniem nawiasów klamrowych:apt-cache rdepends --no-{suggests,conflicts,breaks,replaces,enhances} --installed --recurse $package
akavel
30

Szybkie i krótkie uzasadnienie, dlaczego dany pakiet został zainstalowany, można znaleźć, wpisując następujące polecenie w terminalu ( Applications -> Accessories -> Terminal):

aptitude why <package-name>

Zastąpić nazwą pakietu jesteś zainteresowany Na przykład, wpisując. aptitude why libgoo-canvas-perlWyprowadza następujące:

i   shutter Suggests libgoo-canvas-perl

Zasadniczo oznacza to, że pakiet shutterw tym przypadku sugeruje libgoo-canvas-perlinstalację. Pisząc aptitude why shutter, mogę przejść do łańcucha zależności.

Istnieje jednak zastrzeżenie. Często zauważam, że uzdolnienia znajdują najbardziej prawdopodobne wytłumaczenie dla sytuacji, która może nie być rzeczywistą sprawą, ale mimo to da ci wskazówkę, by szukać dalej.

W moim przypadku shuttersugeruje libgoo-canvas-perl- jednak sugerowane pakiety nie są domyślnie instalowane automatycznie. Niemniej jednak, wspomina to „doświadczenie”, ponieważ nie mogę edytować zrzutów ekranu, dzięki shutterktórym ręcznie instalowałemligbgoo-canvas-perl

Na koniec możesz dowiedzieć się, czy pakiet został zainstalowany automatycznie (co oznacza, że ​​system zarządzania pakietami decyduje o tym, że jest to obowiązkowe, biorąc pod uwagę zależności i rekomendacje innych pakietów, których zainstalowanie poprosiłeś), uruchamiając następującą komendę.

aptitude show <package-name>

Spowoduje to wyświetlenie wiersza jak poniżej (3. wiersz wyniku):

Automatically installed: no

Aby uzyskać więcej informacji, uruchom info aptitude(w terminalu) lub odwiedź stronę wiki Aptitude

Aby dowiedzieć się, kiedy konkretny pakiet został zainstalowany, istnieją 2 opcje:

  1. Menedżer pakietów Synaptic prowadzi dziennik historii wszystkich działań. Aby wyświetlić plik dziennika historii, wybierz Historia z menu Plik. Możesz wyszukać Install(uwaga na przypadek), aby wyświetlić wszystkie wpisy dotyczące instalacji. Jednak pokaże to tylko pakiety zainstalowane przy użyciu Synaptic
  2. Uruchom następujące polecenie w terminalu. Spowoduje to przeszukanie dzienników dpkg w poszukiwaniu wpisów historii instalacji. Istnieje jednak maksymalny limit ilości przechowywanych dzienników, więc jeśli pakiet, którego szukasz, został zainstalowany dawno temu, możesz go nie znaleźć. Więcej informacji tutaj

    zcat -f /var/log/dpkg.log* | grep "\ install\ " | grep -i <package-name>
    
koushik
źródło
1
Jeśli chcesz dowiedzieć się, kiedy pakiet został zainstalowany lub zaktualizowanyzcat -f /var/log/dpkg.log* | grep -i PackageName | egrep “\ install\ |\ upgrade\ “
Chris Good
@ChrisGood: czy możesz ponownie wpisać swój komentarz bez inteligentnych cytatów, aby można go było skopiować / wkleić?
Dan Dascalescu
1
Dzięki za zwrócenie na to uwagi. Z poprawnymi podwójnymi cudzysłowami: zcat -f /var/log/dpkg.log* | grep -i nazwa_pakietu | egrep "\ install \ | \ upgrade \"
Chris Good
12

Tak, możesz i jest to dość oczywiste polecenie. Zakładając, że masz zainstalowane aptitude, możesz otworzyć typ reklamy okna terminala:

aptitude why package

To powinno dać listę pakietów, które zależą od tego konkretnego pakietu. Jeśli jest to ręcznie zainstalowany pakiet, powie coś w stylu „Nie można znaleźć powodu, aby zainstalować pakiet”.

Daniel Rodrigues
źródło
5

Oto prosty sposób, na którym nie można polegać aptitude, który 10.10 nie jest już domyślnie wysyłany.

Graficznie

Otwórz Synaptic i spróbuj go usunąć.

Jeśli pojawi się okno dialogowe z prośbą o usunięcie innych pakietów, są to pakiety, które (rekurencyjnie) zależą od niego.

Z terminala

apt-get remove package_name_goes_here -s

Ponownie, pakiety, które zostałyby usunięte, to wszystkie te, które (rekurencyjnie) zależą od tego. ( -sParametr mówi, apt-getaby nie usuwać pakietu.)

badp
źródło
2
Jest to ryzykowne rozwiązanie, ponieważ może faktycznie usunąć pakiet i wszystkie zależności, jeśli źle klikną.
ImaginaryRobots,
1
@ImaginaryRobots, to dużo błędnego klikania. (Musisz najpierw kliknąć OK w pierwszym oknie dialogowym, a następnie Zastosuj, a następnie ponownie Ok w oknie dialogowym potwierdzenia.) W przypadku wersji terminalowej istnieje również dodatkowe y/Nżądanie potwierdzenia, jeśli literówka -s. Dodałem jednak ostrzeżenie.
badp
1
-1, ponieważ ta informacja jest dostępna w Synaptic w zakładce zależności, podczas przeglądania właściwości pakietu.
alexanderpas
Niepoprawny @alex - to okno dialogowe nie informuje, czy pakiet jest instalowany ręcznie czy automatycznie. PS: Reset licznika skrzynki odbiorczej, spróbuj mocniej.
badp
@badp nie, ale te informacje można znaleźć za pomocą filtru statusu „Zainstalowano (ręcznie)” na ekranie głównym i można je zobaczyć w menu pakietu po wybraniu pakietu.
alexanderpas