Jak sprawdzić, czy pakiet jest zainstalowany na moim serwerze?

174

Niedawno zainstalowałem Ubuntu Server wydanie 13.10 (Saucy Salamander). Ale napotkałem trochę problemu.

Pod koniec instalacji prosi o kilka dodatkowych pakietów, czy chcesz, czy nie, takich jak serwer OpenSSH i host maszyny wirtualnej. Oto na co patrzę:

Wpisz opis zdjęcia tutaj

Mój problem polega na tym, że nie pamiętam, czy zaznaczyłem pole wyboru „host maszyny wirtualnej”. Jak sprawdzić, czy mój serwer ma odpowiednie pakiety?

Jakie pakiety są dostarczane z hostem maszyny wirtualnej?

D.Zou
źródło
1
$ apt-cache policy <package-name>, np.$ apt-cache policy dillo
Daniel

Odpowiedzi:

230

Czy chcesz wiedzieć o wszystkich poleceniach dpkg z opcjami? Przeczytaj poniższy link.

15 komend dpkg do zarządzania serwerami Linux opartymi na Debianie

Aby wyświetlić listę wszystkich zainstalowanych pakietów

Tutaj „mniej” to prosty czytnik tekstu służący do przewijania listy pakietów w nowym buforze, który otwiera się w istniejącym oknie terminala. Lista nie będzie mieszana z innymi poleceniami terminalowymi i danymi wyjściowymi. Naciśnij „q”, aby powrócić do monitu terminalu. Aby uzyskać więcej informacji, zobacz „mniej ludzi”.

dpkg -l | less

Aby sprawdzić, czy pakiet jest zainstalowany, czy nie:

dpkg -l {package_name}
dpkg -l vlc

Aby sprawdzić, czy pakiet jest zainstalowany, czy nie (na przykład vlc). Jeśli jest zainstalowany, uruchom pakiet:

dpkg -l | grep vlc

Pokaż lokalizację, w której pakiet jest zainstalowany. „-S” (duże S) oznacza „szukaj”

sudo dpkg -S {package_name}
sudo dpkg -S skype

Aby użyć Grep do wyszukiwania:

dpkg -l | grep {keywords}
dpkg -l | grep pdf
Babin Lonston
źródło
1
Jaka jest różnica między tym a dpkg-query -l "
nazwa
4
Nie polegaj na kodzie wyjścia dpkg -l packagename, ponieważ może on zwrócić kod wyjścia 0, nawet jeśli pakiet nie jest w pełni zainstalowany - patrz: github.com/bitrise-io/bitrise/issues/433
Viktor Benei
dpkg -l | cut -d " " -f 3 | grep "^vlc"aby wyświetlić wszystkie nazwy pakietów zaczynające się odvlc
anatoly techtonik 14.04.17
Do Twojej wiadomości, nie działa to dla pakietów meta, ponieważ nie korelują bezpośrednio z dpkg. Twoja odpowiedź odpowiada jednak na zadane pytanie.
mtalexan,
34

Posługiwać się dpkg

To polecenie jest menedżerem pakietów debian.

Możesz wyświetlić listę wszystkich zainstalowanych pakietów za pomocą

dpkg -l

Możesz zobaczyć szczegóły dla konkretnego pakietu za pomocą

dpkg -p packagename

Aby dowiedzieć się, czy jest zainstalowany, użyj

dpkg -s packagename | grep Status

Możesz dowiedzieć się, który pakiet zawiera odpowiednie oprogramowanie

apt-cache search name*  

W twoim przypadku należy użyć tego polecenia, aby wyszukać żądaną nazwę pakietu

apt-cache search virtual machine host 
onurbekiroglu
źródło
29

apt -qq list PACKAGE może być również użyty do sprawdzenia, czy PAKIET jest zainstalowany.

Jeśli zainstalowany, wydrukuje coś w stylu (z [installed]na końcu linii):

$ apt -qq list awscli
awscli/stable,now 1.4.2-1 all [installed]

Jeśli nie zostanie zainstalowany, wyjście będzie:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all
Viktor Benei
źródło
1
Możesz umieścić gwiazdkę na końcu nazwy pakietu dla znaku wieloznacznego.
Brannon
3
Możesz także użyć opcji --installed dla tego polecenia, aby ograniczyć do faktycznie zainstalowanych dopasowań.
mtalexan,
2
Co to jest -qqza? Wydaje się, że bez niego działa identycznie, a tej opcji nie ma w instrukcjiman apt
Gabriel Staples
3
@GabrielStaples Wygląda na to, że apt listpolecenie nie jest jeszcze w pełni udokumentowane. Niektóre szybkie testy 16.04 wydają się wskazywać, że -qjest to synonim --quietopcji. Pierwszy -qzapobiega drukowaniu słowa „Gotowe”. Drugi zapobiega także drukowaniu „Listing ...”.
Anthony Geoghegan
14

Znalazłem sposób na sprawdzenie instalacji pakietu za pomocą polecenia dpkg-query bez żadnych potoków.

Szukałem takiego rozwiązania pisząc zadanie dla ansible playbook.

Więc możesz zrobić coś takiego:

/usr/bin/dpkg-query --show --showformat='${db:Status-Status}\n' '<your package name>'

To tylko kolejny sposób na zrobienie tego.

DenKoren
źródło
z shellmodułem można stosować rury w ansible .
sjas
4

Piszę nową odpowiedź jako tasksel „nazwy zadania” nie pojawi się w dpkglub aptzapytań. Oznacza to, że pozostałe odpowiedzi są niekompletne (lub błędne).

„Nie pamiętam, jeśli zaznaczyłem pole wyboru„ host maszyny wirtualnej ”.”

Po ponownym uruchomieniu sprawdź, czy gwiazdka zawiera nazwę sudo tasksel.
(lub „ i ”, jeśli jest uruchomiony tasksel --list-tasks).

Jeśli nie widzisz tego, to prawdopodobnie nie mają „tasksel meta-pakietu ” zainstalowany.


„..Jak mogę sprawdzić, czy mój serwer ma odpowiednie pakiety?”

Jeśli chcesz dowiedzieć się, co jest zainstalowane w meta-pakiecie zadań hosta maszyny wirtualnej:

tasksel --list-tasks

(w twoim przypadku tasksel --list-tasks | grep virtwystarczy)

Daje to prawidłową nazwę zadania i wskazanie, czy jest ono zainstalowane.

W twoim przypadku ta nazwa zadania to virt-host.


„Jakie pakiety są dostarczane z hostem maszyny wirtualnej?”

W ostatnim poleceniu znajdź nazwę zadania tasksel.
Jest to potrzebne do następnego polecenia:

tasksel --task-packages virt-host

Zawiera listę poszczególnych metapakietów Tasksel (oznaczonych dołączonym „^”), które składają się na nazwę.
W twoim przypadku to jest virt-host^.

Po znalezieniu właściwej meta-nazwy możesz użyć apt:

 apt show virt-host^ | grep "Package:"

(lub apt-cache show ...jeśli apt shownie działa.)

Spowoduje to wyświetlenie wszystkich pakietów tworzących dany pakiet meta.

Następnie:

 dpkg -l {each individual pkg name listed above}

Dzięki temu dowiesz się, czy dany pakiet jest zainstalowany / odinstalowany (oznaczony drugą literą: status „i” oznacza zainstalowany). Zrób to dla wszystkich pakietów wymienionych w pakiecie zadań / meta.

To powinno odpowiedzieć na oryginalne pytania.

Uwaga dodatkowa: /usr/share/tasksel/descs/ubuntu-tasks.desc zawiera także opisy meta-pakietów Tasksel. Jeśli: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descpokaże prawidłową nazwę metapakietu APT. (W twoim przypadku to jest ubuntu-virt-server). Możesz również używać aptpoleceń z tą meta-nazwą.

Jeśli chcesz usunąć pakiety zadań, trochę to wpada w chwasty. Proszę sprawdzić https://askubuntu.com/a/88897/169878 lub dowolną liczbę innych odpowiedzi tam.

Pamiętaj, że pakiety „meta” apt nie pasują do nazw pakietów Tasksel. Więcej informacji można znaleźć na stronie społeczności Tasksel .

bshea
źródło
1
Odpowiedzi na oba pytania są prawidłowe. Jeśli głosujesz, podaj powód lub powiedz mi, dlaczego tak nie jest.
bshea
3

Użyj tasksel ( sudo apt-get install taskseljeśli jeszcze go nie masz) i uruchom tasksel --list-tasks.

tasksel wydrukuje listę zadań, a iobok każdego zadania, które jest zainstalowane, będzie uobok każdego zadania, które nie zostanie zainstalowane.

Jeśli chcesz zainstalować zadanie, użyj tasksel install <task>. Nazwa zadania, którego szukasz, to virt-host.

Elementy wyboru oprogramowania nazywane są „zadaniami”.

Blake R.
źródło
dzięki za podanie nazwy zadania, to był jeden z moich problemów, nie byłem pewien, którego pakietu szukać.
D.Zou
2

Jeśli ktoś jest zainteresowany, stworzyłem mały skrypt, za pomocą którego można automatycznie zainstalować z listy pakietów lub aplikacji lub po prostu sprawdzić, czy są już zainstalowane:

#!/bin/bash
apt -qq list YOUR_LIST_GOES_HERE | grep -v "installed" | awk -F/ '{print $1}' > /root/list.txt
packages=$(cat /root/list.txt)
grep -q '[^[:space:]]' < /root/list.txt
CHECK_LIST=$?
if [[ $CHECK_LIST -eq 1 ]]; then
echo "Your packages are already installed"
else
echo "Installing packages"
apt-get  install -y $packages
fi

Mam nadzieję, że to komuś pomaga.

Claudio Taccogna
źródło
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. Jeśli nie znasz dokładnej nazwy pakietu, możesz użyć apt searchczęści, a następnie jej części, aby wyświetlić listę powiązanych pakietów.

sk8forether
źródło