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

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

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

答案1

这取决于你的分布。

  • 基于 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

或者,如果您没有compgen

#!/bin/bash
IFS=: read -ra dirs_in_path <<< "$PATH"

for dir in "${dirs_in_path[@]}"; do
    for file in "$dir"/*; do
        [[ -x $file && -f $file ]] && printf '%s\n' "${file##*/}"
    done
done

答案2

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

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

答案3

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

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

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

答案4

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

ls ${PATH//:/ }

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

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

for d in ${PATH//:/ } ; do 
    for f in $d/* ; do  
        test -x $f && test -f $f && echo $f
    done
done

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

相关内容