如何列出我的发行版附带的程序和我手动安装的程序?
答案1
这取决于你的分布。
- 基于 Aptitude 的发行版(Ubuntu、Debian 等):
dpkg -l
- 基于 RPM 的发行版(Fedora、RHEL 等):
rpm -qa
- 基于 pkg* 的发行版(OpenBSD、FreeBSD 等):
pkg_info
- 基于 Portage 的发行版(Gentoo 等):
equery list
或eix -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
这对我来说没有什么区别。