Сценарий для получения (краткого) списка установленных приложений, аналогичного Ubuntu Software Center?

Как мне написать сценарий для получения того же списка установленного программного обеспечения, о котором сообщал Центр программного обеспечения Ubuntu?

В каждой ссылке, которую я могу найти, упоминается либо dpkg -l или rpm -qa (или некоторые его вариант), но обычно они включают каждый последний пакет и библиотеку и все, что угодно, и в итоге вы получите список из 1000+ записей.

Тем не менее приложение Ubuntu Software Center показывает очень краткий (и удобный для человека) список - в настоящее время на моем Ubuntu есть 67 элементов. Это тот список, который меня интересует. Может кто-нибудь указать мне сценарий, который может получить что-то подобное? Желательно что-то, что может работать в других дистрибутивах, но я возьму все, что смогу получить.

Благодаря.

5
задан 7 April 2011 в 20:46

6 ответов

Вы можете получить данные из журналов в /var/log/apt. Поскольку журналы вращаются, большинство из них сжаты. Сначала мы объединяем текущий журнал со сжатыми, прежде чем извлекать все установленные пакеты, но не автоматически. Это было просто методом проб и ошибок с моей стороны, так что, возможно, его можно немного исправить.

cd /var/log/apt   
sudo -s
cat history.log > allhistory
zcat history.log*gz >> allhistory.log
cat allhistory.log | grep Install | sed s/Install://g | tr ')' '\n' | grep -v automatic | sed s/,//g | sed s/:.*$//g | sort -u | grep -v "^$"
0
ответ дан 7 April 2011 в 20:46

Может все еще не быть тем, что вы ищете ...

dpkg --get-selections

Если нет (я пока не могу комментировать), запустите следующее и дайте мне знать число (просто считает количество строк.

dpkg --get-selections | wc -l
0
ответ дан 7 April 2011 в 20:46

Может быть, APTonCD поможет?

Это инструмент, который сканирует установленные вами пакеты APT и создает список для вас. Затем вы можете вручную выбрать / отменить выбор тех, которые вам нужны, сохранить список, и он даже может загрузить / использовать кэш для сохранения выбранных пакетов в CD / папке (для автономной автоматической установки установленных на данный момент приложений)

Он также имеет несколько фильтров, таких как include-зависимости, старые версии и т. Д.

APTonCD поставляется по умолчанию в Mint 10, но, поскольку они используют одни и те же репозитории Ubuntu, вы можете установить его через менеджер программного обеспечения.

0
ответ дан 7 April 2011 в 20:46

Насколько я могу судить, Центр программного обеспечения фильтрует на основе раздела, в котором находится пакет. Хотя он не будет точно таким же, как фильтр, который использует Центр программного обеспечения, вы можете сделать нечто подобное, отфильтровав библиотеку. пакеты:

dpkg --get-selections|grep -i -v "deinstall"|grep -v "lib"

grep предназначен для фильтрации вещей, которые либо не установлены, либо обычно скрыты центром программного обеспечения. Вы можете добавить больше вещей для фильтрации по мере необходимости - строка «lib» является хорошим индикатором того, что это не приложение конечного пользователя.

0
ответ дан 7 April 2011 в 20:46

То, что, вероятно, показывает центр программного обеспечения (и что Вы подразумеваете под приложениями), .desktop файлы. По существу они служат ярлыками на фактические двоичные файлы (думайте с точки зрения ярлыков Windows и .exe файлы).

Большинство (но не все!) приложения, установленные через менеджера по программному обеспечению, имеют ярлык в /usr/share/applications. Структура того файла - что-то вроде этого:

[Desktop Entry]
Name=My App Name
Exec=/full/path/to/binary
Comment=this app does something
Icon=/full/path/to/icon.png

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

 find /usr/share/applications/ -maxdepth 1 -type f -iname "*.desktop" | xargs  awk -F '=' '/Desktop Entry/{seek=1}; {if(seek==1 && $0~/Name=/){$1="";print;seek=0;next}}' 

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

Поскольку я упомянул, что некоторые приложения не имеют .desktop файл ИЛИ может храниться в /opt папка, таким образом, можно хотеть выполнить ту же команду (с -maxdepth 1 удаленный) на /opt каталог также.

0
ответ дан 7 April 2011 в 20:46

В Python вы можете получить список установленных пакетов следующим образом:

import apt
packages = apt.Cache()
packages.open()
installed_packages = [i.name for i in packages if i.is_installed]

Если вы хотите узнать дополнительную информацию о пакетах, процесс немного сложнее. Смотрите документацию для модуля Python apt для получения всей доступной информации. Кроме того, вы можете просмотреть источник в Центре программного обеспечения, чтобы узнать, что они делают.

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

РЕДАКТИРОВАТЬ: Я полагаю, что Software Center получает список пакетов для отображения из тех пакетов, которые поставляют файлы .desktop. Это может быть сложнее, но вы можете легко отфильтровать список по тем пакетам, которые установлены и имеют файл .desktop. Этот пример продолжает мой предыдущий код:

import os
desktop_files = ['.'.join(i.split('.')[:-1]) for i in os.listdir('/usr/share/applications')]
installed_in_software_center = [i for i in installed_packages if i in desktop_files]
0
ответ дан 7 April 2011 в 20:46

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

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