¿Cómo obtengo una lista de paquetes disponibles (es decir, desinstalados) en Debian?


19

Esencialmente, lo que estoy buscando es el equivalente de Debian de:

yum list available

para mostrarme qué paquetes están disponibles (aunque actualmente no están instalados). Prefiero algo que se pueda ejecutar desde la consola, ya que está en un servidor remoto. Gracias.

Respuestas:


7

grep-dctrly sus derivados proporcionan una excelente manera de consultar los archivos de caché apt. (Puede instalar estas herramientas en ubuntu con sudo apt-get install dctrl-tools)

En el caso de los paquetes disponibles (pero no necesariamente instalados), puede usarlos grep-available. Por ejemplo, para enumerar todos los paquetes disponibles:

grep-available  -s Package .

Editar:

aptitude puede mostrarle una lista de paquetes no instalados con solo iniciarlo.

También puede obtener una lista de paquetes no instalados con aptitude:

aptitude -F "%p" search "?not(?installed)"

Tenga en cuenta que con los nuevos paquetes de múltiples arcos, obtendrá paquetes para otras arquitecturas enumeradas en este resultado. Por ejemplo, obtengo:

aptitude -F "%p" search "?not(?installed)"  | grep "^bash:"
bash:i386

Tengo el bashpaquete instalado, pero es la versión amd64, ya que mi sistema operativo está instalado con la versión amd64 de Ubuntu Precise. Si no desea ver estos paquetes para otras arquitecturas, puede excluir líneas que contengan ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'

Gracias, pero el problema con esto es que tendría que rastrear todas las listas de paquetes de mis repositorios elegidos. Quizás una mejor manera de visualizar el problema sería así: imagine que X es el conjunto universal de todos los paquetes en los repositorios de paquetes de Debian a los que apunta mi servidor e Y es el conjunto de paquetes que he instalado en dicho servidor; lo que, en esencia, busco es X - Y. Ahora, me doy cuenta de que puedo hacer esto mediante programación, pero esperaba que hubiera un comando relativamente simple para lograr el mismo resultado en un sistema Debian.
freakwincy

Acabo de ver tu respuesta editada. ¡Es exactamente lo que estaba buscando! Gracias.
freakwincy

PD: Hubiera votado tu respuesta pero aún no he acumulado suficientes puntos de reputación.
freakwincy

No hay problema. Bienvenido a SU por cierto ;-)
phaphink

16

apt-cache se usa para consultar el paquete de caché:

apt-cache pkgnames | ordenar
cosa de búsqueda de apt-cache
apt-cache search - cosa solo de nombres

gracias pero me temo que eso no funciona. Comparé la lista generada por el primer comando con una lista previamente generada de paquetes instalados que obtuve así: code"dpkg --get-selections | grep '[[: space:]] install $' | awk '{print $ 1}' > instaló.txt "y encontró duplicados. Los otros dos comandos que proporcionó no funcionarán porque no estoy buscando un paquete en particular, sino más bien cualquier paquete que no esté instalado actualmente.
freakwincy

2

Use apt-cachepara este propósito:

apt-cache search package

Como apt-cachesolo usa el caché de paquetes en el sistema, asegúrese de que este caché esté actualizado:

apt-get update

También puede usar la utilidad apt-filesi conoce el nombre de un archivo que desea buscar; Sin embargo, esto debe agregarse al sistema. Por ejemplo:

apt-file search somefilename

Tiendo a usar apt-cachede una de las siguientes maneras:

apt-cache search package | sort | grep item

(Esto le muestra cosas que tienen elementos realmente en su resumen o nombres).

apt-cache search thing | sort | less

(Esto busca algo y luego lo ordena para una visualización agradable less).


2

Mi punto de vista es trabajar con comandos instalados de manera predeterminada y evitar paquetes adicionales si no hay una razón en particular.

En mi Debian con GNU bash, estos simples comandos

apt list
apt list --all-versions

da una lista de todo (instalado y no instalado). Entonces puedo limitar los resultados con grep "instalado" o grep -v "instalado". También se puede combinar con uno o más nombres de paquetes (se aceptan marcas comodín).

El interruptor "-todas las versiones" proporciona en la salida líneas separadas para cada versión del paquete (estable, prueba, inestable, experimental).

La simple "lista de apt" ofrece solo una versión (la más alta prioridad).


0

Tomando su pregunta estrictamente (desea mostrar una lista de paquetes no instalados), intente usar

(editado de acuerdo con los comentarios a continuación)

# apt-get update
# dpkg -l '*' | egrep --invert-match '^i'

Sin embargo, no estoy seguro de la sintaxis exacta, ya que estoy escribiendo esto en un cuadro de Windows y no hay forma de verificarlo. Tal vez intente cambiar lo que quiere


Esto enumera los paquetes instalados , no desinstalados .
phaphink

@Raphink: Lo siento, edité la publicación para arreglar esto
PPC

No hay problema, pero aún no está enumerando paquetes que no están instalados. Al excluir los paquetes 'ii' (que en realidad no es realmente lo que hace su expresión, debe usar en '^ii'lugar de '[ii]'), le faltan paquetes que están instalados pero no configurados, por ejemplo (como iFo iHpor ejemplo).
phaphink

@PPC: Por desgracia, esto tampoco funciona ya que dpkg -l solo enumera los paquetes instalados, es decir, todos los paquetes están precedidos por "ii", por lo que canalizar los resultados a grep usando las banderas --invert-match o -v solo produce un serie de guiones que es el separador de encabezado de lista. Gracias de cualquier manera.
freakwincy

@ freakwincy: ¡Correcto! Perdón por no probarlo antes de enviarlo (trabajando en Windows). De acuerdo con la página de manual, debe usar "dpkg -l '*'" para enumerar todos los paquetes.
PPC
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.