Como posso listar todos os aplicativos instalados no meu sistema?

14

Eu sei, eu só consigo acessar Super + A para ver todos os aplicativos instalados no Ubuntu, mas eu preciso de um comando para listar seus nomes. O comando

dpkg --get-selections | awk '{print }'

também não é uma opção porque mostra todos os pacotes instalados e contém drivers, kernels e bibliotecas.

    
por Danatela 13.03.2014 / 11:00

6 respostas

12

Eu vim com essa resposta para pessoas que querem usar bash no bom caminho. É claro que a resposta da pergunta está relacionada à listagem dos arquivos de /usr/share/applications , mas o problema é que ls command shouldn ' t ser analisado sempre . No passado eu estava cometendo o mesmo erro, agora eu aprendi que a melhor maneira é usar um loop for para iterar os arquivos, mesmo que eu precise usar mais algumas teclas do meu precioso teclado:

for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done

Eu também usei no comando anterior operações de manipulação de string : removi app first 24 caracteres que são /usr/share/applications/ e últimos 8 caracteres que são .desktop .

Atualização:

Outro local onde você pode encontrar aplicativos mostrados pelo Dash é ~/.local/share/applications/*.desktop . Então você precisa executar o seguinte comando também:

for app in ~/.local/share/applications/*.desktop; do echo "${app:37:-8}"; done

Para unificar os dois comandos anteriores, você pode usar:

for app in /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop; do app="${app##/*/}"; echo "${app::-8}"; done
    
por Radu Rădeanu 13.03.2014 / 16:13
3

Para obter a lista de todos os aplicativos instalados com seus nomes, a maneira mais fácil é:

sudo apt-get install aptitude
aptitude -F' * %p -> %d ' --no-gui --disable-columns search '?and(~i,!?section(libs), !?section(kernel), !?section(devel))'

Você irá obter uma boa lista de todos os pacotes instalados que não são bibliotecas, não kernels, não pacotes de desenvolvimento como este:

* 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 

É mais completo, pois também lista aplicativos não gui que não aparecem nos arquivos .desktop

    
por Braiam 16.03.2014 / 12:58
2

Execute o comando abaixo para ver todos os aplicativos instalados,

ls /usr/share/applications | awk -F '.desktop' ' { print }' -

Se você deseja obter a lista de todos os aplicativos instalados, execute o comando abaixo,

ls /usr/share/applications | awk -F '.desktop' ' { print }' - > ~/Desktop/applications.txt

Ele armazenará a saída do comando acima no arquivo applications.txt dentro do diretório ~/Desktop .

OU

Execute também o comando abaixo no terminal para listar os aplicativos instalados,

find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort

Para obter a lista no arquivo de texto, execute o comando abaixo

find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort > ~/Desktop/applications.txt

As entradas da área de trabalho para todos os aplicativos instalados são armazenadas dentro do diretório /usr/share/applications , onde os nomes dos arquivos estão no formato application-name.desktop .Remover a parte .desktop dos nomes dos arquivos fornecerá a lista total de aplicativos instalados.

Atualização:

As @Radu sugeriu , você também pode encontrar entradas de área de trabalho para seus aplicativos instalados adicionais dentro do diretório ~/.local/share/applications .

find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;
    
por Avinash Raj 13.03.2014 / 11:14
0

Se você precisar de uma lista de aplicativos mostrada quando você apertar Super + A , você pode usar ls /usr/share/applications . A única coisa que você deve fazer é substituir .desktop ending, o que é uma tarefa bastante simples. Eu faço isso com sed :

ls /usr/share/applications | sed s/.desktop// - > installed-apps.txt

Mas você pode fazer isso depois de receber a lista usando o editor de texto.

    
por Danatela 13.03.2014 / 11:16
0

Não sei por que a maioria das respostas postadas envolve a extração do nome de arquivo dos atalhos .desktop. Seu nome de arquivo de atalho .desktop pode ser qualquer coisa, mas o que importa é o campo Name dentro do arquivo de atalho. Se você deseja criar a lista de nomes de aplicativos instalados no Dash, apenas "grep" esse campo em [Desktop Entry]

Código Rudimental, com 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

Mas isso não leva em conta os atalhos que estão ocultos de serem mostrados no Dash. Alguém com melhor compreensão da especificação .desktop pode querer expandir ainda mais esse código para excluir esses tipos de atalhos

Edit: outra tentativa, com o 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
    
por Flint 16.03.2014 / 18:27
0

O questionador deseja listar os nomes de todos os "aplicativos" instalados.

Sobre aplicativos com arquivos .desktop :

  • a resposta da Danatela lida com aplicativos que possuem arquivos .desktop em /usr/share/applications
  • como apontado por Radu , aplicativos com arquivos .desktop também podem ser encontrados em ~/.local/share/applications
  • neste ponto, pode-se notar que aplicativos com arquivos .desktop podem ter dois nomes
    • um "nome" está disponível consultando o Dash na Unity ou nos menus do Xubuntu (por exemplo). Esse nome é derivado da linha Name= no respectivo arquivo .desktop. Um exemplo é "Mapa de Caracteres".
    • o outro "nome" é aquele a ser usado ao executar o aplicativo no terminal e é a primeira palavra depois de Exec= . No caso de "Mapa de Caracteres", isso seria gucharmap .
  • os dois nomes (e o arquivo .desktop) podem estar relacionados usando:
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • e
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

Com relação a aplicativos sem arquivos .desktop :

Dependendo de como se define "app", alguns não possuem arquivos .desktop.

  • seria algo como conky , poppler-utils , qpdf , xdotool e wmctrl considerados "apps"? Como estes devem ser identificados e listados por seus nomes (assumindo que um tenha sido instalado)?
  • Que tal awk , find , grep , ls e sed mencionar um pouco mais? São aplicativos ou não?

Se qualquer coisa com um comando for considerado como um aplicativo, comando do Linux para listar todos os comandos disponíveis e aliases e essa resposta ajudará a identificá-los.

    
por DK Bose 17.03.2014 / 08:49