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

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

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

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

18
задан 13 March 2014 в 14:09

6 ответов

Я придумал этот ответ для людей, кто хочет использовать, избивают хороший путь. Ясно, что ответ вопроса связан со списком файлов от /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
0
ответ дан 13 March 2014 в 14:09

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

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 

Это - больше завершенное, так как это также перечисляет приложения не-GUI, которые не появятся в эти .desktop файлы

0
ответ дан 13 March 2014 в 14:09

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

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.Removing эти .desktop, часть от имен файлов даст Вам общий список установленных приложений.

Обновление:

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

find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;
0
ответ дан 13 March 2014 в 14:09

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

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

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

0
ответ дан 13 March 2014 в 14:09

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

Элементарный код, с ударом

#!/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

, Но это не принимает во внимание ярлыки, которые скрыты от того, чтобы быть, показало в Тире. Кто-то с лучше понимает .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
0
ответ дан 13 March 2014 в 14:09

Корреспондент хочет перечислить названия всех установленных "приложений".

Относительно приложений с .desktop файлами:

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

0
ответ дан 13 March 2014 в 14:09

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

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