Script para obter a lista de aplicativos (curtos) instalados semelhante ao Ubuntu Software Center?

5

Como eu poderia escrever um script para obter a mesma lista de softwares instalados, conforme relatado pelo Ubuntu Software Center?

Toda referência que eu posso encontrar menciona dpkg -l ou rpm -qa (ou alguma variante), mas estes geralmente incluem todos os últimos pacotes e bibliotecas e o que não, e você acaba com uma lista de mais de 1.000 entradas .

O aplicativo Ubuntu Software Center, no entanto, mostra uma lista muito concisa (e amigável ao homem) - atualmente 67 itens na minha caixa do Ubuntu. Este é o tipo de lista em que estou interessado. Alguém pode me apontar para um script que pode obter algo semelhante? De preferência, algo que pode ser executado em outras distribuições, mas vou pegar o que puder.

Obrigado.

    
por user13807 07.04.2011 / 18:46

6 respostas

4

No Python, você pode obter a lista de pacotes instalados desta maneira:

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

Se você quiser saber mais informações sobre os pacotes, o processo é um pouco mais complicado. Veja a documentação do módulo apt do Python para todas as informações disponíveis. Além disso, você pode pesquisar a origem do Centro de Software para descobrir o que eles fazem.

Você não obterá essas informações simplesmente observando algum arquivo em algum lugar ou executando um comando simples. Você precisará fazer alguns scripts.

EDIT: Acredito que o Centro de Software obtém sua lista de pacotes para mostrar os pacotes que enviam arquivos .desktop. Pode ser mais complicado do que isso, mas você pode facilmente filtrar a lista para os pacotes que estão instalados e ter um arquivo .desktop. Este exemplo continua meu código anterior:

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]
    
por Scott Severance 07.04.2011 / 20:22
1

Pode ainda não ser o que você está procurando ...

dpkg --get-selections

Se não (ainda não posso comentar), execute o seguinte e deixe-me saber o número (apenas conta o número de linhas.

dpkg --get-selections | wc -l
    
por Theo 07.04.2011 / 19:19
1

Você cat obtém os dados dos registros em /var/log/apt . Conforme os logs são girados, a maioria deles é compactada. Primeiro combinamos o log atual com os arquivos compactados, antes de extrairmos todos os pacotes que foram instalados, mas não automaticamente. Esta foi apenas tentativa e erro da minha parte, por isso provavelmente pode ser limpo um pouco.

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 "^$"
    
por Egil 07.04.2011 / 19:37
1

Tanto quanto eu posso dizer, o Centro de Software filtra com base na seção em que o pacote está. Embora não seja exatamente o mesmo que o filtro que o Centro de Software usa, você pode fazer algo semelhante filtrando a biblioteca pacotes:

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

O grep é filtrar as coisas que não estão instaladas ou são geralmente ocultas pelo centro de software. Você pode adicionar mais itens para filtrar conforme necessário - a string "lib" é um bom indicador de que não é um aplicativo de usuário final.

    
por ImaginaryRobots 07.04.2011 / 20:42
1

Talvez o APTonCD possa ajudar?

É uma ferramenta que verifica seus pacotes instalados pelo APT e cria uma lista para você. Você pode então selecionar / desmarcar manualmente aqueles que você quer, salvar a lista, e pode até baixar / usar o cache para salvar pacotes selecionados em um CD / pasta (para uma instalação automática offline de aplicativos atualmente instalados)

Ele também tem alguns filtros, como incluir dependências, incluir versões antigas, etc.

O APTonCD vem como padrão no Mint 10, mas como eles compartilham os mesmos repositórios do Ubuntu, você pode instalá-lo através do gerenciador de software.

    
por MestreLion 07.04.2011 / 22:04
0

Qual centro de software provavelmente está sendo exibido (e o que você entende por aplicativos) é o .desktop files. Essencialmente, eles servem como atalhos para arquivos binários reais (pense em termos de atalhos do Windows e .exe arquivos).

A maioria dos aplicativos (mas não todos!) instalados pelo gerenciador de software tem um atalho em /usr/share/applications . A estrutura desse arquivo é algo assim:

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

O escopo do aplicativo da Unity analisa esses arquivos para extrair descrição e nome do aplicativo. Podemos fazer algo semelhante com este comando:

 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}}' 

Basicamente, geramos uma lista de todos esses .desktop arquivos, analisamos eles para extrair uma linha com Name= , mas exibimos apenas parte da linha após = sign.

Como eu mencionei, alguns dos aplicativos não têm .desktop file OU podem ser armazenados na pasta /opt , então você pode querer executar o mesmo comando (com -maxdepth 1 removido) no /opt diretório também.

    
por Sergiy Kolodyazhnyy 06.04.2016 / 15:03

Tags