Как мне написать сценарий, чтобы получить тот же список установленного программного обеспечения, о котором сообщает Ubuntu Software Center?
Каждая ссылка, которую я могу найти, упоминает либо dpkg -l, либо rpm -qa (или некоторый вариант), но они обычно включают в себя каждый последний пакет и библиотеку, а что - нет, и вы получаете список из 1000 записей.
Приложение Ubuntu Software Center, однако, показывает очень краткий (и удобный для пользователя) список - в настоящее время 67 предметов в моем ящике Ubuntu. Это тот список, который мне интересен. Может ли кто-нибудь указать мне сценарий, который может получить что-то подобное?
Спасибо.
Вы получаете данные из журналов в /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 "^$"
Насколько я могу судить, программный центр фильтрует на основе раздела, в котором находится пакет. Хотя он не будет точно таким же, как фильтр, который использует Центр программного обеспечения, вы можете сделать что-то подобное, отфильтровывая библиотеку packages:
dpkg --get-selections|grep -i -v "deinstall"|grep -v "lib"
grep - отфильтровывать вещи, которые либо не установлены, либо, как правило, скрыты программным центром. Вы можете добавить больше вещей для фильтрации по мере необходимости - строка «lib» является хорошим индикатором того, что это не приложение для конечного пользователя.
Может быть, APTonCD поможет?
Это инструмент, который сканирует ваши APT-установленные пакеты и строит список для вас. Затем вы можете вручную выбрать / отменить выбор тех, которые хотите, сохранить список и даже загрузить / использовать кеш для сохранения выбранных пакетов в папке с компакт-диском (для автономной автоматической установки установленных приложений)
Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.
APTonCD поставляется по умолчанию в Mint 10, но поскольку они используют одни и те же репозитории Ubuntu, вы можете установить его через менеджера программ.
В 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]
Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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.
Возможно, еще не все, что вы ищете ...
dpkg --get-selections
Если нет (еще не могу прокомментировать), запустите следующее и сообщите мне номер (просто подсчитывает номер строк.
dpkg --get-selections | wc -l
Вы получаете данные из журналов в /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 "^$"
Насколько я могу судить, программный центр фильтрует на основе раздела, в котором находится пакет. Хотя он не будет точно таким же, как фильтр, который использует Центр программного обеспечения, вы можете сделать что-то подобное, отфильтровывая библиотеку packages:
dpkg --get-selections|grep -i -v "deinstall"|grep -v "lib"
grep - отфильтровывать вещи, которые либо не установлены, либо, как правило, скрыты программным центром. Вы можете добавить больше вещей для фильтрации по мере необходимости - строка «lib» является хорошим индикатором того, что это не приложение для конечного пользователя.
Может быть, APTonCD поможет?
Это инструмент, который сканирует ваши APT-установленные пакеты и строит список для вас. Затем вы можете вручную выбрать / отменить выбор тех, которые хотите, сохранить список и даже загрузить / использовать кеш для сохранения выбранных пакетов в папке с компакт-диском (для автономной автоматической установки установленных приложений)
Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.
APTonCD поставляется по умолчанию в Mint 10, но поскольку они используют одни и те же репозитории Ubuntu, вы можете установить его через менеджера программ.
В 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]
Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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.
Возможно, еще не все, что вы ищете ...
dpkg --get-selections
Если нет (еще не могу прокомментировать), запустите следующее и сообщите мне номер (просто подсчитывает номер строк.
dpkg --get-selections | wc -l
Вы получаете данные из журналов в /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 "^$"
Насколько я могу судить, программный центр фильтрует на основе раздела, в котором находится пакет. Хотя он не будет точно таким же, как фильтр, который использует Центр программного обеспечения, вы можете сделать что-то подобное, отфильтровывая библиотеку packages:
dpkg --get-selections|grep -i -v "deinstall"|grep -v "lib"
grep - отфильтровывать вещи, которые либо не установлены, либо, как правило, скрыты программным центром. Вы можете добавить больше вещей для фильтрации по мере необходимости - строка «lib» является хорошим индикатором того, что это не приложение для конечного пользователя.
Может быть, APTonCD поможет?
Это инструмент, который сканирует ваши APT-установленные пакеты и строит список для вас. Затем вы можете вручную выбрать / отменить выбор тех, которые хотите, сохранить список и даже загрузить / использовать кеш для сохранения выбранных пакетов в папке с компакт-диском (для автономной автоматической установки установленных приложений)
Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.
APTonCD поставляется по умолчанию в Mint 10, но поскольку они используют одни и те же репозитории Ubuntu, вы можете установить его через менеджера программ.
В 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]
Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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.
Возможно, еще не все, что вы ищете ...
dpkg --get-selections
Если нет (еще не могу прокомментировать), запустите следующее и сообщите мне номер (просто подсчитывает номер строк.
dpkg --get-selections | wc -l
Вы получаете данные из журналов в /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 "^$"
Насколько я могу судить, программный центр фильтрует на основе раздела, в котором находится пакет. Хотя он не будет точно таким же, как фильтр, который использует Центр программного обеспечения, вы можете сделать что-то подобное, отфильтровывая библиотеку packages:
dpkg --get-selections|grep -i -v "deinstall"|grep -v "lib"
grep - отфильтровывать вещи, которые либо не установлены, либо, как правило, скрыты программным центром. Вы можете добавить больше вещей для фильтрации по мере необходимости - строка «lib» является хорошим индикатором того, что это не приложение для конечного пользователя.
Может быть, APTonCD поможет?
Это инструмент, который сканирует ваши APT-установленные пакеты и строит список для вас. Затем вы можете вручную выбрать / отменить выбор тех, которые хотите, сохранить список и даже загрузить / использовать кеш для сохранения выбранных пакетов в папке с компакт-диском (для автономной автоматической установки установленных приложений)
Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.
APTonCD поставляется по умолчанию в Mint 10, но поскольку они используют одни и те же репозитории Ubuntu, вы можете установить его через менеджера программ.
В 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]
Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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.
Возможно, еще не все, что вы ищете ...
dpkg --get-selections
Если нет (еще не могу прокомментировать), запустите следующее и сообщите мне номер (просто подсчитывает номер строк.
dpkg --get-selections | wc -l
Вы получаете данные из журналов в /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 "^$"
Насколько я могу судить, программный центр фильтрует на основе раздела, в котором находится пакет. Хотя он не будет точно таким же, как фильтр, который использует Центр программного обеспечения, вы можете сделать что-то подобное, отфильтровывая библиотеку packages:
dpkg --get-selections|grep -i -v "deinstall"|grep -v "lib"
grep - отфильтровывать вещи, которые либо не установлены, либо, как правило, скрыты программным центром. Вы можете добавить больше вещей для фильтрации по мере необходимости - строка «lib» является хорошим индикатором того, что это не приложение для конечного пользователя.
Может быть, APTonCD поможет?
Это инструмент, который сканирует ваши APT-установленные пакеты и строит список для вас. Затем вы можете вручную выбрать / отменить выбор тех, которые хотите, сохранить список и даже загрузить / использовать кеш для сохранения выбранных пакетов в папке с компакт-диском (для автономной автоматической установки установленных приложений)
Он также имеет некоторые фильтры, такие как включение зависимостей, включая старые версии и т. Д.
APTonCD поставляется по умолчанию в Mint 10, но поскольку они используют одни и те же репозитории Ubuntu, вы можете установить его через менеджера программ.
В 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]
Какой программный центр, вероятно, показывается (и что вы подразумеваете под приложениями), это файлы .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.
Возможно, еще не все, что вы ищете ...
dpkg --get-selections
Если нет (еще не могу прокомментировать), запустите следующее и сообщите мне номер (просто подсчитывает номер строк.
dpkg --get-selections | wc -l