Jak mogę sprawdzić, czy pakiet jest zainstalowany (bez uprawnień administratora)?


56

Na naszej uczelni możemy zainstalować prawie każdy pakiet ubuntu, jaki chcemy, ale sami nie jesteśmy administratorami (musimy poprosić o zainstalowanie pakietów).

W przypadku niektórych bibliotek nie zawsze łatwo jest stwierdzić, czy pakiet jest już zainstalowany, czy nie. Czy istnieje prosty sposób / polecenie, aby to sprawdzić?

Odpowiedzi:


56
apt-cache policy <package name>

7
Ważne jest, aby wiedzieć, że obsługuje uzupełnianie tabulatorów w nazwie pakietu. Jest to więc bardzo przydatne, nawet jeśli nie znasz dokładnej nazwy pakietu.
— Javier Rivera,

Szkoda, że ​​wciąż wychodzi ze statusem 0, nawet jeśli pakiet nie jest obecny. dpkg -srobi jednak: askubuntu.com/a/1108801/52975
— Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Z bardziej przyjaznymiapt : apt policy <package name>lub apt show <package name>po więcej informacji.
— Pablo A

18

Zawsze używam tego z wiersza poleceń:

dpkg -l | grep mysql

więc powyższe prosi dpkg o wyświetlenie listy wszystkich zainstalowanych pakietów, a następnie grepuję tylko dla tych, które mają mysql w nazwie.


3
dpkg -l "*mysql*"działa również i nie ukrywa linii objaśniających na wyjściu.
— Philipp Wendler,

dpkg -l "*mysql*"(lub dpkg -l '*mysql*') wprowadza również specjalne formatowanie danych wyjściowych, aby pasowały do ​​każdego pakietu w jednym wierszu okna terminala (grep nie). Ten formularz pozwala wybrać format symboli wieloznacznych (przedrostków lub sufiksów) i określić, czy w ogóle używać symboli wieloznacznych (w porównaniu z grep). Ale grep daje ładne zabarwienie ..))
— vstepaniuk

7

Jeszcze jeden wariant, tym razem wykorzystujący aptitude:

aptitude show <package>

Działa tu także uzupełnianie kart.


6

Możesz użyć dselect. Zapewnia dostęp tylko do odczytu.

Ponadto, dpkg -s <package name>zapewnia wiele szczegółów związanych z pakietem. Na przykład"

userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games

Jest to również dostępne jako sprawiedliwe dpkg -s. I odwrotnie, dpkg-query -ldziała tak samo dobrze dpkg -llubdpkg --list
— belacqua

4

Możesz użyć dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ w skryptach, ponieważ zwraca kod wyjścia 1, jeśli <package>nie jest zainstalowany, i 0, jeśli <package>jest zainstalowany.


4
Uważaj : jeśli dpkg -szwróci 0, nie musi to oznaczać, że pakiet jest w pełni / poprawnie zainstalowany. dpkg -szwraca również, 0jeśli pakiet jest w stanie half-configuredlub jest w config-filesstanie (i chyba też half-installed, ale nie sprawdziłem tego). Zobacz [stronę man dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ), aby dowiedzieć się więcej na temat „niekompletnych” stanów.
— Ignitor,

1
@Ignitor, dobry punkt. Moja odpowiedź była zła. Paczkę można nawet usunąć, ale nie można jej wyczyścić. Myślę więc, że musisz sprawdzić dane wyjściowe, aby sprawdzić, czy pakiet jest zainstalowany, czy nie.
— jarno

2
Zredagowałem odpowiedź. Teraz opiera się na danych wyjściowych dpkg-query. Nie wiem, jak przenośne jest to rozwiązanie; na przykład, czy tekst może być wyświetlany w innym języku w jakimś systemie?
— jarno

2

Prostsze rozwiązanie:

Teraz jest apt listpolecenie, które wyświetla listę zainstalowanych pakietów. Możesz także wyszukać konkretny pakiet za pomocą

apt list <package>

Zobacz man aptwięcej informacji.


1
I apt showpo więcej szczegółów
— wjandrea

0

dpkg -s programowe użycie

Podoba mi się, dpkg -sgdy kończy pracę ze statusem, 1jeśli którykolwiek z pakietów nie jest zainstalowany, co ułatwia automatyzację:

pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
  sudo apt-get install $pkgs
fi

Zobacz też:

Testowane na Ubuntu 18.10.


0

Przykład użycia określonej wartości jako var w skryptach powłoki (np. test.sh)

#!/bin/sh
PACKAGE="${1}"
INSTALLED=$(dpkg -l | grep ${PACKAGE} >/dev/null && echo "yes" || echo "no")

echo "${PACKAGE} is installed ... ${INSTALLED}"

Ustaw go jako wykonywalny i zacznij od:

test.sh openssh-server

Lub rób co chcesz w swoich skryptach


0

Musisz sprawdzić status wydrukowany przez dpkg -l, na przykład:

$ dpkg -l firefox-esr vim winff
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                 Version                 Architecture            Description
+++-====================================-=======================-=======================-=============================================================================
hi  firefox-esr                          52.9.0esr+build2-0ubunt amd64                   Safe and easy web browser from Mozilla
ii  vim                                  2:8.1.1198-0york0~14.04 amd64                   Vi IMproved - enhanced vi editor
rc  winff                                1.5.3-3                 all                     graphical video and audio batch converter using ffmpeg or avconv

Tutaj zarówno vimi firefox-esrsą zainstalowane, więc można wpisać:

$ dpkg -l firefox-esr | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is installed.
$ dpkg -l vim | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is installed.
$ dpkg -l winff | grep -q ^.i && echo This package is installed. || echo This package is NOT installed.
This package is NOT installed.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.