Як перерахувати всі встановлені програми?


49

Як перерахувати програми, які постачаються разом із моїм дистрибутивом, і ті, які я встановив вручну?


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

Гм, мене цікавлять Red Hat, Ubuntu та cygwin. Чи існує спосіб розподілу програм з аргументом командного рядка без розподілу?
InquilineKea

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

Відповіді:


72

Це залежить від вашого розповсюдження.

  • Розподіл на основі Aptitude (Ubuntu, Debian тощо): dpkg -l
  • RPM-дистрибуції (Fedora, RHEL тощо): rpm -qa
  • pkg * -поширення (OpenBSD, FreeBSD тощо): pkg_info
  • Портаційні дистрибуції (Gentoo тощо): equery listабоeix -I
  • дистрибуції на основі pacman (Arch Linux тощо): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

Все це перелічить пакунки, а не програми . Якщо ви справді хочете перелічити програми, ви, ймовірно, хочете перерахувати виконувані файли у вашому $PATH, що можна зробити так, використовуючи bash's 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
Hrmph ... BSD - це не дистрибутиви Linux ...
Kusalananda

1
@Kusalananda Так? У жодній точці цієї відповіді не сказано, що 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.