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

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

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

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

6 ответов

Решение

Я придумал этот ответ для людей, которые хотят правильно использовать 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,


Обновить:

Еще одно место, где вы можете найти приложения, показанные Dash, это ~/.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 aptitude
aptitude -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. Ваше имя файла.desktop может быть любым, но главное Name поле внутри файла ярлыка. Если вы хотите построить список установленных имен приложений, отображаемых в Dash, просто "grep" это поле под [Desktop Entry]

Рудиментальный код, с bash

#!/bin/bash

for 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 < $file
done

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

Изменить: еще одна попытка, с Python

#!/usr/bin/python

from os import listdir
from os.path import isfile, join
import ConfigParser

SHORTCUTDIR = "/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:

  • ответ Danatela касается приложений, которые имеют файлы.desktop в /usr/share/applications
  • как указывает Radu, приложения с файлами.desktop также можно найти в ~/.local/share/applications
  • на этом этапе можно отметить, что приложения с файлами.desktop могут иметь два имени
    • одно "имя" можно получить, запросив Dash в 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:

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

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

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

Другие вопросы по тегам