¿Cómo puedo verificar si un paquete está instalado (sin privilegios de superusuario)?

56

En nuestra universidad podemos instalar casi cualquier paquete de ubuntu que queramos, pero nosotros no somos superusuarios (necesitamos solicitar la instalación de paquetes).

Con algunas bibliotecas no siempre es fácil saber si el paquete ya está instalado o no. ¿Hay una manera / comando simple para verificar esto?

Peter Smit
fuente

Respuestas:

56
apt-cache policy <package name>
Oli
fuente
77
Es importante saber que admite la finalización de pestañas en el nombre del paquete. Por lo tanto, es bastante útil incluso cuando no conoce el nombre exacto del paquete.
Javier Rivera el
Es una pena que todavía salga con el estado 0 incluso si el paquete no está presente. dpkg -ssin embargo: askubuntu.com/a/1108801/52975
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Con más amigableapt : apt policy <package name>o apt show <package name>para más información.
Pablo A
18

Siempre uso esto desde la línea de comando:

dpkg -l | grep mysql

así que lo anterior le pide a dpkg que enumere todos los paquetes instalados y luego solo busco aquellos que tienen mysql en el nombre.

Almiar
fuente
3
dpkg -l "*mysql*"También funciona y no oculta las líneas explicativas en la salida.
Philipp Wendler
dpkg -l "*mysql*"(o dpkg -l '*mysql*') también hace un formato especial de la salida para ajustar cada paquete en una línea de la ventana de terminal (grep no). Y este formulario le permite elegir el formato de comodín (prefijos o sufijos) y si desea usar comodines (en comparación con grep). Pero grep da una buena coloración ...))
vstepaniuk
7

Una variante más, usando la aptitud esta vez:

aptitude show <package>

La finalización de tabulación también funciona aquí.

Alexey Nedilko
fuente
6

Puedes usar dselect. Proporciona acceso de solo lectura no su.

Además, dpkg -s <package name>proporciona muchos detalles relacionados con un paquete. P.ej"

userme:~$ dpkg-query -s sl
Package: sl
Status: unknown ok not-installed
Priority: optional
Section: games
Abhinav
fuente
Esto también está disponible como solo dpkg -s. Y, por el contrario, dpkg-query -lfunciona tan bien como dpkg -lodpkg --list
belacqua
4

Puede usar dpkg-query -s <package> 2>/dev/null | grep -q ^"Status: install ok installed"$ en scripts, ya que devuelve el código de salida 1, si <package>no está instalado, y 0 si <package>está instalado.

jarno
fuente
44
Tenga cuidado : si se dpkg -sdevuelve 0, no significa necesariamente que el paquete esté instalado completa / correctamente . dpkg -stambién regresa 0si el paquete está en half-configuredo en config-filesestado (y supongo que también en half-installed, pero no lo comprobé). Consulte [la página de manual de dpkg( manpages.ubuntu.com/manpages/oneiric/man1/dpkg.1.html ) para conocer otros estados "incompletos".
Ignitor
1
@Ignitor, buen punto. Mi respuesta fue incorrecta. El paquete podría incluso ser eliminado, pero no purgado. Así que creo que debe examinar la salida para verificar si el paquete está instalado o no.
jarno
2
Edité la respuesta. Ahora se basa en la salida de dpkg-query. No sé cuán portátil es esta solución; por ejemplo, ¿se puede mostrar el texto en otro idioma en algún sistema?
jarno
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.

sk8forether
fuente
1
Y apt showpara más detalles
wjandrea
0

dpkg -s uso programático

Me gusta dpkg -sya que sale con estado 1si alguno de los paquetes no está instalado, lo que facilita su automatización:

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

Ver también:

Probado en Ubuntu 18.10.

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
0

Ejemplo para usar un valor específico como var en los scripts de shell (por ejemplo test.sh)

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

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

Hazlo ejecutable y comienza con:

test.sh openssh-server

O haz lo que quieras con tus guiones

Lahmizzar
fuente
0

Debe verificar el estado impreso por dpkg -l, por ejemplo:

$ 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

Aquí, tanto vimy firefox-esrestán instalados, por lo tanto, se puede escribir:

$ 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.
SebMa
fuente