Comment répertorier toutes les applications installées sur mon système?

18

Je sais, je peux juste appuyer sur Super+ Apour voir toutes les applications installées dans Ubuntu, mais j'ai besoin d'une commande pour répertorier leurs noms. La commande

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

n'est pas non plus une option car il affiche tous les packages installés et contient des pilotes, des noyaux et des bibliothèques.

Danatela
la source

Réponses:

17

J'ai trouvé cette réponse pour les gens qui veulent utiliser bash dans le bon sens. Il est clair que la réponse à la question est liée à la liste des fichiers /usr/share/applications, mais le problème est que la lscommande ne doit jamais être analysée . Dans le passé, je faisais la même erreur, mais maintenant j'ai appris que la meilleure façon est d'utiliser une forboucle pour parcourir les fichiers, même si je dois utiliser quelques touches supplémentaires de mon précieux clavier:

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

J'ai également utilisé dans les opérations de manipulation de chaîne de commande précédentes : supprimé des app24 premiers caractères qui sont /usr/share/applications/et des 8 derniers caractères qui le sont .desktop.


Mise à jour:

Un autre endroit où vous pouvez trouver des applications affichées par le Dash est ~/.local/share/applications/*.desktop. Vous devez donc également exécuter la commande suivante:

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

Pour unifier les deux commandes précédentes, vous pouvez utiliser:

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

Pour obtenir la liste de toutes vos applications installées avec leurs noms, la manière la plus simple est de faire:

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

Il vous donnera une belle liste de tous les packages installés qui ne sont pas des bibliothèques, pas des noyaux, pas des packages de développement comme celui-ci:

* 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 

Il est plus complet car il répertorie également les applications non GUI qui n'apparaîtront pas dans les .desktopfichiers

Braiam
la source
Je ne peux pas être d'accord avec cette réponse à cette question. La réponse est sympa, mais pas à cet endroit. Est suffisamment clair pour que le PO souhaite une liste des applications qui peuvent être trouvées dans le Dash. Et il n'y a pas de place pour zsh, zsh-commonet d'autres!
Radu Rădeanu
@ RaduRădeanu Je viens d'utiliser tail pour montrer un extrait de mes packages installés, qui se termine par z, si j'avais utilisé head, ils commenceront par a, 2) il veut que les applications soient listées dans le "dash"? Êtes-vous sûr?
Braiam
Braiam, est venu, il ne s'agit pas de commencer par z ou par un ... Lorsque vous appuyez sur Super + A sur votre clavier, que voyez-vous apparaître sur votre écran à partir du coin supérieur gauche?
Radu Rădeanu
1
Le titre de RaduRădeanu OP indique qu'il souhaite répertorier toutes les applications installées dans son système, à l'exception des bibliothèques, des pilotes, des noyaux et autres. Il mentionne l'un des moyens (qu'il utilise) pour obtenir la liste des applications, qui utilise Super + A et qui affiche simplement un sous-ensemble des applications installées dans le système; mais cela couvre la plupart sinon la totalité .. la réponse serait même complète avec --no-guisupprimé.
précis
1
..Je reprends la --no-guipartie, il semble qu'elle ne soit pas là pour ce que je pensais.
précis
3

Exécutez la commande ci-dessous pour voir toutes les applications installées,

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

Si vous souhaitez obtenir la liste de toutes les applications installées, exécutez la commande ci-dessous,

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

Il stockera la sortie de commande ci-dessus dans un applications.txtfichier à l'intérieur de votre ~/Desktoprépertoire.

OU

Exécutez également la commande ci-dessous sur le terminal pour répertorier les applications installées,

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

Pour obtenir la liste dans un fichier texte, exécutez la commande ci-dessous

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

Les entrées du bureau pour toutes les applications installées sont stockées dans le /usr/share/applicationsrépertoire, où les noms de fichiers sont au format application-name.desktop.La suppression de la .desktoppartie des noms de fichiers vous donnera la liste totale des applications installées.

Mise à jour:

Comme l'a suggéré @Radu , vous pouvez également trouver des entrées de bureau pour vos applications supplémentaires installées dans le ~/.local/share/applicationsrépertoire.

find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;
Avinash Raj
la source
Merci Radu cependant combien de fois avez-vous vu un nom de fichier contenant une nouvelle ligne? Jamais? Je le pensais. Donc, je ne devrais jamais utiliser quelque chose de très utile à cause d'un cas de bord qui ne se produit pratiquement jamais? Je pense que je vais continuer l'analyse ls- à des fins de représentation et pour des tâches non critiques comme celle ci-dessus - et essayez de garder à l'esprit cette limitation, merci pour la tête!
Rolf
0

Si vous avez besoin d'une liste des applications affichées lorsque vous appuyez sur Super+ A, vous pouvez utiliser ls /usr/share/applications. La seule chose que vous devez faire est de remplacer la .desktopfin, ce qui est une tâche assez simple. Je le fais avec sed:

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

Mais vous pouvez le faire après avoir reçu la liste à l'aide de l'éditeur de texte.

Danatela
la source
2
@Radu, en fait, les /usr/share/application/*.desktopfichiers ne contiennent aucun caractère spécial, donc l'analyse en lsparticulier dans ce cas est autorisée.
Danatela
Cela ne répertorie pas toutes les applications affichées lorsque vous appuyez sur Super + A.
Radu Rădeanu
4
@ Semi-bit, vous supposez que rien ne s'est mal passé. Et si je suis un idiot et que j'ai créé un fichier appelé bad name.desktoppar exemple? Il n'y a aucune raison de risquer lsici.
terdon
0

Vous ne savez pas pourquoi la plupart des réponses publiées impliquent d'extraire le nom de fichier des raccourcis .desktop. Votre nom de fichier de raccourci .desktop peut être n'importe quoi, mais ce qui compte, c'est le Namechamp à l'intérieur du fichier de raccourci. Si vous souhaitez créer la liste des noms des applications installées qui s'affichent dans Dash, il suffit de "grep" ce champ sous[Desktop Entry]

Code rudimentaire, avec 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

Mais cela ne prend pas en compte les raccourcis qui ne sont pas affichés dans Dash. Quelqu'un avec une meilleure compréhension de la spécification .desktop pourrait vouloir étendre davantage ce code pour exclure ce genre de raccourcis

Edit: une autre tentative, avec 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
Silex
la source
3
Vous devriez vraiment étendre votre réponse pour être plus une réponse.
Seth
@Seth, j'ai posté trop tôt, désolé. Je me grattais la tête pour savoir comment analyser ini avec bash
Flint
@AvinashRaj J'aimerais que ce soit aussi simple mais ce n'est pas la bonne façon d'analyser ini. Le code explosera et émettra des bruits s'il y a plus d'une Nameentrée dans .desktop que vous analysez, ce qui est toujours le cas. De plus, vous ne devez pas supposer que toutes les lignes qui vous intéressent seront sur un numéro de ligne fixe
Flint
@AvinashRaj Toujours mauvais: P Vous n'avez pas pris en compte que cette Nameoption pourrait être en dehors de cette plage de numéros de ligne, en particulier avec beaucoup d'options ou de lignes vides en dessous [Desktop\ Entry ]. Et le fichier .desktop est un fichier ini
Flint
0

L'intervenant souhaite répertorier les noms de toutes les "applications" installées.

Concernant les applications avec des fichiers .desktop :

  • la réponse de Danatela concerne les applications contenant des fichiers .desktop dans/usr/share/applications
  • comme l'a souligné Radu , les applications avec des fichiers .desktop peuvent également être trouvées dans~/.local/share/applications
  • à ce stade, il peut être noté que les applications avec des fichiers .desktop peuvent avoir deux noms
    • un "nom" est disponible en interrogeant Dash dans Unity ou dans les menus de Xubuntu (par exemple). Ce nom est dérivé de la Name=ligne du fichier .desktop respectif. Un exemple est "Table de caractères".
    • l'autre "nom" est celui à utiliser lors de l'exécution de l'application à partir du terminal et est le premier mot après Exec=. Dans le cas de "Character Map", ce serait gucharmap.
  • les deux noms (et le fichier .desktop) peuvent être liés en utilisant:
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • et
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

Concernant les applications sans fichiers .desktop :

Selon la façon dont on définit «app», certains n'ont pas de fichiers .desktop.

  • Would quelque chose comme conky, poppler-utils, qpdf, xdotoolet wmctrlêtre considérés comme des « applications »? Comment les identifier et les répertorier par leur nom (en supposant que l'on les ait installés)?
  • Qu'en est- il awk, find, grep, lset sedde nommer un peu plus? S'agit-il d'applications ou non?

Si tout ce qui a une commande est considéré comme une application, alors la commande Linux pour répertorier toutes les commandes et alias disponibles et cette réponse aidera à les identifier.

DK Bose
la source