如何列出系统中安装的所有应用程序?

我知道,我可以点击Super + A来查看Ubuntu中所有已安装的应用程序,但我需要一个命令来列出他们的名字。 命令

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

也不是一个选项,因为它显示所有已安装的包,它包含驱动程序,内核和库。

对于想要以好方式使用bash的人,我想出了这个答案。 很明显,问题的答案与/usr/share/applications中的文件列表有关,但问题是ls命令不应该被解析 。 在过去,我犯了同样的错误,但现在我了解到最好的方法是使用for循环来迭代文件,即使我必须使用来自我宝贵键盘的更多键:

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

我还在之前的命令字符串操作操作中使用:从app删除前24个字符,即/usr/share/applications/ ,最后8个字符是.desktop


更新:

另一个可以找到Dash显示的应用程序的地方是~/.local/share/applications/*.desktop 。 所以你还需要运行以下命令:

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

要统一前两个命令,您可以使用:

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

要获取所有已安装应用程序及其名称的列表,最简单的方法是:

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

它将为您提供一个很好的列表,列出所有已安装的软件包,而不是内核,而不是像这样的开发包:

 * 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 

它更完整,因为它还列出了不会出现在.desktop文件中的非GUI应用程序

运行以下命令以查看所有已安装的应用程序,

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

如果要获取所有已安装应用程序的列表,请运行以下命令,

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

它会将上面的命令输出存储到~/Desktop目录下的applications.txt文件中。

要么

在终端上运行以下命令列出已安装的应用程序,

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

要获取文本文件中的列表,请运行以下命令

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

所有已安装应用程序的桌面条目都存储在/usr/share/applications目录中,其中文件名的格式为application-name.desktop从文件名中删除.desktop部分将为您提供已安装应用程序的总列表。

更新:

正如@Radu建议的那样 ,您还可以在~/.local/share/applications目录中找到其他已安装应用程序的桌面条目。

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

如果您需要在点击Super + A时显示的应用程序列表,则可以使用ls /usr/share/applications 。 你唯一应该做的就是替换.desktop结尾,这是一个非常简单的任务。 我是用sed做的:

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

但是您可以在使用文本编辑器收到列表后执行此操作。

不确定为什么发布的大部分答案都涉及提取.desktop快捷方式的文件名。 您的.desktop快捷方式文件名可以是任何其他内容,但重要的是快捷方式文件中的“ Name字段。 如果要构建在Dash中显示的已安装应用程序名称列表,只需在[Desktop Entry]下的“grep”字段

基本代码,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 

但是这并没有考虑到在Dash中隐藏的快捷方式。 更好地了解.desktop规范的人可能希望进一步扩展此代码以排除那些快捷方式

编辑:使用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 

提问者想列出所有已安装的“应用”的名称。

关于使用.desktop文件的应用

  • Danatela的答案涉及在/usr/share/applications中具有.desktop文件的/usr/share/applications
  • 正如Radu所指出的 ,带有.desktop文件的应用程序也可以在~/.local/share/applications
  • 此时,可以注意到具有.desktop文件的应用程序可以有两个名称
    • 通过查询Unity中的Dash或Xubuntu中的菜单(例如)可以获得一个“名称”。 此名称派生自相应.desktop文件中的Name=行。 一个例子是“角色地图”。
    • 另一个“名称”是从终端运行应用程序时使用的名称,是Exec=后的第一个单词。 在“角色地图”的情况下,这将是gucharmap
  • 使用以下两个名称(和.desktop文件) 可以相关 :
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
    • sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop

关于没有.desktop文件的应用

根据人们定义“app”的方式,有些人没有.desktop文件。

  • qpdfpoppler-utilsqpdfxdotoolwmctrl视为“应用程序”? 如何通过名称识别和列出这些(假设已经安装了它们)?
  • 请问awkfindgreplssed更多名字? 它们是应用程序还是不是?

如果任何有命令的东西被认为是一个应用程序,那么Linux命令列出所有可用的命令和别名 , 这个答案将有助于识别它们。