web-dev-qa-db-ja.com

インストールされているすべてのプログラムを一覧表示するにはどうすればよいですか?

ディストリビューションに付属しているプログラムと手動でインストールしたプログラムの両方を一覧表示するにはどうすればよいですか?

55
InquilineKea

それはあなたのディストリビューションに依存します。

  • 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
  • Cygwin:cygcheck --check-setup --dump-only *
  • Slackware:slapt-get --installed

これらはすべて、programsではなくpackagesをリストします。本当にプログラムを一覧表示する場合は、おそらく$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
78
Chris Down

質問の2番目の部分に答える(実際には何も追加されません Chrisの回答 最初の部分)

通常、手動でインストールされたプログラムとそのコンポーネントを一覧表示する方法はnoです。これは、パッケージマネージャーを使用しなかった場合、どこにも記録されません。あなたができることは、標準的な場所でバイナリを見つけることです(Chrisが提案したように)、同様の方法で、guesswheresome ライブラリまたは一部のマニュアルページなどが由来しています。そのため、可能な場合はいつでもパッケージマネージャーを使用してプログラムをインストールする必要があります。

13
rozcietrzewiacz

プログラムは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

それは私には違いをもたらしませんでした。

4
user unknown

他のすべての回答(これまでのところ)は、パッケージとバイナリを扱います。スタートメニューに表示される「デスクトップアプリケーション」の場合は、次のことを試してください。

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

別の質問 のその他の解決策。

2
Rolf