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

Мне понравилось учебное руководство Креншо также, потому что оно делает его абсолютно ясным, что компилятор является просто другой программой, которая читает некоторый вход и выписывает некоторым помещенным.

Read это.

Работа это, если Вы хотите, но тогда смотрите на другую ссылку о том, как больше и больше полных компиляторов действительно записаны.

И читают При Доверии Доверию , для получения подсказки о неочевидных вещах, которые могут быть сделаны в этом домене.

17
задан 16.05.2020, 04:48

6 ответов

Не уверенный, почему большинство отправленных ответов включает извлечение имени файла .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
ответ дан 16.05.2020, 04:48
  • 1
    @AvinashRaj Все еще плохо: P Вы didn' t принимают во внимание, что Name опция могла быть вне того диапазона номера строки, особенно с партией опций или пустых строк под [Desktop\ Entry ]. И файл .desktop ini файл – cdlane 16.05.2020, 04:49
  • 2
    @AvinashRaj я желаю it' s настолько простой, но that' s не надлежащий способ проанализировать ini. Код взорвет и бросит шумы, если будет больше чем один Name записи в .desktop you' парсинг ре, который всегда случай. Также Вы shouldn' t принимают все строки you' ре, заинтересованное с, будет на фиксированном номере строки – Amanda 16.05.2020, 04:49
  • 3
    Необходимо действительно развернуть ответ, чтобы быть большим количеством ответа. – Amanda 16.05.2020, 04:50
  • 4
    @Seth я отправил слишком скоро, извините. Я царапал голову, выясняющую, как проанализировать ini с ударом – Clay 16.05.2020, 04:50

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

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

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

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

  • что-то хотело бы conky, poppler-utils, qpdf, xdotool и wmctrl считаться "приложениями"? Как они должны быть определены и перечислены их именами (предполагающий, что каждый установил их)?
  • Что относительно [1 112], find, grep, ls и sed для именования еще немного? Они - приложения или являются ими нет?

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

0
ответ дан 16.05.2020, 04:49

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

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
ответ дан 16.05.2020, 04:50
  • 1
    Braiam, продвинулся, это не, о котором запускаются с z или с a... При ударе Super+A в клавиатуру, что можно видеть появление на экране, начинающем с верхнего левого угла? – Nathaniel 16.05.2020, 04:50
  • 2
    @RaduRДѓdeanu, который я просто использовал хвост для показа выборки моих установленных пакетов, которая заканчивается z, если я использовал голову, они запустят с a, 2) он хочет приложения, перечисленные в " dash"? действительно ли Вы уверены? – Sikha A 16.05.2020, 04:50
  • 3
    @RaduRДѓdeanu OP' s заголовок говорит, что он хочет перечислить все приложения установленный в его системе, исключая библиотеки, драйверы, ядра и других.. Он упоминает один из пути (который он использует) получить список приложений, который использует Супер + A, и это просто отображает подмножество приложений, установленных в системе; но это покрывает больше всего если не все.. ответ был бы даже вместе с --no-gui удален. – Pawan 16.05.2020, 04:51
  • 4
    Я не могу согласиться с этим ответом на этот вопрос. Ответ хорош, но не в этом месте. Достаточно ясно, что OP хочет список с применением, которое может быть найдено в Тире. И нет места для zsh, zsh-common и другие! – Dinusha Naveen 16.05.2020, 04:51
  • 5
    .. Я забираю --no-gui часть, кажется it' s не там для того, что я думал, что это было. – Kamal Paliwal 16.05.2020, 04:52

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

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

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

0
ответ дан 16.05.2020, 04:50
  • 1
    Этот doesn' t список весь приложения, показанные, когда Вы поражаете Super+A. – Prashant Pimpale 16.05.2020, 04:50
  • 2
  • 3
    @Radu, на самом деле, /usr/share/application/*.desktop файлы don' t содержат любые специальные символы, таким образом анализирование ls особенно в этом случае позволяется. – Amanda 16.05.2020, 04:51
  • 4
    @Semi-bit Вы предполагаете, что ничто не пошло не так, как надо. Что, если I' m идиот и создали файл, названный bad name.desktop, например? Нет никакой причины рискнуть ls здесь. – Clay 16.05.2020, 04:52

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

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
ответ дан 16.05.2020, 04:51
  • 1
    Radu спасибо однако, сколько раз Вы видели, что имя файла содержит новую строку? Никогда? Мысль так. Таким образом, я никогда не должен использовать что-то очень полезное из-за пограничного случая, которого фактически никогда не происходит? Я думаю I' ll продолжают анализировать ls - в представительных целях и для некритических задач, таких как та выше - и пытаются иметь в виду это ограничение, спасибо за головы! – Amanda 16.05.2020, 04:51
  • 2

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

Теги

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