Come posso elencare tutte le applicazioni installate nel mio sistema?


18

Lo so, posso solo premere Super+ Aper vedere tutte le app installate in Ubuntu, ma ho bisogno di un comando per elencare i loro nomi. Il comando

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

inoltre non è un'opzione perché mostra tutti i pacchetti installati e contiene driver, kernel e librerie.

Risposte:


17

Ho trovato questa risposta per le persone che vogliono usare bash in modo positivo. È chiaro che la risposta alla domanda è correlata all'elenco dei file da /usr/share/applications, ma il problema è che il lscomando non dovrebbe mai essere analizzato . In passato, stavo facendo lo stesso errore, ma ora ho imparato che il modo migliore è usare un forloop per scorrere i file, anche se devo usare altri tasti dalla mia preziosa tastiera:

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

Ho anche usato nelle precedenti operazioni di manipolazione della stringa di comando : rimosso dai appprimi 24 caratteri che sono /usr/share/applications/e gli ultimi 8 caratteri che sono .desktop.


Aggiornare:

Un altro posto dove puoi trovare le applicazioni mostrate dal Dash è ~/.local/share/applications/*.desktop. Quindi è necessario eseguire anche il seguente comando:

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

Per unificare i due comandi precedenti, è possibile utilizzare:

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

4

Per ottenere l'elenco di tutte le applicazioni installate con i loro nomi, il modo più semplice è fare:

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

Ti porterà un bel elenco di tutti i pacchetti installati che non sono librerie, non kernel, non pacchetti di sviluppo come questo:

* 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 

È più completo poiché elenca anche le applicazioni non GUI che non verranno visualizzate nei .desktopfile


Non posso essere d'accordo con questa risposta a questa domanda. La risposta è buona, ma non in questo posto. È abbastanza chiaro che l'OP vuole un elenco con applicazioni che possono essere trovate nel Dash. E non c'è posto per zsh, zsh-commone altri!
Radu Rădeanu,

@ RaduRădeanu Ho appena usato tail per mostrare un estratto dei miei pacchetti installati, che termina con z, se avessi usato head, inizieranno con a, 2) vuole applicazioni elencate nel "trattino"? Sei sicuro?
Braiam

Braiam, dai, non si tratta di quale inizio con z o con un ... Quando premi Super + A sulla tastiera, cosa vedi apparire sullo schermo a partire dall'angolo in alto a sinistra?
Radu Rădeanu,

1
@ RaduRădeanu Il titolo dell'OP dice che vuole elencare tutte le applicazioni installate nel suo sistema escluse le librerie, i driver, i kernel e altri .. Indica uno dei modi (che usa) per ottenere l'elenco delle app, che utilizza Super + A e che mostra solo un sottoinsieme delle applicazioni installate nel sistema; ma questo copre la maggior parte se non tutti .. la risposta sarebbe addirittura completa con --no-guirimosso.
preciso

1
.. Riprendo la --no-guiparte, sembra che non sia lì per quello che pensavo fosse.
preciso

3

Esegui il comando seguente per vedere tutte le applicazioni installate,

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

Se desideri ottenere l'elenco di tutte le applicazioni installate, esegui il comando seguente,

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

Memorizzerà l'output del comando precedente in un applications.txtfile all'interno della ~/Desktopdirectory.

O

Esegui anche il comando seguente sul terminale per elencare le applicazioni installate,

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

Per ottenere l'elenco in un file di testo, eseguire il comando seguente

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

Le voci del desktop per tutte le applicazioni installate sono memorizzate all'interno della /usr/share/applicationsdirectory, in cui i nomi dei file sono nel formato. La application-name.desktoprimozione della .desktopparte dai nomi dei file fornisce l'elenco totale delle applicazioni installate.

Aggiornare:

Come suggerito da @Radu , puoi anche trovare le voci del desktop per le tue applicazioni installate aggiuntive all'interno della ~/.local/share/applicationsdirectory.

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


Grazie Radu, tuttavia, quante volte hai visto un nome file contenente una nuova riga? Mai? Pensavo così . Quindi non dovrei mai usare qualcosa di molto utile a causa di un caso limite che praticamente non accade mai? Penso che continuerò ad analizzare ls- per scopi rappresentativi e per compiti non critici come quello sopra - e cercherò di tenere presente questo limite, grazie per il testa a testa!
Rolf,

0

Se hai bisogno di un elenco di applicazioni mostrate quando premi Super+ A, puoi usare ls /usr/share/applications. L'unica cosa che dovresti fare è sostituire il .desktopfinale, che è un compito abbastanza semplice. Lo faccio con sed:

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

Ma puoi farlo dopo aver ricevuto l'elenco usando l'editor di testo.



2
@Radu, in realtà, i /usr/share/application/*.desktopfile non contengono caratteri speciali, quindi l'analisi lsè consentita in questo caso.
Danatela,

Questo non elenca tutte le applicazioni mostrate quando si preme Super + A.
Radu Rădeanu,

4
@ Semi-bit stai assumendo che nulla sia andato storto. Cosa succede se sono un idiota e ho creato un file chiamato bad name.desktopad esempio? Non c'è motivo di rischiare lsqui.
terdon,

0

Non sono sicuro del motivo per cui la maggior parte delle risposte pubblicate comporta l'estrazione del nome file delle scorciatoie .desktop. Il tuo nome file di scelta rapida .desktop può essere qualsiasi cosa, ma ciò che conta è il Namecampo all'interno del file di scelta rapida. Se vuoi costruire la lista dei nomi delle applicazioni installate mostrate in Dash, basta "grep" quel campo sotto[Desktop Entry]

Codice rudimentale, con 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

Ma questo non tiene conto delle scorciatoie nascoste dall'essere mostrate in Dash. Qualcuno con una migliore comprensione delle specifiche .desktop potrebbe voler espandere ulteriormente questo codice per escludere quel tipo di scorciatoie

Modifica: un altro tentativo, con 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

3
Dovresti davvero espandere la tua risposta per essere più di una risposta.
Seth

@Seth ho pubblicato troppo presto, scusa. Mi stavo grattando la testa per capire come analizzare ini con bash
Flint

@AvinashRaj Vorrei che fosse così semplice ma non è il modo corretto di analizzare ini. Il codice esploderà e genererà rumori se ci sono più Namevoci in .desktop che stai analizzando, come sempre. Inoltre, non dovresti presumere che tutte le linee a cui sei interessato siano sul numero di linea fissa
Flint

@AvinashRaj Ancora male: P Non hai tenuto conto del fatto che l' Nameopzione potrebbe essere al di fuori di quell'intervallo del numero di riga, specialmente con molte opzioni o righe vuote sotto [Desktop\ Entry ]. E il file .desktop è un file ini
Flint

0

L'interrogante desidera elencare i nomi di tutte le "app" installate.

Per quanto riguarda le app con file .desktop :

  • la risposta di Danatela riguarda le app che contengono file .desktop/usr/share/applications
  • come sottolineato da Radu , è possibile trovare anche app con file .desktop~/.local/share/applications
  • a questo punto, si può notare che le app con file .desktop possono avere due nomi
    • un "nome" è disponibile eseguendo una query sul Dash in Unity o dai menu in Xubuntu (ad esempio). Questo nome deriva dalla Name=riga nel rispettivo file .desktop. Un esempio è "Mappa caratteri".
    • l'altro "nome" è quello da utilizzare quando si esegue l'app dal terminale ed è la prima parola dopo Exec=. Nel caso di "Mappa caratteri", sarebbe gucharmap.
  • i due nomi (e il file .desktop) potrebbero essere correlati 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

Per quanto riguarda le app senza file .desktop :

A seconda di come si definisce "app", alcuni non hanno file .desktop.

  • Sarebbe qualcosa di simile conky, poppler-utils, qpdf, xdotoole wmctrlda considerare "apps"? Come devono essere identificati ed elencati dai loro nomi (supponendo che uno li abbia installati)?
  • Che dire awk, find, grep, lse sedper citarne alcuni di più? Sono app o no?

Se qualcosa che ha un comando è pensato come un'app, allora il comando Linux per elencare tutti i comandi e gli alias disponibili e questa risposta aiuterà a identificarli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.