Wie liste ich alle installierten Programme auf?

48

Wie liste ich sowohl die mit meiner Distribution gelieferten als auch die manuell installierten Programme auf?

InquilineKea
quelle
8
Welche Distribution? Jede Distribution verfügt über unterschiedliche Installationstools.
Matteo
Hm, ich interessiere mich für Red Hat, Ubuntu und Cygwin. Gibt es eine verteilungsfreie Möglichkeit, die Programme mit einem Befehlszeilenargument aufzulisten?
InquilineKea
1
Nein, gibt es nicht, da sich die Paketmanager unterscheiden.
Chris Down

Antworten:

71

Das hängt von Ihrer Distribution ab.

  • Aptitude-basierte Distributionen (Ubuntu, Debian usw.): dpkg -l
  • RPM-basierte Distributionen (Fedora, RHEL usw.): rpm -qa
  • pkg * -basierte Distributionen (OpenBSD, FreeBSD usw.): pkg_info
  • Portage-basierte Distributionen (Gentoo usw.): equery listodereix -I
  • Pacman-basierte Distributionen (Arch Linux usw.): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

In all diesen Fällen werden jedoch die Pakete und nicht die Programme aufgelistet. Wenn Sie die Programme wirklich auflisten möchten, möchten Sie wahrscheinlich die ausführbaren Dateien in Ihrem auflisten $PATH, was mit bashs wie folgt geschehen kann compgen:

compgen -c

Oder wenn Sie nicht haben 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
quelle
4
Und für RPM-basierte Systeme (Red Hat, SuSE, CentOS usw.):rpm -qa
Nr.
1
Debian / Ubuntu ist dkpg -l | grep ^ii.
Rolf
1
@Rolf, du meinst dPKg
Harkály Gergő
1
Hrmph ... Die BSDs sind keine Linux-Distributionen ...
Kusalananda
1
@ Kusalananda Huh? In dieser Antwort heißt es zu keinem Zeitpunkt, dass BSDs Linux-Distributionen sind, aber sie sind Distributionen . Dafür steht buchstäblich das "D" in BSD.
Chris Down
13

Beantwortung des zweiten Teils der Frage ( Chris 'Antwort für den ersten Teil ist eigentlich nichts hinzuzufügen ) :

Es gibt im Allgemeinen keine Möglichkeit, manuell installierte Programme und deren Komponenten aufzulisten. Dies wird nirgendwo aufgezeichnet, wenn Sie keinen Paketmanager verwendet haben. Alles , was Sie tun können , ist die Binärdateien in Standardspeicherorten (wie Chris vorgeschlagen) und in ähnlicher Weise erraten , wo einige Bibliotheken oder einige von Handbuchseiten usw. kam. Aus diesem Grund sollten Sie Programme nach Möglichkeit immer mit Ihrem Paketmanager installieren .

rozcietrzewiacz
quelle
3

Die Programme sollten über PATH erreichbar sein, listen Sie also einfach alles auf, was sich im Pfad befindet:

ls ${PATH//:/ }

Erwarten Sie ein Ergebnis von ca. 3k-4k Programmen.

Um eine wahrscheinliche Minderheit von Fehlalarmen auszuschließen, können Sie den Ansatz verfeinern:

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

Es machte keinen Unterschied für mich.

Benutzer unbekannt
quelle
2
Beachten Sie, dass dies möglicherweise auch verschiedene Nicht-Programme auflistet (Unterverzeichnisse von Verzeichnissen in $PATHusw.).
Chris Down
1
Ich habe einen Test hinzugefügt, aber das hat für mich keinen Unterschied gemacht (wie nützlich ist ein Verzeichnis in einem Verzeichnis im Pfad, das sich nicht selbst im Pfad befindet?). In Fällen, in denen Sie sich auf die Richtigkeit verlassen, kann dies jedoch hilfreich sein.
Benutzer unbekannt
1
genial! Ich konnte die Linux-Version nicht kennen (lange Geschichte - aber nichts Verbrecherisches), aber dieser Code hat meinen Tag gerettet :)
obenjiro
2

Alle anderen Antworten befassen sich (bisher) mit Paketen und Binärdateien. Wenn Sie "Desktop-Anwendungen" meinen, die in Ihrem Startmenü angezeigt werden, können Sie Folgendes versuchen:

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

Weitere Lösungen in einer anderen Frage .

Rolf
quelle