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

Я знаю, я просто могу ударить Super+A чтобы увидеть все установленные приложения в Ubuntu, но мне нужна команда для перечисления их имен. Команда

dpkg --get-selections | awk '{print $1}'

это также не вариант, потому что он показывает все установленные пакеты и содержит драйверы, ядра и библиотеки.

Я придумал этот ответ для людей, которые хотят использовать bash в хорошем смысле. Ясно, что ответ на этот вопрос связан со списком файлов из /usr/share/applications, но проблема в том, что ls команда никогда не должна анализироваться. В прошлом я совершал ту же ошибку, но теперь я узнал, что лучший способ - это использовать for цикл для перебора файлов, даже если мне придется использовать еще несколько клавиш с моей драгоценной клавиатуры:

for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done

Я также использовал в предыдущей команде манипулирование строками операции: удалены из app первые 24 символа, которые являются /usr/share/applications/ и последние 8 символов, которые являются .desktop.


Обновление:

Еще одно место, где вы можете найти приложения, показанные тире, - это ~/.local/share/applications/*.desktop. Итак, вам также нужно выполнить следующую команду:

for app in ~/.local/share/applications/*.desktop; do echo "${app:37:-8}"; done

Чтобы объединить две предыдущие команды, вы можете использовать:

for app in /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop; do app="${app##/*/}"; echo "${app::-8}"; done

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

sudo apt-get install aptitudeaptitude -F' * %p -> %d ' --no-gui --disable-columns search '?and(~i,!?section(libs), !?section(kernel), !?section(devel))'

Это даст вам хороший список всех установленных пакетов, которые не являются библиотеками, не ядрами, не пакетом разработки, подобным этому:

* zip -> Archiver for .zip files * zlib1g -> compression library - runtime * zlib1g-dev -> compression library - development * zsh -> shell with lots of features * zsh-common -> architecture independent files for Zsh 

Он более полный, поскольку в нем также перечислены приложения, не связанные с графическим интерфейсом, которые не будут отображаться в .desktop файлы

Выполните приведенную ниже команду, чтобы просмотреть все установленные приложения,

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

Если вы хотите получить список всех установленных приложений, выполните приведенную ниже команду,

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

Он сохранит вышеуказанный вывод команды в applications.txt файл внутри вашего ~/Desktop каталог.

операционная

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

find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort

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

find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort > ~/Desktop/applications.txt

Записи рабочего стола для всех установленных приложений хранятся внутри /usr/share/applications каталог, в котором имена файлов представлены в формате application-name.desktop.Удаление .desktop часть из имен файлов даст вам общий список установленных приложений.

Обновление:

Как предложил @Radu, вы также можете найти записи рабочего стола для ваших дополнительных установленных приложений внутри ~/.local/share/applications каталог.

find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;

Не уверен, почему большинство опубликованных ответов связано с извлечением имени файла .ярлыки на рабочем столе. Имя файла ярлыка .desktop может быть любым, но важно то, что Name поле внутри файла ярлыка. Если вы хотите создать список имен установленных приложений, отображаемых в Dash, просто "grep" это поле в разделе [Desktop Entry]

Элементарный код с помощью bash

#!/bin/bashfor file in /usr/share/applications/*.desktop;do    while IFS== read -r key val    do        if [[ -z $key ]]; then            continue        else            if [[ $key =~ ^\[Desktop\ Entry ]]; then                interesting_field=1            elif [[ $key =~ ^\[ ]]; then                interesting_field=0            fi        fi        [[ $interesting_field -eq 1 ]] && [[ $key == "Name" ]] && echo $val    done < $filedone

Но это не учитывает ярлыки, которые скрыты от отображения в Dash. Кто-то, кто лучше разбирается в спецификации .desktop, возможно, захочет еще больше расширить этот код, чтобы исключить такие ярлыки

Редактировать: еще одна попытка, с помощью Python

#!/usr/bin/pythonfrom os import listdirfrom os.path import isfile, joinimport ConfigParserSHORTCUTDIR = "/usr/share/applications/"shortcuts = [ file for file in listdir(SHORTCUTDIR) if isfile(join(SHORTCUTDIR, file)) and file.endswith(".desktop") ]dash_shortcuts = []for f in shortcuts:    c = ConfigParser.SafeConfigParser()    c.read(SHORTCUTDIR + f)    try:        if c.getboolean('Desktop Entry', 'NoDisplay') is True:            continue    except ConfigParser.NoOptionError:        pass    try:        if "unity" in c.get('Desktop Entry', 'NotShowIn').lower():            continue    except ConfigParser.NoOptionError:        pass    try:        if "unity" not in c.get('Desktop Entry', 'OnlyShowIn').lower():            continue    except ConfigParser.NoOptionError:        pass    dash_shortcuts += [ c.get("Desktop Entry", "Name") ]for s in sorted(dash_shortcuts, key=str.lower):    print s

Если вам нужен список приложений, отображаемых при нажатии Super+A, вы можете использовать ls /usr/share/applications Единственное, что вам следует сделать, это заменить .desktop окончание которого является довольно простой задачей. Я делаю это с sed:

ls /usr/share/applications | sed s/.desktop// - > installed-apps.txt

Но вы можете сделать это после получения списка с помощью текстового редактора.

Спрашивающий хочет перечислить имена всех установленных "приложений".

Что касается приложений с .файлы рабочего стола:

  • ответ Данателы имеет дело с приложениями, которые имеют файлы .desktop в /usr/share/applications
  • как на что указал Раду, приложения с .файлы рабочего стола также можно найти в ~/.local/share/applications
  • на этом этапе можно отметить, что приложения с .файлы рабочего стола могут иметь два имена
    • одно "имя" доступно путем запроса Тире в Unity или из меню в Xubuntu (например). Это название происходит от Name= строка в соответствующем файле .desktop. Одним из примеров является "Карта символов".
    • другое "имя" - это то, которое будет использоваться при запуске приложения из терминала, и является первым словом после Exec=. В случае "Карты символов" это было бы gucharmap.
  • эти два имени (и файл .desktop) может быть связано с помощью:
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • и
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

Что касается приложений без .файлы рабочего стола:

В зависимости от того, как определяется "приложение", у некоторых нет файлов .desktop.

  • было бы что-то вроде conky, poppler-utils, qpdf, xdotool и wmctrl будут считаться "приложениями"? Как их идентифицировать и перечислить по их именам (при условии, что кто-то их установил)?
  • Что о awk, find, grep, ls и sed назвать еще несколько? Являются ли они приложениями или нет?

Если что-нибудь который имеет команду, рассматривается как приложение, затем Команда Linux для перечисления всех доступных команд и псевдонимов и этот ответ есть поможет их идентифицировать.