Как я могу перечислить все приложения, установленные в моей системе?
Я знаю, я просто могу нажать 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
,
- одно "имя" можно получить, запросив Dash в Unity или из меню в Xubuntu (например). Это имя происходит от
- два имени (и файл.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 для вывода списка всех доступных команд и псевдонимов и этого ответа поможет идентифицировать их.