Jak wyświetlić listę wszystkich zainstalowanych programów?

48

Jak wyświetlić listę obu programów dostarczonych z moją dystrybucją i tych, które zainstalowałem ręcznie?

InquilineKea
źródło
8
Która dystrybucja? Każda dystrybucja ma inne narzędzia instalacyjne.
Matteo,
Hm, interesują mnie Red Hat, Ubuntu i cygwin. Czy istnieje sposób na dystrybucję programów bez dystrybucji z jakimś argumentem wiersza poleceń?
InquilineKea
1
Nie, nie ma, ponieważ menedżerowie pakietów różnią się.
Chris Down,

Odpowiedzi:

71

To zależy od twojej dystrybucji.

  • Dystrybucje oparte na umiejętnościach (Ubuntu, Debian itp.): dpkg -l
  • Dystrybucje oparte na RPM (Fedora, RHEL itp.): rpm -qa
  • Dystrybucje oparte na pkg * (OpenBSD, FreeBSD itp.): pkg_info
  • Dystrybucje oparte na Portage (Gentoo itp.): equery listLubeix -I
  • Dystrybucje oparte na pacmanie (Arch Linux itp.): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Wszystkie będą jednak wyświetlać listę pakietów, a nie programów . Jeśli naprawdę chcesz wyświetlić listę programów, prawdopodobnie chcesz wymienić pliki wykonywalne w swoim pliku $PATH, co można zrobić w ten sposób, używając bash compgen:

compgen -c

Lub jeśli nie masz 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
źródło
4
A dla systemów opartych na RPM (Red Hat, SuSE, CentOS itp.):rpm -qa
nr
1
Debian / Ubuntu jest dkpg -l | grep ^ii.
Rolf
1
@Rolf, masz na myśli dPKg
Harkály Gergő
1
Hrmph ... BSD nie są dystrybucjami Linuksa ...
Kusalananda
1
@Kusalananda Huh? W żadnym momencie tej odpowiedzi nie jest powiedziane, że BSD są dystrybucjami Linuksa, ale są dystrybucjami . To dosłownie oznacza „D” w BSD.
Chris Down
13

Odpowiedź na drugą część pytania (tak naprawdę nie należy dodawać odpowiedzi Chrisa w pierwszej części) :

Zasadniczo nie ma możliwości wyświetlenia listy ręcznie zainstalowanych programów i ich składników. Nie jest to nigdzie rejestrowane, jeśli nie korzystasz z menedżera pakietów. Wszystko, co możesz zrobić, to znaleźć pliki binarne w standardowych lokalizacjach (jak sugerował Chris) i w podobny sposób zgadnij, skąd pochodzą niektóre biblioteki lub niektóre strony podręcznika itp. Dlatego, o ile to możliwe, należy zawsze instalować programy przy użyciu menedżera pakietów .

rozcietrzewiacz
źródło
3

Programy powinny być osiągalne poprzez PATH, więc po prostu wypisz wszystko na ścieżce:

ls ${PATH//:/ }

Oczekuj wyniku około 3k-4k programów.

Aby wykluczyć prawdopodobną mniejszość fałszywych trafień, możesz udoskonalić to podejście:

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

Nie miało to dla mnie znaczenia.

nieznany użytkownik
źródło
2
Zauważ, że potencjalnie wyświetli to także listę różnych nieprogramów (podkatalogi katalogów $PATHitp.).
Chris Down,
1
Dodałem test, ale nie miało to dla mnie znaczenia (jak przydatny jest katalog w katalogu na ścieżce, który sam nie jest na ścieżce?). Ale w przypadkach, w których polegasz na poprawności, może być przydatna.
użytkownik nieznany
1
niesamowite! Nie mogłem poznać wersji Linuksa (długa historia - ale nic kryminalnego), ale ten kod uratował mi dzień :)
obenjiro
2

Wszystkie pozostałe odpowiedzi (jak dotąd) dotyczą pakietów i plików binarnych. Jeśli masz na myśli „aplikacje komputerowe”, te, które pojawiają się w menu Start, możesz spróbować:

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

Więcej rozwiązań w innym pytaniu .

Rolf
źródło