如何列出系统中安装的所有应用程序?
我知道,我可以点击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
。
- 通过查询Unity中的Dash或Xubuntu中的菜单(例如)可以获得一个“名称”。 此名称派生自相应.desktop文件中的
- 使用以下两个名称(和.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文件。
- 将
qpdf
,poppler-utils
,qpdf
,xdotool
和wmctrl
视为“应用程序”? 如何通过名称识别和列出这些(假设已经安装了它们)? - 请问
awk
,find
,grep
,ls
和sed
更多名字? 它们是应用程序还是不是?
如果任何有命令的东西被认为是一个应用程序,那么Linux命令列出所有可用的命令和别名 , 这个答案将有助于识别它们。