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

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

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

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

Спасибо.

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

54 ответа

Вы получаете данные из журналов в /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 "^$"
1
ответ дан 25 July 2018 в 22:15
  • 1
    Тео. Я все еще получаю 1320 записей. Сценарий Egil возвращает 1180. – user13807 7 April 2011 в 22:57
  • 2
    Должно ли cat history.log > allhistory быть cat history.log > allhistory.log? – user 11 November 2013 в 13:05

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

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

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

1
ответ дан 25 July 2018 в 22:15

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

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

Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.

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

1
ответ дан 25 July 2018 в 22:15

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

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

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

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

EDIT: Я считаю, что 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]
4
ответ дан 25 July 2018 в 22:15

Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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

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

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
ответ дан 25 July 2018 в 22:15

Возможно, еще не все, что вы ищете ...

dpkg --get-selections

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

dpkg --get-selections | wc -l
1
ответ дан 25 July 2018 в 22:15

Вы получаете данные из журналов в /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 "^$"
1
ответ дан 26 July 2018 в 20:02
  • 1
    Тео. Я все еще получаю 1320 записей. Сценарий Egil возвращает 1180. – user13807 7 April 2011 в 22:57
  • 2
    Должно ли cat history.log > allhistory быть cat history.log > allhistory.log? – user 11 November 2013 в 13:05

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

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

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

1
ответ дан 26 July 2018 в 20:02

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

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

Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.

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

1
ответ дан 26 July 2018 в 20:02

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

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

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

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

EDIT: Я считаю, что 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]
4
ответ дан 26 July 2018 в 20:02

Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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

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

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
ответ дан 26 July 2018 в 20:02

Возможно, еще не все, что вы ищете ...

dpkg --get-selections

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

dpkg --get-selections | wc -l
1
ответ дан 26 July 2018 в 20:02

Вы получаете данные из журналов в /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 "^$"
1
ответ дан 31 July 2018 в 12:31
  • 1
    Тео. Я все еще получаю 1320 записей. Сценарий Egil возвращает 1180. – user13807 7 April 2011 в 22:57
  • 2
    Должно ли cat history.log > allhistory быть cat history.log > allhistory.log? – user 11 November 2013 в 13:05

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

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

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

1
ответ дан 31 July 2018 в 12:31

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

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

Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.

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

1
ответ дан 31 July 2018 в 12:31

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

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

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

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

EDIT: Я считаю, что 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]
4
ответ дан 31 July 2018 в 12:31

Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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

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

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
ответ дан 31 July 2018 в 12:31

Возможно, еще не все, что вы ищете ...

dpkg --get-selections

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

dpkg --get-selections | wc -l
1
ответ дан 31 July 2018 в 12:31

Вы получаете данные из журналов в /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 "^$"
1
ответ дан 2 August 2018 в 03:43
  • 1
    Тео. Я все еще получаю 1320 записей. Сценарий Egil возвращает 1180. – user13807 7 April 2011 в 22:57
  • 2
    Должно ли cat history.log > allhistory быть cat history.log > allhistory.log? – user 11 November 2013 в 13:05

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

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

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

1
ответ дан 2 August 2018 в 03:43

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

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

Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.

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

1
ответ дан 2 August 2018 в 03:43

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

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

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

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

EDIT: Я считаю, что 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]
4
ответ дан 2 August 2018 в 03:43

Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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

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

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
ответ дан 2 August 2018 в 03:43

Возможно, еще не все, что вы ищете ...

dpkg --get-selections

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

dpkg --get-selections | wc -l
1
ответ дан 2 August 2018 в 03:43

Вы получаете данные из журналов в /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 "^$"
1
ответ дан 4 August 2018 в 19:47
  • 1
    Тео. Я все еще получаю 1320 записей. Сценарий Egil возвращает 1180. – user13807 7 April 2011 в 22:57
  • 2
    Должно ли cat history.log > allhistory быть cat history.log > allhistory.log? – user 11 November 2013 в 13:05

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

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

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

1
ответ дан 4 August 2018 в 19:47

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

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

Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.

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

1
ответ дан 4 August 2018 в 19:47

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

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

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

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

EDIT: Я считаю, что 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]
4
ответ дан 4 August 2018 в 19:47

Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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

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

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
ответ дан 4 August 2018 в 19:47

Возможно, еще не все, что вы ищете ...

dpkg --get-selections

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

dpkg --get-selections | wc -l
1
ответ дан 4 August 2018 в 19:47

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

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