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

Всегда существует опция "поместить его, где это принадлежит", но запишите простого об/мин, сначала.

53
19.09.2011, 00:13
4 ответа

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

  • Основанные на способности дистрибутивы (Ubuntu, Debian, и т.д.): dpkg -l
  • ОСНОВАННЫЕ НА ОБ/МИН дистрибутивы (Fedora, RHEL, и т.д.): rpm -qa
  • pkg*-based дистрибутивы (OpenBSD, FreeBSD, и т.д.): pkg_info
  • Основанные на перевозке дистрибутивы (хинду, и т.д.): equery list или eix -I
  • находящиеся в pacman дистрибутивы (Дуга Linux, и т.д.): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Все они перечислят пакеты, а не программы как бы то ни было. Если Вы действительно хотите перечислить программы, Вы, вероятно, хотите перечислить исполняемые файлы в Вашем $PATH, который может быть сделан как настолько использующий удар 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
77
27.01.2020, 19:33
  • 1
    И для основанных на об/мин систем (Red Hat, SuSE, CentOS, и т.д.): rpm -qa –  nos 19.09.2011, 00:10
  • 2
    Debian / Ubuntu dkpg -l | grep ^ii. –  Rolf 06.02.2018, 12:37

Ответ на вторую часть вопроса (ничто действительно, чтобы быть добавленным к ответу Chris для первой части):

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

13
27.01.2020, 19:33

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

ls ${PATH//:/ }

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

Для исключения вероятного меньшинства ложных положительных сторон можно совершенствовать подход:

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

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

3
27.01.2020, 19:33
  • 1
    Обратите внимание, что это также потенциально перечислит различные непрограммы также (подкаталоги каталогов в $PATH, и т.д.). –  Chris Down 25.03.2012, 06:03
  • 2
    я добавил тест, но это не имело значения для меня (насколько полезный каталог в каталоге в пути, который не находится самостоятельно в пути?). Но для случаев, где Вы полагаетесь на правильность, это могло бы быть полезно. –  user unknown 25.03.2012, 08:42
  • 3
    ! Я не смог знать, что версия Linux (длинная история - но ничто преступное) кроме этого кода сохранила мой день :) –  obenjiro 12.01.2015, 20:15

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

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

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

4
27.01.2020, 19:33

Теги

Похожие вопросы