Como faço para listar todos os programas instalados?

49

Como listar os programas que vieram com minha distribuição e os que eu instalei manualmente?

InquilineKea
fonte
8
Qual distribuição? Cada distribuição possui diferentes ferramentas de instalação.
Matteo
Hum, estou interessado em Red Hat, Ubuntu e cygwin. Existe uma maneira livre de distribuição para listar os programas com algum argumento de linha de comando?
InquilineKea
1
Não, não há, pois os gerenciadores de pacotes diferem.
Chris Baixo

Respostas:

72

Isso depende da sua distribuição.

  • Distribuições baseadas no Aptitude (Ubuntu, Debian, etc): dpkg -l
  • Distribuições baseadas em RPM (Fedora, RHEL, etc): rpm -qa
  • Distribuições baseadas em pkg * (OpenBSD, FreeBSD, etc): pkg_info
  • Distribuições baseadas no Portage (Gentoo, etc): equery listoueix -I
  • distribuições baseadas em pacman (Arch Linux, etc): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

No entanto, tudo isso listará os pacotes e não os programas . Se você realmente deseja listar os programas, provavelmente deseja listar os executáveis ​​no seu $PATH, o que pode ser feito da seguinte maneira, usando o bash's compgen:

compgen -c

Ou, se você não tiver 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
fonte
4
E para sistemas baseados em RPM (Red Hat, SuSE, CentOS etc.):rpm -qa
nos
1
O Debian / Ubuntu é dkpg -l | grep ^ii.
Rolf
1
@Rolf, você quer dizer dPKg
Harkály Gergő
1
Hrmph ... Os BSDs não são distribuições Linux ...
Kusalananda
1
@Kusalananda Huh? Em nenhum momento desta resposta, diz que os BSDs são distribuições Linux, mas são distribuições . Isso é literalmente o que o "D" no BSD significa.
21718 Chris Down
13

Respondendo à segunda parte da pergunta (nada realmente a ser adicionado à resposta de Chris na primeira parte) :

Geralmente, não há como listar programas instalados manualmente e seus componentes. Isso não é gravado em nenhum lugar se você não usou um gerenciador de pacotes. Tudo o que você pode fazer é encontrar os binários em locais padrão (como Chris sugerido) e de forma semelhante, acho que algumas bibliotecas ou algumas páginas de manual etc. veio. É por isso que, sempre que possível, você deve sempre instalar programas usando o seu gerenciador de pacotes .

rozcietrzewiacz
fonte
3

Os programas devem estar acessíveis através do PATH, portanto, basta listar tudo no caminho:

ls ${PATH//:/ }

Espere um resultado de cerca de 3k-4k programas.

Para excluir uma provável minoria de falsos positivos, você pode refinar a abordagem:

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

Não fez diferença para mim.

Usuário desconhecido
fonte
2
Observe que isso também potencialmente listará vários outros programas (subdiretórios de diretórios no $PATHetc).
Chris Baixo
1
Eu adicionei um teste, mas não fez diferença para mim (qual a utilidade de um diretório em um diretório no caminho, que não é o próprio caminho?). Mas, nos casos em que você confia na correção, pode ser útil.
desconhecido usuário
1
impressionante! Eu não era capaz de saber versão do Linux (longa história - mas nada de criminoso), mas este código salvou meu dia :)
obenjiro
2

Todas as outras respostas (até agora) lidam com pacotes e binários. Se você quer dizer "aplicativos de desktop", aqueles que aparecem no menu Iniciar, você pode tentar:

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

Mais soluções em outra pergunta .

Rolf
fonte