¿Cómo enumero todos los programas instalados?

49

¿Cómo enumero los programas que vienen con mi distribución y los que instalé manualmente?

InquilineKea
fuente
8
Cual distribucion Cada distribución tiene diferentes herramientas de instalación.
Matteo
Hm, estoy interesado en Red Hat, Ubuntu y Cygwin. ¿Hay una forma libre de distribución para enumerar los programas con algún argumento de línea de comandos?
InquilineKea
1
No, no lo hay, ya que los administradores de paquetes difieren.
Chris Down

Respuestas:

72

Eso depende de tu distribución.

  • Distribuciones basadas en aptitud (Ubuntu, Debian, etc.): dpkg -l
  • Distribuciones basadas en RPM (Fedora, RHEL, etc.): rpm -qa
  • Distribuciones basadas en pkg * (OpenBSD, FreeBSD, etc.): pkg_info
  • Distribuciones basadas en portage (Gentoo, etc.): equery listoeix -I
  • Distribuciones basadas en pacman (Arch Linux, etc.): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Sin embargo, todos estos enumerarán los paquetes en lugar de los programas . Si realmente desea enumerar los programas, probablemente desee enumerar los ejecutables en su $PATH, lo que se puede hacer de esta manera utilizando bash compgen:

compgen -c

O, si no tienes 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
fuente
44
Y para sistemas basados ​​en RPM (Red Hat, SuSE, CentOS, etc.):rpm -qa
nos
1
Debian / Ubuntu es dkpg -l | grep ^ii.
Rolf
1
@Rolf, te refieres a dPKg
Harkály Gergő
1
Hrmph ... Los BSD no son distribuciones de Linux ...
Kusalananda
1
@Kusalananda ¿Eh? En ningún momento de esta respuesta dice que los BSD son distribuciones de Linux, pero son distribuciones . Eso es literalmente lo que significa la "D" en BSD.
Chris Down
13

Respondiendo a la segunda parte de la pregunta (realmente no se agrega nada a la respuesta de Chris para la primera parte) :

Generalmente no hay forma de enumerar los programas instalados manualmente y sus componentes. Esto no se registra en ninguna parte si no usó un administrador de paquetes. Todo lo que puede hacer es encontrar los archivos binarios en ubicaciones estándar (como sugirió Chris) y de manera similar, adivinar de dónde provienen algunas bibliotecas o algunas páginas de manual, etc. Es por eso que, siempre que sea posible, siempre debe instalar programas utilizando su administrador de paquetes .

rozcietrzewiacz
fuente
3

Los programas deben ser accesibles a través de la RUTA, así que solo enumere todo en la ruta:

ls ${PATH//:/ }

Espere un resultado de aproximadamente 3k-4k programas.

Para excluir una minoría probable de falsos positivos, puede refinar el enfoque:

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

No hizo la diferencia para mí.

usuario desconocido
fuente
2
Tenga en cuenta que esto también puede enumerar varios no programas (subdirectorios de directorios en $PATH, etc.).
Chris Down
1
Agregué una prueba, pero no marcó la diferencia para mí (¿qué tan útil es un directorio en un directorio en la ruta, que no está en la ruta?). Pero para los casos en los que confía en la corrección, puede ser útil.
Usuario desconocido
1
¡increíble! No pude conocer la versión de Linux (historia larga, pero nada criminal), pero este código me salvó el día :)
obenjiro
2

Todas las otras respuestas (hasta ahora) tratan con paquetes y binarios. Si quiere decir "aplicaciones de escritorio", las que aparecen en su menú de inicio, puede intentar:

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

Más soluciones en otra pregunta .

Rolf
fuente