Wie kann ich alle auf meinem System installierten Anwendungen auflisten?

18

Ich weiß, ich kann nur Super+ drücken A, um alle installierten Apps in Ubuntu anzuzeigen, aber ich benötige einen Befehl, um deren Namen aufzulisten. Der Befehl

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

ist auch keine Option, da alle installierten Pakete angezeigt werden und Treiber, Kernel und Bibliotheken enthalten sind.

Danatela
quelle

Antworten:

17

Ich habe diese Antwort für Leute gefunden, die bash gut nutzen wollen. Es ist klar, dass sich die Antwort auf die Frage auf die Auflistung der Dateien bezieht /usr/share/applications, aber das Problem ist, dass der lsBefehl niemals analysiert werden sollte . In der Vergangenheit habe ich den gleichen Fehler gemacht, aber jetzt habe ich gelernt, dass der beste Weg ist, eine forSchleife zu verwenden, um die Dateien zu durchlaufen, auch wenn ich noch einige Tasten von meiner wertvollen Tastatur verwenden muss:

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

Ich habe auch in den vorherigen Operationen zur Manipulation von Befehlszeichenfolgen verwendet: Von den appersten 24 Zeichen, die es gibt, /usr/share/applications/und den letzten 8 Zeichen, die es gibt, entfernt .desktop.


Aktualisieren:

Ein weiterer Ort, an dem Sie Anwendungen finden können, die vom Dash angezeigt werden, ist ~/.local/share/applications/*.desktop. Sie müssen also auch den folgenden Befehl ausführen:

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

Um die beiden vorherigen Befehle zu vereinheitlichen, können Sie Folgendes verwenden:

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

Der einfachste Weg, um eine Liste aller installierten Anwendungen mit ihren Namen zu erhalten, ist:

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

Sie erhalten eine schöne Liste aller installierten Pakete, die keine Bibliotheken, keine Kernel oder Entwicklungspakete sind:

* 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 

Es ist vollständiger, da es auch Nicht-GUI-Anwendungen auflistet, die nicht in den .desktopDateien erscheinen

Braiam
quelle
Ich kann dieser Antwort auf diese Frage nicht zustimmen. Die Antwort ist nett, aber nicht an diesem Ort. Ist klar genug, dass das OP eine Liste mit Anwendungen will, die im Dash zu finden sind. Und es ist nicht Platz für zsh, zsh-commonund andere!
Radu Rădeanu
@ RaduRădeanu Ich habe gerade tail verwendet, um einen Auszug meiner installierten Pakete anzuzeigen, der mit z endet. Wenn ich head verwendet hätte, würden sie mit a beginnen. 2) Er möchte, dass Anwendungen im "Bindestrich" aufgelistet werden. Bist du sicher?
Braiam
Braiam, komm schon, es geht nicht darum, welcher Start mit z oder mit a ... Wenn du Super + A auf deiner Tastatur drückst, was siehst du dann auf deinem Bildschirm, beginnend in der oberen linken Ecke?
Radu Rădeanu
1
Der Titel von @ RaduRădeanu OP besagt, dass er alle in seinem System installierten Anwendungen auflisten möchte, ausgenommen Bibliotheken, Treiber, Kernel und andere und das zeigt nur eine Teilmenge der auf dem System installierten Anwendungen an; aber das deckt die meisten wenn nicht alle ab .. die antwort wäre sogar komplett mit --no-guientfernt.
präzise
1
..Ich nehme das --no-guiTeil zurück, es scheint nicht da zu sein, was ich dachte.
präzise
3

Führen Sie den folgenden Befehl aus, um alle installierten Anwendungen anzuzeigen.

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

Wenn Sie eine Liste aller installierten Anwendungen erhalten möchten, führen Sie den folgenden Befehl aus:

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

Die obige Befehlsausgabe wird in einer applications.txtDatei in Ihrem ~/DesktopVerzeichnis gespeichert .

ODER

Führen Sie auch den folgenden Befehl auf dem Terminal aus, um die installierten Anwendungen aufzulisten.

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

Führen Sie den folgenden Befehl aus, um die Liste in einer Textdatei abzurufen

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

Desktop-Einträge für alle installierten Anwendungen werden in einem /usr/share/applicationsVerzeichnis gespeichert , in dem die Dateinamen im Format. Durch application-name.desktopEntfernen des .desktopTeils aus den Dateinamen erhalten Sie die vollständige Liste der installierten Anwendungen.

Aktualisieren:

Wie von @Radu vorgeschlagen , finden Sie im ~/.local/share/applicationsVerzeichnis auch Desktop-Einträge für Ihre zusätzlich installierten Anwendungen .

find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;
Avinash Raj
quelle
Danke Radu aber wie oft hast du einen Dateinamen mit einem Zeilenumbruch gesehen? Noch nie? Dachte es mir. Ich sollte also niemals etwas sehr Nützliches verwenden, weil es so gut wie nie vorkommt. Ich denke, ich werde weiter analysieren ls- zu Darstellungszwecken und für unkritische Aufgaben wie die oben genannte - und versuchen, diese Einschränkung zu berücksichtigen. Vielen Dank für die Hinweise!
Rolf
0

Wenn Sie eine Liste der Anwendungen benötigen, die beim Drücken von Super+ angezeigt werden A, können Sie verwenden ls /usr/share/applications. Das einzige, was Sie tun sollten, ist das .desktopEnde zu ersetzen , was eine recht einfache Aufgabe ist. Ich mache es mit sed:

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

Sie können dies jedoch tun, nachdem Sie die Liste mit dem Texteditor erhalten haben.

Danatela
quelle
2
@Radu /usr/share/application/*.desktopDateien enthalten eigentlich keine Sonderzeichen, daher ist das Parsen lsbesonders in diesem Fall zulässig.
Danatela
Dies listet nicht alle Anwendungen auf, die angezeigt werden, wenn Sie Super + A drücken.
Radu Rădeanu
4
@ Semi-bit du gehst davon aus, dass nichts schief gelaufen ist. Was ist, wenn ich ein Idiot bin und eine Datei namens bad name.desktopzum Beispiel erstellt habe? Hier gibt es keinen Grund, ein Risiko lseinzugehen.
Terdon
0

Ich bin mir nicht sicher, warum bei den meisten Antworten der Dateiname der .desktop-Verknüpfungen extrahiert wird. Der Dateiname der Desktop-Verknüpfung kann beliebig sein, es kommt jedoch nicht auf das NameFeld in der Verknüpfungsdatei an. Wenn Sie die Liste der installierten Anwendungsnamen erstellen möchten, die in Dash angezeigt werden, klicken Sie einfach in das entsprechende Feld[Desktop Entry]

Rudimentaler Code, mit 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

Dabei werden jedoch keine Verknüpfungen berücksichtigt, die nicht in Dash angezeigt werden können. Jemand, der die .desktop-Spezifikation besser versteht, möchte diesen Code möglicherweise weiter erweitern, um diese Art von Verknüpfungen auszuschließen

Edit: ein weiterer Versuch, mit 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
Feuerstein
quelle
3
Sie sollten Ihre Antwort wirklich erweitern, um eher eine Antwort zu sein.
Seth
@Seth Ich habe zu früh gepostet, sorry. Ich kratzte mir am Kopf und überlegte, wie man Ini mit Bash parst
Flint
@AvinashRaj Ich wünschte, es wäre so einfach, aber das ist nicht der richtige Weg, um ini zu analysieren. Der Code wird explodieren und Geräusche verursachen, wenn mehr als ein NameEintrag in der .desktop-Datei vorhanden ist, die Sie analysieren. Dies ist immer der Fall. Außerdem sollten Sie nicht davon ausgehen, dass alle Linien, an denen Sie interessiert sind, eine Festnetznummer haben
Flint,
@AvinashRaj Immer noch schlecht: P Sie haben nicht berücksichtigt, dass diese NameOption außerhalb dieses Bereichs der Zeilennummer liegen könnte, insbesondere bei vielen Optionen oder Leerzeilen darunter [Desktop\ Entry ]. Und .desktop-Datei ist eine INI-Datei
Flint
0

Der Fragesteller möchte die Namen aller installierten "Apps" auflisten.

Bezüglich Apps mit .desktop-Dateien :

  • Die Antwort von Danatela befasst sich mit Apps, in denen .desktop-Dateien gespeichert sind/usr/share/applications
  • Wie Radu ausführte , finden sich Apps mit .desktop-Dateien auch in~/.local/share/applications
  • An dieser Stelle sei angemerkt, dass Apps mit .desktop-Dateien zwei Namen haben können
    • Ein "Name" ist verfügbar, wenn Sie den Dash in Unity oder über Menüs in Xubuntu abfragen (z. B.). Dieser Name leitet sich aus der Name=Zeile in der jeweiligen .desktop-Datei ab. Ein Beispiel ist "Character Map".
    • Der andere "Name" ist derjenige, der verwendet wird, wenn die App vom Terminal aus ausgeführt wird, und ist das erste Wort danach Exec=. Im Fall von "Character Map" wäre das gucharmap.
  • Die beiden Namen (und die .desktop-Datei) können folgendermaßen verknüpft werden:
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • und
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

Bezüglich Apps ohne .desktop-Dateien :

Abhängig davon, wie man "App" definiert, haben einige keine .desktop-Dateien.

  • wäre so etwas wie conky, poppler-utils, qpdf, xdotoolund wmctrlals „Apps“ werden? Wie sollen diese identifiziert und mit ihren Namen aufgelistet werden (vorausgesetzt, man hat sie installiert)?
  • Was ist awk, find, grep, lsund sedetwas mehr zu nennen? Sind sie Apps oder nicht?

Wenn irgendetwas , das einen Befehl hat, als App betrachtet wird, hilft der Linux-Befehl, alle verfügbaren Befehle und Aliase aufzulisten, und diese Antwort hilft, sie zu identifizieren.

Gerechtigkeit für Monica
quelle