Comment obtenir une liste des paquets disponibles (c'est-à-dire désinstallés) dans Debian?

19

Essentiellement, ce que je recherche, c'est l'équivalent Debian de:

yum list available

pour me montrer quels packages sont disponibles (mais pas actuellement installés). Je préfère quelque chose qui peut être exécuté à partir de la console car il s'agit d'un serveur distant. Merci.

freakwincy
la source

Réponses:

7

grep-dctrlet ses dérivés fournissent un excellent moyen d'interroger les fichiers de cache apt. (Vous pouvez installer ces outils sur Ubuntu avec sudo apt-get install dctrl-tools)

Dans le cas des packages disponibles (mais pas nécessairement installés), vous pouvez utiliser grep-available. Par exemple, pour répertorier tous les packages disponibles:

grep-available  -s Package .

Éditer:

aptitude peut vous montrer une liste des packages non installés en la lançant simplement.

Vous pouvez également obtenir une liste des packages non installés avec aptitudeen utilisant:

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

Notez qu'avec les nouveaux packages multi-arch, vous obtiendrez des packages pour d'autres architectures répertoriées dans ce résultat. Par exemple, j'obtiens:

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

J'ai le bashpackage installé, mais c'est la version amd64, car mon système d'exploitation est installé avec la version amd64 d'Ubuntu Precise. Si vous ne souhaitez pas voir ces packages pour d'autres architectures, vous pouvez exclure les lignes contenant ::

aptitude -F "%p" search "?not(?installed)"  | grep -v ':'
ℝaphink
la source
Merci, mais le problème avec cela est que je devrais parcourir toutes les listes de paquets pour mes dépôts choisis. Une meilleure façon de visualiser le problème serait peut-être la suivante: imaginez X étant l'ensemble universel de tous les paquets dans les référentiels de paquets Debian vers lesquels mon serveur est pointé et Y étant l'ensemble des paquets que j'ai installés sur ledit serveur; ce que je recherche essentiellement, c'est X - Y. Maintenant, je me rends compte que je peux le faire par programmation, mais j'espérais qu'il y aurait une commande relativement simple pour obtenir le même résultat sur un système Debian.
freakwincy
Je viens de voir votre réponse modifiée. C'est exactement ce que je cherchais! Merci.
freakwincy
PS J'aurais voté pour votre réponse mais je n'ai pas encore accumulé suffisamment de points de réputation.
freakwincy
Aucun problème. Bienvenue à SU d'ailleurs ;-)
ℝaphink
16

apt-cache est utilisé pour interroger le cache du package:

pkgnames apt-cache | Trier
chose de recherche apt-cache
recherche apt-cache - chose uniquement pour les noms
user1686
la source
merci mais j'ai peur que ça ne marche pas. J'ai comparé la liste générée par la première commande avec une liste de packages installés précédemment générée que j'ai déduite ainsi: code"dpkg --get-selections | grep '[[: space:]] install $' | awk '{print $ 1}' > installed.txt "et a trouvé des doublons. Les deux autres commandes que vous avez fournies ne fonctionneront pas car je ne recherche pas un package particulier mais plutôt tout package qui n'est pas actuellement installé.
freakwincy
2

Utilisez apt-cacheà cet effet:

apt-cache search package

Puisque apt-cachen'utilise que le cache de packages sur le système, assurez-vous que ce cache est à jour:

apt-get update

Vous pouvez également utiliser l'utilitaire apt-filesi vous connaissez le nom d'un fichier que vous souhaitez rechercher; cela doit cependant être ajouté au système. Par exemple:

apt-file search somefilename

J'ai tendance à utiliser l' apt-cacheune des méthodes suivantes:

apt-cache search package | sort | grep item

(Cela vous montre des choses qui ont un élément dans leur résumé ou leurs noms.)

apt-cache search thing | sort | less

(Cette recherche de chose puis la trie pour une visualisation agréable avec less.)

Mei
la source
2

Mon point de vue est de travailler avec des commandes installées par défaut, et d'éviter les packages supplémentaires s'il n'y a pas de raison particulière.

Dans mon Debian avec GNU bash ces commandes simples

apt list
apt list --all-versions

donne une liste de tout (installé et non installé). Je peux alors limiter les résultats avec grep "installé" ou grep -v "installé". Il peut également être combiné avec un ou plusieurs noms de package (marques génériques acceptées).

Le commutateur "-all-versions" fournit en sortie des lignes distinctes pour chaque version de package (stable, testing, unstable, experimental).

Une simple "liste d'apt" donne une seule version (la plus haute priorité).

George Vasiliou
la source
0

En prenant strictement votre question (vous voulez afficher une liste des packages non installés), essayez d'utiliser

(édité selon les commentaires ci-dessous)

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

Je ne suis pas sûr de la syntaxe exacte, car j'écris ceci sur une boîte Windows et aucun moyen de vérifier. Essayez peut-être de changer ce que vous attendez

PPC
la source
Ceci répertorie les packages installés , non désinstallés .
ℝaphink
@Raphink: Désolé, j'ai modifié le post pour résoudre ce problème
PPC
Pas de problème, mais vous ne répertoriez toujours pas les packages qui ne sont pas installés. En excluant les packages 'ii' (ce qui n'est pas vraiment ce que fait votre expression, vous devriez '^ii'plutôt l' utiliser '[ii]'), vous manquez des packages installés mais non configurés par exemple (comme iFou iHpar exemple).
ℝaphink
@PPC: Hélas, cela ne fonctionne pas non plus car dpkg -l ne répertorie que les packages installés, c'est-à-dire que tous les packages sont précédés de "ii". série de tirets qui est le séparateur d'en-tête de liste. Merci quand même.
freakwincy
@ freakwincy: C'est vrai! Désolé de ne pas l'avoir testé avant de l'envoyer (travail sous Windows) Selon la page de manuel, vous devez utiliser "dpkg -l '*'" pour répertorier tous les packages.
PPC