Как мне перечислить все установленные программы?


50

Как мне перечислить как программы, которые пришли с моим дистрибутивом, так и те, которые я установил вручную?


8
Какой дистрибутив? Каждый дистрибутив имеет разные инструменты для установки.
Маттео

Хм, меня интересуют Red Hat, Ubuntu и cygwin. Есть ли способ распространения программ без аргумента командной строки?
InquilineKea

1
Нет, нет, поскольку менеджеры пакетов отличаются.
Крис Даун

Ответы:


73

Это зависит от вашего распространения.

  • Дистрибутивы на основе aptitude (Ubuntu, Debian и т. Д.): dpkg -l
  • RPM-дистрибутивы (Fedora, RHEL и т. Д.): rpm -qa
  • дистрибутивы на основе pkg * (OpenBSD, FreeBSD и т. д.): pkg_info
  • Дистрибутивы на основе Portage (Gentoo и т. Д.): equery listИлиeix -I
  • дистрибутивы на основе pacman (Arch Linux и т. д.): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Однако все они будут содержать список пакетов, а не программ . Если вы действительно хотите перечислить программы, вы, вероятно, захотите перечислить исполняемые файлы в вашем $PATH, что можно сделать так, используя bash compgen:

compgen -c

Или, если у вас нет 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
А для систем ППД на основе (Red Hat, SuSE, CentOS и т.д.):rpm -qa
БДУ

1
Debian / Ubuntu есть dkpg -l | grep ^ii.
Рольф

1
@Rolf, ты имеешь в виду dPKg
Харкали Герго

1
Хммм ... BSD не являются дистрибутивами Linux ...
Кусалананда

1
@ Кусалананда, а? В этом ответе нигде не говорится, что BSD являются дистрибутивами Linux, но они являются дистрибутивами . Это буквально то, что означает "D" в BSD.
Крис Даун

13

Отвечая на вторую часть вопроса (на самом деле ничего нельзя добавить к ответу Криса на первую часть) :

Как правило, нет способа перечисления установленных вручную программ и их компонентов. Это нигде не записывается, если вы не использовали менеджер пакетов. Все, что вы можете сделать, это найти двоичные файлы в стандартных местах (как предложил Крис) и подобным образом угадать, откуда взялись некоторые библиотеки или несколько страниц справочника и т. Д. Вот почему, по возможности, вы всегда должны устанавливать программы, используя менеджер пакетов .


3

Программы должны быть доступны через PATH, поэтому просто перечислите все по пути:

ls ${PATH//:/ }

Ожидайте результат около 3k-4k программ.

Чтобы исключить возможное меньшинство ложных срабатываний, вы можете уточнить подход:

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

Это не имело значения для меня.


2
Обратите внимание, что это также потенциально может перечислять различные непрограммы (подкаталоги каталогов в $PATHи т. Д.).
Крис Даун

1
Я добавил тест, но для меня это не имело значения (насколько полезен каталог в каталоге в пути, который сам не находится в пути?). Но для случаев, когда вы полагаетесь на правильность, это может быть полезно.
пользователь неизвестен

1
классно! Я не смог узнать версию Linux (длинная история - но ничего криминального), но этот код спас мой день :)
obenjiro

2

Все остальные ответы (пока) касаются пакетов и двоичных файлов. Если вы имеете в виду «настольные приложения», которые появляются в вашем меню «Пуск», вы можете попробовать:

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

Больше решений в другом вопросе .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.