如何列出所有已安装的程序?

Inq*_*Kea 62 application

如何列出我的发行版附带的程序和我手动安装的程序?

Chr*_*own 86

这取决于你的分布。

  • 基于 Aptitude 的发行版(Ubuntu、Debian 等): dpkg -l
  • 基于 RPM 的发行版(Fedora、RHEL 等): rpm -qa
  • 基于 pkg* 的发行版(OpenBSD、FreeBSD 等): pkg_info
  • 基于 Portage 的发行版(Gentoo 等):equery listeix -I
  • 基于 pacman 的发行版(Arch Linux 等): pacman -Q
  • 赛格温: cygcheck --check-setup --dump-only *
  • 懒人软件: slapt-get --installed

然而,所有这些都将列出而不是程序。如果你真的想列出程序,你可能想在你的 中列出可执行文件$PATH,这可以使用 bash 来完成compgen

compgen -c
Run Code Online (Sandbox Code Playgroud)

或者,如果您没有compgen

compgen -c
Run Code Online (Sandbox Code Playgroud)

  • 对于基于 RPM 的系统(Red Hat、SuSE、CentOS 等):`rpm -qa` (4认同)
  • Debian / Ubuntu 是 `dkpg -l | grep ^ii`。 (2认同)
  • 最好区分包管理器而不是“发行版”。NetBSD 的 pkgsrc 可以在任何 Linux 上运行,并且某些包管理器可以在多个 Uinces 上使用。 (2认同)

roz*_*acz 13

回答问题的第二部分(克里斯对第一部分的回答没有什么可添加的)

通常无法列出手动安装的程序及其组件。如果您没有使用包管理器,这不会记录在任何地方。所有你能做的就是找到在标准位置的二进制文件(如克里斯建议),并以类似的方式,猜测其中的一些图书馆或一些手册页等来的。这就是为什么,只要有可能,您应该始终使用您的包管理器安装程序


Rol*_*olf 9

所有其他答案(到目前为止)都涉及包和二进制文件。如果您指的是“桌面应用程序”,即出现在开始菜单中的应用程序,您可以尝试:

ls /usr/share/applications | awk -F '.desktop' ' { print $1}' -
Run Code Online (Sandbox Code Playgroud)

更多解决方案在另一个问题中。


use*_*own 8

程序应该可以通过 PATH 访问,因此只需列出路径中的所有内容:

ls ${PATH//:/ }
Run Code Online (Sandbox Code Playgroud)

预计大约 3k-4k 个程序的结果。

为了排除可能的少数误报,您可以改进该方法:

for d in ${PATH//:/ } ; do 
    for f in $d/* ; do  
        test -x $f && test -f $f && echo $f
    done
done
Run Code Online (Sandbox Code Playgroud)

这对我来说没有什么区别。

  • 请注意,这也可能会列出各种非程序(“$PATH”中目录的子目录等)。 (2认同)