Comment lister tous les programmes installés?

50

Comment répertorier les programmes fournis avec ma distribution et ceux que j'ai installés manuellement?

InquilineKea
la source
8
Quelle distribution? Chaque distribution a différents outils d'installation.
Matteo
Hm, je suis intéressé par Red Hat, Ubuntu et cygwin. Existe-t-il un moyen sans distribution de lister les programmes avec un argument en ligne de commande?
InquilineKea
1
Non, il n'y en a pas, car les gestionnaires de paquets diffèrent.
Chris Down

Réponses:

73

Cela dépend de votre distribution.

  • Distributions basées sur les aptitudes (Ubuntu, Debian, etc.): dpkg -l
  • Distributions basées sur RPM (Fedora, RHEL, etc.): rpm -qa
  • Distributions basées sur pkg * (OpenBSD, FreeBSD, etc.): pkg_info
  • Distributions basées sur Portage (Gentoo, etc.): equery listoueix -I
  • Distributions basées sur pacman (Arch Linux, etc.): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Tous ceux-ci listeront les paquets plutôt que les programmes . Si vous voulez vraiment lister les programmes, vous voudrez probablement lister les exécutables dans votre $PATH, ce qui peut être fait comme ça, en utilisant bash compgen:

compgen -c

Ou, si vous n'avez pas compgen:

#!/bin/bash
IFS=: read -ra dirs_in_path <<< "$PATH"

for dir in "${dirs_in_path[@]}"; do
    for file in "$dir"/*; do
        [[ -x $file && -f $file ]] && printf '%s\n' "${file##*/}"
    done
done
Chris Down
la source
4
Et pour les systèmes basés sur RPM (Red Hat, SuSE, CentOS, etc.):rpm -qa
nos
1
Debian / Ubuntu est dkpg -l | grep ^ii.
Rolf
1
@Rolf, vous voulez dire dPKg
Harkály Gergő
1
Hrmph ... Les BSD ne sont pas des distributions Linux ...
Kusalananda
1
@ Kusalananda Hein? À aucun moment dans cette réponse, il n'est indiqué que les BSD sont des distributions Linux, mais ce sont des distributions . C'est littéralement ce que signifie le "D" dans BSD.
Chris Down
13

Répondant à la deuxième partie de la question (rien à ajouter à la réponse de Chris pour la première partie) :

Il n’existe généralement aucun moyen de répertorier les programmes installés manuellement et leurs composants. Ceci n'est enregistré nulle part si vous n'avez pas utilisé de gestionnaire de paquets. Tout ce que vous pouvez faire est de trouver les fichiers binaires dans des emplacements standard (comme Chris l'a suggéré) et, de la même manière, de deviner d' où proviennent certaines bibliothèques, certaines pages de manuel, etc. C'est pourquoi, chaque fois que cela est possible, vous devez toujours installer des programmes à l'aide de votre gestionnaire de paquets .

rozcietrzewiacz
la source
3

Les programmes doivent être accessibles via le PATH, il suffit donc de tout lister dans le chemin:

ls ${PATH//:/ }

Attendez-vous à un résultat d'environ 3k à 4k programmes.

Pour exclure une minorité probable de faux positifs, vous pouvez affiner l'approche:

for d in ${PATH//:/ } ; do 
    for f in $d/* ; do  
        test -x $f && test -f $f && echo $f
    done
done

Cela n'a pas fait de différence pour moi.

Utilisateur inconnu
la source
2
Notez que cela va aussi potentiellement lister divers non-programmes (sous-répertoires de répertoires $PATH, etc.).
Chris Down
1
J'ai ajouté un test, mais cela n'a fait aucune différence pour moi (quelle est l'utilité d'un répertoire dans un répertoire du chemin, qui n'est pas lui-même dans le chemin?). Mais dans les cas où vous comptez sur l'exactitude, cela pourrait être utile.
utilisateur inconnu
1
impressionnant! Je ne pouvais pas connaître la version de Linux (histoire longue - mais rien de criminel) mais ce code m'a sauvé la journée :)
jeudi
2

Toutes les autres réponses (jusqu'à présent) concernent les packages et les fichiers binaires. Si vous parlez des "applications de bureau", celles qui apparaissent dans votre menu Démarrer, vous pouvez essayer:

ls /usr/share/applications | awk -F '.desktop' ' { print $1}' -

Plus de solutions dans une autre question .

Rolf
la source