Come posso elencare tutti i programmi installati?


49

Come posso elencare sia i programmi forniti con la mia distribuzione sia quelli che ho installato manualmente?


8
Quale distribuzione? Ogni distribuzione ha diversi strumenti di installazione.
Matteo,

Sono interessato a Red Hat, Ubuntu e Cygwin. Esiste un modo senza distribuzione per elencare i programmi con alcuni argomenti della riga di comando?
InquilineKea,

1
No, non esiste, poiché i gestori dei pacchetti differiscono.
Chris Down,

Risposte:


72

Dipende dalla tua distribuzione.

  • Distribuzioni basate su Aptitude (Ubuntu, Debian, ecc.): dpkg -l
  • Distribuzioni basate su RPM (Fedora, RHEL, ecc.): rpm -qa
  • distribuzioni basate su pkg * (OpenBSD, FreeBSD, ecc.): pkg_info
  • Distribuzioni basate su Portage (Gentoo, ecc.): equery listOeix -I
  • distribuzioni basate su pacman (Arch Linux, ecc.): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Tutti questi elencheranno comunque i pacchetti anziché i programmi . Se vuoi davvero elencare i programmi, probabilmente vuoi elencare gli eseguibili nel tuo $PATH, che può essere fatto in questo modo usando bash compgen:

compgen -c

Oppure, se non hai 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

4
E per i sistemi basati su RPM (Red Hat, SuSE, CentOS, ecc.):rpm -qa
nn

1
Debian / Ubuntu è dkpg -l | grep ^ii.
Rolf

1
@Rolf, intendi dPKg
Harkály Gergő,

1
Hrmph ... I BSD non sono distribuzioni Linux ...
Kusalananda

1
@Kusalananda Huh? In nessun punto di questa risposta si dice che i BSD siano distribuzioni Linux, ma sono distribuzioni . Questo è letteralmente ciò che la "D" in BSD rappresenta.
Chris Down,

13

Rispondere alla seconda parte della domanda (nulla da aggiungere alla risposta di Chris per la prima parte) :

In genere non è possibile elencare i programmi installati manualmente e i relativi componenti. Questo non viene registrato da nessuna parte se non hai utilizzato un gestore di pacchetti. Tutto quello che puoi fare è trovare i binari in posizioni standard (come suggerito da Chris) e in modo simile, indovinare da dove provengono alcune biblioteche o alcune pagine di manuali ecc. Ecco perché, quando possibile, dovresti sempre installare programmi usando il tuo gestore pacchetti .


3

I programmi dovrebbero essere raggiungibili tramite il PERCORSO, quindi basta elencare tutto nel percorso:

ls ${PATH//:/ }

Aspettatevi un risultato di circa 3k-4k programmi.

Per escludere una probabile minoranza di falsi positivi, è possibile perfezionare l'approccio:

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

Non ha fatto differenza per me.


2
Si noti che questo elencherà potenzialmente anche vari non programmi (sottodirectory di directory in $PATH, ecc.).
Chris Down,

1
Ho aggiunto un test, ma non ha fatto differenza per me (quanto è utile una directory in una directory nel percorso, che non è essa stessa nel percorso?). Ma per i casi in cui fai affidamento sulla correttezza, potrebbe essere utile.
utente sconosciuto

1
eccezionale! Non ero in grado di conoscere la versione di Linux (lunga storia - ma niente di criminale) ma questo codice mi ha salvato la giornata :)
obenjiro

2

Tutte le altre risposte (finora) riguardano pacchetti e binari. Se intendi "applicazioni desktop", quelle visualizzate nel menu Start, puoi provare:

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

Altre soluzioni in un'altra domanda .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.