¿Cómo verifico si un paquete está instalado en mi servidor?

174

Recientemente instalé Ubuntu Server edition 13.10 (Saucy Salamander). Pero me he encontrado con un pequeño problema.

Al final de la instalación, le pide varios paquetes adicionales si los quiere o no, como el servidor OpenSSH y el host de la máquina virtual. Esto es lo que estoy viendo:

Ingrese la descripción de la imagen aquí

Ahora, mi problema es que no puedo recordar si he marcado la casilla de verificación "host de máquina virtual". ¿Cómo verifico si mi servidor tiene los paquetes correspondientes?

¿Qué paquetes vienen con el host de la máquina virtual?

D.Zou
fuente
1
$ apt-cache policy <package-name>por ejemplo$ apt-cache policy dillo
Daniel

Respuestas:

230

¿Está buscando saber acerca de todos los comandos dpkg con opciones? Lea el siguiente enlace.

15 comandos dpkg para administrar servidores Linux basados ​​en Debian

Para enumerar todos los paquetes instalados

Aquí "menos" es un simple lector de texto utilizado para desplazarse por la lista de paquetes en un nuevo búfer que se abre en la ventana de terminal existente. La lista no se mezclará con otros comandos de terminal y salida. Presione 'q' para volver al indicador de terminal. Ver "hombre menos" para más información.

dpkg -l | less

Para verificar si un paquete está instalado o no:

dpkg -l {package_name}
dpkg -l vlc

Para verificar si el paquete está instalado o no (por ejemplo, vlc). Si está instalado, inicie el paquete:

dpkg -l | grep vlc

Muestra la ubicación donde está instalado el paquete. La "-S" (S mayúscula) significa "búsqueda"

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

Para usar Grep para buscar:

dpkg -l | grep {keywords}
dpkg -l | grep pdf
Babin Lonston
fuente
1
¿Qué es la diferencia entre esto y -l dpkg-query "nombrepaquete"
heypaleblue
44
No dependa del código de salida de dpkg -l packagename, ya que podría regresar con un código de salida 0 incluso si el paquete no está completamente instalado; consulte: github.com/bitrise-io/bitrise/issues/433
Viktor Benei el
dpkg -l | cut -d " " -f 3 | grep "^vlc"para mostrar todos los nombres de paquetes que comienzan convlc
anatoly techtonik
Para su información, esto no funciona para metapaquetes ya que no se correlacionan directamente con un dpkg. Sin embargo, su respuesta responde a la pregunta como se le preguntó.
mtalexan
34

Utilizar dpkg

Este comando es el administrador de paquetes de Debian.

Puede enumerar todos los paquetes instalados con

dpkg -l

Puede ver los detalles de un paquete específico con

dpkg -p packagename

Y para saber si está instalado, use

dpkg -s packagename | grep Status

Puede aprender qué paquete contiene el software que desea con

apt-cache search name*  

En su caso, debe usar este comando para buscar el nombre del paquete que desea

apt-cache search virtual machine host 
onurbekiroglu
fuente
29

apt -qq list PACKAGE también se puede usar para verificar si el PAQUETE está instalado.

Si está instalado, imprimirá algo como (con [installed]al final de la línea):

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

Si no está instalado, la salida será:

$ apt -qq list awscli
awscli/stable 1.4.2-1 all
Viktor Benei
fuente
1
Puede poner una estrella al final del nombre del paquete para un comodín.
Brannon
3
También puede usar la opción --installed para que ese comando se limite a las coincidencias que realmente están instaladas.
mtalexan
2
¿Qué es la -qqde? Parece funcionar de manera idéntica sin él, y esa opción no está en el manualman apt
Gabriel Staples
3
@GabrielStaples Parece que el apt listcomando aún no está completamente documentado. Algunas pruebas rápidas en 16.04 parecen indicar que -qes un sinónimo de --quietopción. El primero -qevita que se imprima la palabra "Listo". El segundo también evita que se imprima "Listado ...".
Anthony Geoghegan el
14

He encontrado una manera de verificar la instalación del paquete con solo el comando dpkg-query y sin canalizaciones.

Busqué esa solución mientras escribía una tarea para el libro de jugadas ansible.

Entonces, puedes hacer algo como esto:

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

Esta es solo otra forma de hacer la cosa.

DenKoren
fuente
Las tuberías en ansible se pueden utilizar con el shellmódulo.
sjas
4

Estoy escribiendo una nueva respuesta como Tasksel '' Los nombres de tarea no se presenta en dpkgo aptconsultas. Lo que significa que las otras respuestas son incompletas (o incorrectas).

"No recuerdo si he marcado la casilla 'host de máquina virtual' ..."

Compruebe si hay un asterisco por el nombre después de volver a ejecutar sudo tasksel.
(o una ' i ' si se está ejecutando tasksel --list-tasks).

Si no ves esto, entonces probablemente no tiene el 'tasksel meta-paquete ' instalado.


"... ¿Cómo verifico si mi servidor tiene los paquetes correspondientes?"

Si desea averiguar qué está instalado en el metapaquete de tareas del Virtual Machine Host:

tasksel --list-tasks

(en tu caso tasksel --list-tasks | grep virtes suficiente)

Esto proporciona el nombre de la tarea adecuada y una indicación de si está instalado.

En su caso, este nombre de tarea es virt-host.


"¿Qué paquetes vienen con el host de la máquina virtual?"

Desde el último comando, busque el nombre de la tarea taskel.
Esto es necesario para el siguiente comando:

tasksel --task-packages virt-host

Esto enumera el metapaquete de Tasksel individual (denotado por '^' adjunto) que conforman el nombre.
En tu caso lo es virt-host^.

Una vez que encuentre el meta nombre apropiado, puede usar apt:

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

(o apt-cache show ...si apt showno funciona)

Esto mostrará todos los paquetes que componen el metapaquete dado.

Entonces:

 dpkg -l {each individual pkg name listed above}

Esto le indicará si el paquete individual está instalado / desinstalado (indicado por la segunda letra: el estado 'i' significa instalado). Haga esto para todos los paquetes enumerados en la tarea / metapaquete.

Esto debería responder a las preguntas originales.

Nota al margen: /usr/share/tasksel/descs/ubuntu-tasks.desc también contiene descripciones de los metapaquetes de Tasksel. Si usted: grep "virt" /usr/share/tasksel/descs/ubuntu-tasks.descmostrará el nombre apropiado del metapaquete APT. (En tu caso esto es ubuntu-virt-server). También puede usar aptcomandos con este metanombre.

Si desea eliminar paquetes de taskel, esto se mete un poco en la maleza. Consulte https://askubuntu.com/a/88897/169878 o cualquier otra respuesta disponible.

Tenga en cuenta que los paquetes "meta" apt no coinciden con los nombres de los paquetes de Tasksel. Consulte la página de la comunidad de Tasksel para obtener más información.

bshea
fuente
1
Ambas preguntas se responden correctamente. Si votas en contra, da una razón o dime por qué no lo son.
bshea
3

Use taskel ( sudo apt-get install taskselsi aún no lo tiene) y corra tasksel --list-tasks.

taskel imprimirá una lista de las tareas, y habrá una al ilado de cada tarea que esté instalada y una al ulado de cada tarea que no esté instalada.

Si desea instalar la tarea, use tasksel install <task>. El nombre de la tarea que está buscando es virt-host.

Los elementos de selección de software se denominan "tareas".

Blake R
fuente
gracias por decirme el nombre de la tarea, ese fue uno de mis problemas, no estaba seguro de qué paquete buscar.
D.Zou
2

Si alguien está interesado, creé un pequeño script con el que puede instalar automáticamente desde una lista de paquetes o aplicaciones o simplemente verificar si ya están instalados:

#!/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

Espero que ayude a alguien.

Claudio Taccogna
fuente
2

Solución más simple:

Ahora hay un apt listcomando que enumera los paquetes instalados. También puede buscar un paquete específico con

apt list <package>

Ver man aptpara más información. Si no conoce el nombre exacto del paquete, puede usar apt searchseguido de parte de él para ver una lista de paquetes relacionados.

sk8forether
fuente