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


48

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


8
哪个分配?每个发行版都有不同的安装工具。
Matteo

嗯,我对Red Hat,Ubuntu和cygwin感兴趣。有没有一种使用命令行参数列出程序的无发行方式?
InquilineKea 2011年

1
不,没有,因为软件包管理器有所不同。
克里斯·

Answers:


71

那取决于你的分布。

  • 基于能力的发行版(Ubuntu,Debian等): dpkg -l
  • 基于RPM的发行版(Fedora,RHEL等): rpm -qa
  • 基于pkg *的发行版(OpenBSD,FreeBSD等): pkg_info
  • 基于Portage的发行版(Gentoo等):equery listeix -I
  • 基于pacman的发行版(Arch Linux等): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: 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

4
而对于基于RPM的系统(红帽,SUSE的CentOS等):rpm -qa

1
Debian / Ubuntu是dkpg -l | grep ^ii
罗尔夫

1
@Rolf,你的意思是DPKG
HarkályGergő

1
糟糕... BSD不是Linux发行版...
Kusalananda

1
@Kusalananda ??它在任何时候都没有说过BSD是Linux发行版,但它们是发行版。这就是BSD中“ D”代表的意思。
克里斯·唐

13

回答问题的第二部分(对于第一部分,Chris的答案实际上没有添加任何内容)

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


3

程序应该可以通过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

这对我没有影响。


2
请注意,这也可能会列出各种非程序($PATH,等中目录的子目录)。
克里斯·

1
我添加了一个测试,但对我没有任何影响(路径中目录中的目录有用,路径中本身不存在吗?)。但是在某些情况下,您依靠正确性可能会很有用。
用户未知

1
太棒了!我不知道Linux的版本(
长话

2

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.