Linuxでインストール済みアプリ(パッケージ)一覧を表示する方法|ディストリ別コマンドまとめ

Linux

Linuxを使っていると、「このマシンにはどんなアプリ(パッケージ)が入っているんだろう?」と調べたくなる場面がよくあります。

特に以下のような状況で、インストール済みソフトウェアの確認が必要になります:

「新しく引き継いだサーバーに何が入っているか把握したい」 「システムの容量を空けるため、不要なアプリを見つけたい」 「別の環境に同じ構成を再現したい」 「セキュリティ監査で全てのパッケージを把握する必要がある」 「特定のソフトウェアがインストールされているか確認したい」

この記事では、主要なLinuxディストリビューション別にインストール済みのアプリ(パッケージ)一覧を表示する方法を、初心者の方にもわかりやすく解説します。

スポンサーリンク

Linuxのパッケージ管理の基礎知識

パッケージとは

Linuxでは、ソフトウェアは「パッケージ」という単位で管理されています。パッケージには以下の情報が含まれています:

  • ソフトウェア本体
  • 設定ファイル
  • 依存関係の情報
  • インストール・削除用のスクリプト
  • バージョン情報

主要なパッケージ管理システム

Linuxディストリビューションによって、使用するパッケージ管理システムが異なります:

ディストリビューションパッケージ形式管理コマンド
Ubuntu、Debian.debdpkg、apt
CentOS、RHEL、Rocky.rpmrpm、yum、dnf
Fedora.rpmrpm、dnf
Arch Linux、Manjaro.pkg.tar.xzpacman
openSUSE.rpmrpm、zypper

Debian / Ubuntu系でのパッケージ一覧表示

dpkgコマンドの基本的な使い方

最も基本的なコマンド

dpkg -l

このコマンドを実行すると、以下のような形式で表示されます:

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                Version       Architecture Description
+++-===================-=============-============-================
ii  adduser             3.118ubuntu5  all          add and remove users and groups
ii  apache2             2.4.41-4ubunt amd64        Apache HTTP Server

出力の見方

  • 最初の列:パッケージの状態(ii = インストール済み)
  • Name:パッケージ名
  • Version:バージョン
  • Architecture:アーキテクチャ(amd64、i386、allなど)
  • Description:説明

より詳細な情報を取得

特定のパッケージを検索

dpkg -l | grep nginx

パッケージ名のみをシンプルに表示

dpkg-query -f '${binary:Package}\n' -W

インストールされているパッケージ数を確認

dpkg -l | wc -l

特定のパッケージの詳細情報

dpkg -s nginx

aptコマンドでの一覧表示

インストール済みパッケージの表示

apt list --installed

特定のパターンで検索

apt list --installed | grep -i python

CentOS / RHEL / Rocky / AlmaLinux系でのパッケージ一覧表示

rpmコマンドの基本的な使い方

最も基本的なコマンド

rpm -qa

このコマンドの出力例:

NetworkManager-1.22.8-4.el8.x86_64
NetworkManager-libnm-1.22.8-4.el8.x86_64
acl-2.2.53-1.el8.x86_64
audit-libs-3.0-0.17.20191104git1c2f876.el8.x86_64

オプションの詳細

  • -q:query(問い合わせ)
  • -a:all(すべて)

より詳細な情報を取得

特定のパッケージを検索

rpm -qa | grep httpd

インストール日時順に並べる

rpm -qa --last

パッケージサイズも表示

rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE} %{SIZE}\n'

特定のパッケージの詳細情報

rpm -qi httpd

yumコマンドでの一覧表示(CentOS 7以前)

インストール済みパッケージの表示

yum list installed

グループ別のパッケージ表示

yum grouplist

Fedora / CentOS 8以降 / RHEL 8以降でのパッケージ一覧表示

dnfコマンドの基本的な使い方

インストール済みパッケージの表示

dnf list installed

より詳細な表示

dnf list installed --verbose

特定のパッケージグループの確認

dnf group list installed

dnfの便利な機能

パッケージの履歴確認

dnf history

特定のファイルを含むパッケージを探す

dnf provides /usr/bin/vim

パッケージの依存関係確認

dnf deplist package_name

Arch Linux / Manjaroでのパッケージ一覧表示

pacmanコマンドの基本的な使い方

インストール済みパッケージの表示

pacman -Q

詳細情報付きで表示

pacman -Qi

明示的にインストールしたパッケージのみ表示

pacman -Qe

依存関係として自動インストールされたパッケージ

pacman -Qd

より高度な検索

特定のパッケージの詳細情報

pacman -Qi package_name

孤立したパッケージ(不要になったパッケージ)を探す

pacman -Qdt

パッケージのファイル一覧

pacman -Ql package_name

openSUSEでのパッケージ一覧表示

zypperコマンドの使い方

インストール済みパッケージの表示

zypper search -i

詳細な情報付きで表示

zypper info --installed-only

フラットパッケージシステム(Snap、Flatpak、AppImage)

Snapパッケージの確認

インストール済みSnapパッケージ

snap list

詳細情報の表示

snap info package_name

Flatpakパッケージの確認

インストール済みFlatpakアプリ

flatpak list

アプリケーション情報の詳細表示

flatpak info app_id

実用的な活用方法

パッケージリストをファイルに保存

基本的な保存方法

# Debian/Ubuntu系
dpkg -l > installed_packages_$(date +%Y%m%d).txt

# CentOS/RHEL系
rpm -qa > installed_packages_$(date +%Y%m%d).txt

# Arch Linux系
pacman -Q > installed_packages_$(date +%Y%m%d).txt

CSVファイル形式で保存

# Debian/Ubuntu系でCSV形式
dpkg-query -f '${binary:Package},${Version},${Architecture}\n' -W > packages.csv

2台のサーバー間でパッケージを比較

リストの差分確認

# server1でパッケージリスト作成
dpkg -l > server1_packages.txt

# server2でパッケージリスト作成
dpkg -l > server2_packages.txt

# 差分確認
diff server1_packages.txt server2_packages.txt

特定の条件でパッケージを抽出

開発関連パッケージのみ抽出

dpkg -l | grep -E "(dev|devel|build)"

Pythonに関連するパッケージを探す

rpm -qa | grep -i python

システムパッケージとユーザーパッケージを分ける

# Arch Linuxでユーザーが明示的にインストールしたもの
pacman -Qe

# 依存関係で自動インストールされたもの
pacman -Qd

トラブルシューティング

よくある問題と対処法

パッケージデータベースが壊れた場合

# Debian/Ubuntu系
sudo dpkg --configure -a
sudo apt update

# CentOS/RHEL系
sudo yum clean all
sudo yum makecache

パッケージ一覧が表示されない場合

# 権限確認
ls -la /var/lib/dpkg/status  # Debian/Ubuntu
ls -la /var/lib/rpm/         # CentOS/RHEL

古いパッケージ情報をクリア

# キャッシュクリア
sudo apt clean      # Debian/Ubuntu
sudo yum clean all   # CentOS/RHEL
sudo dnf clean all   # Fedora

パフォーマンスの最適化

大量のパッケージを効率的に処理

# ページング付きで表示
dpkg -l | less

# 特定の列のみ抽出
dpkg-query -f '${binary:Package}\n' -W | sort

自動化とスクリプト化

システム監査用スクリプトの例

パッケージ情報収集スクリプト

#!/bin/bash
# system_audit.sh

DATE=$(date +%Y%m%d_%H%M%S)
HOSTNAME=$(hostname)
OUTPUT_DIR="/tmp/audit_$HOSTNAME_$DATE"

mkdir -p "$OUTPUT_DIR"

# ディストリビューション判定
if command -v dpkg &> /dev/null; then
    echo "Debian/Ubuntu system detected"
    dpkg -l > "$OUTPUT_DIR/packages_dpkg.txt"
    apt list --installed > "$OUTPUT_DIR/packages_apt.txt"
elif command -v rpm &> /dev/null; then
    echo "Red Hat based system detected"
    rpm -qa > "$OUTPUT_DIR/packages_rpm.txt"
    if command -v dnf &> /dev/null; then
        dnf list installed > "$OUTPUT_DIR/packages_dnf.txt"
    elif command -v yum &> /dev/null; then
        yum list installed > "$OUTPUT_DIR/packages_yum.txt"
    fi
elif command -v pacman &> /dev/null; then
    echo "Arch based system detected"
    pacman -Q > "$OUTPUT_DIR/packages_pacman.txt"
    pacman -Qe > "$OUTPUT_DIR/packages_explicit.txt"
fi

# システム情報も収集
uname -a > "$OUTPUT_DIR/system_info.txt"
lsb_release -a > "$OUTPUT_DIR/distro_info.txt" 2>/dev/null

echo "Audit completed. Results saved in: $OUTPUT_DIR"

定期的なパッケージ監視

変更監視スクリプト

#!/bin/bash
# package_monitor.sh

BASELINE="/var/log/packages_baseline.txt"
CURRENT="/tmp/packages_current.txt"

# 現在のパッケージリストを作成
dpkg -l > "$CURRENT"

# ベースラインファイルが存在しない場合は作成
if [ ! -f "$BASELINE" ]; then
    cp "$CURRENT" "$BASELINE"
    echo "Baseline created"
    exit 0
fi

# 差分確認
if ! diff -q "$BASELINE" "$CURRENT" > /dev/null; then
    echo "Package changes detected:"
    diff "$BASELINE" "$CURRENT"
    
    # 新しいベースラインとして保存するか確認
    read -p "Update baseline? (y/n): " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        cp "$CURRENT" "$BASELINE"
        echo "Baseline updated"
    fi
else
    echo "No package changes detected"
fi

rm "$CURRENT"

セキュリティ監査での活用

脆弱性チェックとの連携

インストール済みパッケージの脆弱性確認

# Ubuntu/Debianでの脆弱性確認
apt list --upgradable

# 特定のパッケージの脆弱性情報
apt show package_name

パッケージの完整性チェック

# RPM系でのファイル完整性確認
rpm -Va

# Debian系でのファイル完整性確認
debsums -c

まとめ

ディストリビューション別基本コマンド早見表

ディストリビューション基本コマンド詳細表示検索
Ubuntu / Debiandpkg -ldpkg -s packagedpkg -l | grep pattern
CentOS / RHEL (7以前)rpm -qarpm -qi packagerpm -qa | grep pattern
CentOS / RHEL (8以降)dnf list installeddnf info packagednf list installed | grep pattern
Fedoradnf list installeddnf info packagednf list installed | grep pattern
Arch / Manjaropacman -Qpacman -Qi packagepacman -Q | grep pattern
openSUSEzypper search -izypper info packagezypper search -i pattern

実用的な活用ポイント

  • システム移行時のパッケージリスト作成
  • セキュリティ監査での完全な環境把握
  • 容量削減のための不要パッケージ特定
  • 開発環境の複製・同期
  • トラブルシューティング時の環境確認

コメント

タイトルとURLをコピーしました