Ubuntuパッケージ管理: APTとdpkgのチートシート

Ubuntuパッケージ用の必須APTおよびdpkgコマンド

Ubuntuのパッケージ管理システムは、ソフトウェアのインストールおよびメンテナンスのバックボーンであり、Linuxユーザーまたはシステム管理者にとって必須の知識です。

tetris この画像は、AIモデルFlux 1 devによって生成されました。

APTパッケージ管理とは?

**APT(Advanced Package Tool)**は、Debianから継承されたUbuntuの主要なパッケージ管理システムです。これは、ソフトウェアパッケージのインストール、アップグレード、および削除を行う強力なコマンドラインツールです。APTは依存関係解決を自動的に行い、Ubuntuの公式リポジトリに接続し、UbuntuおよびDebianベースのディストリビューションでシステムパッケージを管理する伝統的な方法です。Ubuntuに初めて触れる場合は、Ubuntu 24.04のインストールと有用なツールに関するガイドを確認し、適切に構成されたシステムで開始してください。

主な特徴:

  • Ubuntu/Debianネイティブ: 事前にインストール不要
  • 共有ライブラリ: システム依存関係を通じた効率的なディスク使用
  • 手動更新: パッケージの更新タイミングはユーザーが制御
  • サンドボックスなし: パッケージはフルシステムアクセス(システムツールに適している)
  • 軽量: バックグラウンドデーモンなし、呼び出されるときにのみ実行
  • 成熟したエコシステム: 数十年にわたる開発、非常に安定

パッケージマネージャーの比較

Ubuntuは複数のパッケージ管理システムをサポートしています。主な操作の比較は以下の通りです:

操作 APT Snap Flatpak
検索 apt search keyword snap find keyword flatpak search keyword
インストール sudo apt install package sudo snap install package flatpak install flathub app.id
インストール済み一覧 apt list --installed snap list flatpak list --app
情報表示 apt show package snap info package flatpak info app.id
すべて更新 sudo apt update && sudo apt upgrade sudo snap refresh flatpak update
単一更新 sudo apt install --only-upgrade pkg sudo snap refresh package flatpak update app.id
削除 sudo apt remove package sudo snap remove package flatpak uninstall app.id
クリーンアップ sudo apt autoremove snap remove --revision=N flatpak uninstall --unused
リポジトリ /etc/apt/sources.list Snap Store(組み込み) flatpak remote-addで追加

クイック機能比較

機能 APT Snap Flatpak
自動更新 いいえ はい いいえ
サンドボックス いいえ はい はい
依存関係 システムライブラリ バンドル 共有ランタイム
パッケージサイズ 小さい(5-50MB) 大きい(50-500MB) 中くらい(20-200MB)
root権限が必要 はい はい いいえ(ユーザーインストール)
起動速度 速い やや遅い 速い
最適な用途 システムパッケージ ユニバーサルアプリ デスクトップアプリ

このガイドについて

このガイドはAPT(apt/apt-get/dpkg)に焦点を当てています - Ubuntuの伝統的なパッケージ管理システムです。APTは、UbuntuおよびDebianベースのシステムでシステムパッケージ、ライブラリ、サービスを管理するために不可欠です。

他のパッケージマネージャーについては:

各パッケージマネージャーにはそれぞれの強みがあります。APTはシステムパッケージと依存関係に、Snapはクロスバージョンの互換性と自動更新に、Flatpakはデスクトップアプリと細かいパーミッション管理に最適です。


APTパッケージ管理 - 詳細ガイド

APTとapt-getの理解

APT(apt) - 現代的な選択肢

Ubuntu 14.04で導入され、apt-getapt-cacheの機能を統合し、ユーザー体験を向上させたapt:

利点:

  • プログレスバーとカラーアウトプット
  • より直感的なコマンド
  • 人間にとって読みやすいクリーンな出力
  • 複数のツール機能を統合

使用するタイミング: 毎日のインタラクティブなコマンドライン操作

apt-get - 伝統的な選択肢

元のパッケージ管理ツールで、今も広く使用されています:

利点:

  • より安定したAPI(スクリプトに最適)
  • 互換性の後方互換性
  • 予測可能な出力フォーマット
  • より細かい制御

使用するタイミング: シェルスクリプト、自動化、レガシーシステム

プロのヒント: ターミナルでのナビゲーションとワークフロー効率を向上させるために、Ubuntuキーボードショートカットチートシートを確認してください。

必須のパッケージ管理コマンド

パッケージリストの更新

インストールまたはアップグレードする前に常にパッケージリストを更新してください:

# パッケージインデックスの更新
sudo apt update

# またはapt-getを使用
sudo apt-get update

このコマンドは、設定されたリポジトリから利用可能なパッケージおよびバージョンの情報をローカルデータベースに更新します。

パッケージのインストール

基本的なインストール:

# 単一パッケージのインストール
sudo apt install package-name

# 複数パッケージのインストール
sudo apt install package1 package2 package3

# 特定バージョンのインストール
sudo apt install package-name=version-number

例:

# Nginxウェブサーバーのインストール
sudo apt install nginx

# Pythonとpipのインストール
sudo apt install python3 python3-pip

# ビルドエッセンシャルのインストール
sudo apt install build-essential

# システム監視ツールのインストール
sudo apt install htop

専門的な監視ニーズがある場合、NVIDIAカード搭載システムのGPUパフォーマンスを追跡するためには、Linux/UbuntuでのGPU監視アプリに関するガイドを確認してください。

プロンプトなしでインストール(スクリプトに有用):

sudo apt install -y package-name

# または
sudo DEBIAN_FRONTEND=noninteractive apt install -y package-name

.debファイルからインストール:

# 方法1: aptを使用(推奨、依存関係を処理)
sudo apt install ./package.deb

# 方法2: dpkgを使用
sudo dpkg -i package.deb
sudo apt install -f  # 締切のない依存関係を修正

注意: ダウンロードした.debファイルを扱う際には、コンテキストメニューが良いファイルマネージャーを使用することを検討してください。Ubuntu 24.04向けのファイルマネージャー(Nautilus vs Nemo vs Dolphin vs Caja)の比較を確認してください。

パッケージのアップグレード

インストール済みパッケージのアップグレード:

# すべてのパッケージをアップグレード(安全、パッケージを削除しない)
sudo apt upgrade

# 特定のパッケージをアップグレード
sudo apt install --only-upgrade package-name

# 完全なアップグレード(依存関係を解決するためにパッケージを削除する可能性あり)
sudo apt full-upgrade

# ディストリビューションのアップグレード(主要バージョンの更新)
sudo apt dist-upgrade

完全な更新手順:

# 推奨される更新手順
sudo apt update
sudo apt upgrade -y
sudo apt autoremove
sudo apt autoclean

Ubuntuリリースのアップグレード:

# LTSから次のLTSへ
sudo do-release-upgrade

# 任意のリリースアップグレード
sudo do-release-upgrade -d

パッケージの一覧

インストール済みパッケージの一覧:

# すべてのインストール済みパッケージ
apt list --installed

# grepフィルターを使用
apt list --installed | grep package-name

# インストール済みパッケージの数
apt list --installed | wc -l

# dpkgを使用
dpkg -l
dpkg --list
dpkg -l | grep package-name

アップグレード可能なパッケージの一覧:

# 利用可能な更新があるパッケージを表示
apt list --upgradable

# 詳細なアップグレードシミュレーション
apt list --upgradable -a

すべての利用可能なパッケージの一覧:

# リポジトリ内のすべてのパッケージ
apt list

# 特定のリポジトリから
apt list | grep "source-name"

パッケージの検索

パッケージ名と説明の検索:

# aptで検索
apt search keyword

# 小文字大文字を区別しない検索
apt search -i keyword

# パッケージ名のみを表示
apt-cache search keyword

# パッケージ名のみを検索(より速い)
apt-cache search --names-only keyword

例:

# エディタの検索
apt search text editor

# データベースの検索
apt search database

# Pythonパッケージの検索
apt search python | grep python3

パッケージ情報の表示

詳細なパッケージ情報:

# パッケージ詳細の表示
apt show package-name

# apt-cacheを使用
apt-cache show package-name

# パッケージ依存関係の表示
apt-cache depends package-name

# 逆依存関係の表示
apt-cache rdepends package-name

# パッケージポリシーとバージョンの確認
apt-cache policy package-name

# パッケージ統計の表示
apt-cache stats

パッケージがインストールされているかの確認:

# 方法1
dpkg -s package-name

# 方法2
dpkg -l package-name

# 方法3
apt list --installed package-name

# 方法4(インストール済みの場合、エクスポートコード0)
dpkg-query -W package-name

パッケージの削除

パッケージの削除:

# パッケージの削除(設定ファイルは保持)
sudo apt remove package-name

# パッケージと設定ファイルの削除(パージ)
sudo apt purge package-name

# 依存関係とともに削除
sudo apt autoremove package-name

# パッケージと設定を完全に削除
sudo apt purge package-name && sudo apt autoremove

システムのクリーンアップ:

# 使用されていない依存関係の削除
sudo apt autoremove

# パージして削除
sudo apt autoremove --purge

# ダウンロードされたパッケージファイルの削除
sudo apt clean

# 古いバージョンのパッケージの削除
sudo apt autoclean

ディスク使用量の確認:

# キャッシュサイズの確認
du -sh /var/cache/apt/archives

# 全パッケージサイズの確認
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n

パッケージのホールド(アップグレードを防止)

パッケージのホールド:

# 現在のバージョンでパッケージをホールド
sudo apt-mark hold package-name

# パッケージのホールド解除
sudo apt-mark unhold package-name

# ホールドされたパッケージの表示
apt-mark showhold

# 複数のパッケージをホールド
sudo apt-mark hold package1 package2 package3

使用例: 特定のソフトウェアバージョンが自動的にアップグレードされないようにする。

dpkgの使用 - ローレベルパッケージツール

dpkgはAPTが使用する下位パッケージマネージャーです:

基本的なdpkgコマンド:

# パッケージのインストール
sudo dpkg -i package.deb

# パッケージの削除
sudo dpkg -r package-name

# パッケージのパージ
sudo dpkg -P package-name

# インストール済みパッケージのリスト
dpkg -l

# パッケージ内のファイルのリスト
dpkg -L package-name

# ファイルがどのパッケージに属しているかを確認
dpkg -S /path/to/file

# パッケージの状態を確認
dpkg -s package-name

# パッケージを再構成
sudo dpkg-reconfigure package-name

# パッケージの整合性を確認
dpkg -V package-name

破損したパッケージの修正:

# 破損したパッケージを再構成
sudo dpkg --configure -a

# 締切のない依存関係を修正
sudo apt install -f

# 強制再インストール
sudo apt install --reinstall package-name

リポジトリ管理

リポジトリの表示

設定されたリポジトリの確認:

# sources.listの表示
cat /etc/apt/sources.list

# その他のソースの表示
ls /etc/apt/sources.list.d/

# すべての有効なリポジトリの表示
grep -r --include '*.list' '^deb ' /etc/apt/

リポジトリの追加

PPA(パーソナルパッケージアーカイブ)の追加:

# PPAリポジトリの追加
sudo add-apt-repository ppa:user/ppa-name
sudo apt update

# 例: Git PPAの追加
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt install git

リポジトリを手動で追加:

# sources.listにリポジトリを追加
echo "deb http://repository-url distribution component" | sudo tee -a /etc/apt/sources.list.d/custom.list

# GPGキーの追加
wget -qO - https://example.com/key.gpg | sudo apt-key add -

# パッケージリストの更新
sudo apt update

現代的なキーマネジメント(Ubuntu 22.04以降):

# キーをダウンロードしてキーリングに追加
wget -qO - https://example.com/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/custom.gpg

# 署名されたリポジトリを追加
echo "deb [signed-by=/etc/apt/keyrings/custom.gpg] http://repo-url dist component" | sudo tee /etc/apt/sources.list.d/custom.list

リポジトリの削除

# PPAの削除
sudo add-apt-repository --remove ppa:user/ppa-name

# またはリストファイルを削除
sudo rm /etc/apt/sources.list.d/ppa-name.list

# 更新
sudo apt update

代替パッケージマネージャー

UbuntuはSnapおよびFlatpakもサポートしており、ユニバーサルアプリケーションパッケージングに使用されます:

  • Snap: 詳細な情報については、Snapパッケージマネージャーのガイドを参照してください。インストール、使用、チャネル、コンファインメント、トラブルシューティングに関する詳細情報を提供しています。

  • Flatpak: 詳細な情報については、Flatpakパッケージマネージャーのガイドを参照してください。インストール、Flathub、パーミッション、ランタイム、管理に関する詳細情報を提供しています。

高度なパッケージ管理

操作のシミュレーション(ドライラン)

# インストールのシミュレーション
apt install -s package-name

# アップグレードのシミュレーション
apt upgrade -s

# 何がインストールされるかを表示
apt-cache showpkg package-name

インストールせずにパッケージをダウンロード

# パッケージのみをダウンロード
apt download package-name

# 依存関係とともにダウンロード
apt install --download-only package-name

# 特定のディレクトリにダウンロード
cd /path/to/dir
apt download package-name

パッケージファイルの検索

# ファイルを提供するパッケージの確認
dpkg -S /path/to/file

# パッケージ内でファイルを検索(インストールされていないものも含む)
apt-file search filename

# apt-fileをまずインストール
sudo apt install apt-file
sudo apt-file update

パッケージピンニング

/etc/apt/preferencesを作成してパッケージバージョンを制御します:

# 特定バージョンにパッケージをピン
sudo nano /etc/apt/preferences

追加:

Package: package-name
Pin: version 1.2.3*
Pin-Priority: 1001

パッケージの脆弱性の確認

# セキュリティアップデートの確認
sudo apt list --upgradable | grep security

# 特定パッケージのCVEを確認
apt-cache policy package-name

一般的な問題のトラブルシューティング

破損したパッケージの修正

# 方法1: 依存関係を修正
sudo apt install -f

# 方法2: パッケージを再構成
sudo dpkg --configure -a

# 方法3: クリーンアップと更新
sudo apt clean
sudo apt update
sudo apt upgrade

# 方法4: 強制修正
sudo apt --fix-broken install

データベースがロックされている場合の修正

# ロックファイルを削除(aptプロセスが実行されていないことを確認してください!)
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/archives/lock
sudo dpkg --configure -a

まず実行中のプロセスを確認してください:

ps aux | grep -i apt
sudo lsof /var/lib/dpkg/lock-frontend

ハッシュ合計ミスマッチエラー

# キャッシュをクリーンアップして再試行
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update

GPG/キーのエラー

# キーを再追加
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID

# またはキーをダウンロード
wget -qO - https://repo-url/key.gpg | sudo apt-key add -

# 現代的なアプローチ(Ubuntu 22.04以降)
wget -qO - https://repo-url/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/repo.gpg

未満足な依存関係

# aptitudeを使用(より良い依存関係解決)
sudo apt install aptitude
sudo aptitude install package-name

# または手動解決
sudo apt install package-name package-dependency

リポジトリが見つからない(404)

# 正しいリポジトリに更新
sudo nano /etc/apt/sources.list

# 古いリリース名を現在のものに変更
# または不要なPPAを削除
sudo add-apt-repository --remove ppa:name/ppa

最佳実践

定期的なメンテナンス

週次ルーチン:

#!/bin/bash
# システム更新スクリプト

echo "パッケージリストを更新中..."
sudo apt update

echo "パッケージをアップグレード中..."
sudo apt upgrade -y

echo "不要なパッケージを削除中..."
sudo apt autoremove -y

echo "パッケージキャッシュをクリーンアップ中..."
sudo apt autoclean

echo "更新完了!"

セキュリティアップデート

セキュリティパッチの自動更新:

# unattended-upgradesをインストール
sudo apt install unattended-upgrades

# 設定
sudo dpkg-reconfigure unattended-upgrades

# 設定ファイルを編集
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

サーバー設定: サーバーを管理している場合、信頼性のあるパッケージダウンロードとシステム更新のために適切なネットワーク設定が不可欠です。Ubuntuサーバーでの静的IPアドレスの変更方法を確認してください。

パッケージリストのバックアップ

インストール済みパッケージのエクスポート:

# バックアップの作成
dpkg --get-selections > ~/package-list.txt

# または明示的なインストール済みパッケージ
apt-mark showmanual > ~/manually-installed.txt

# 他のシステムで復元
sudo dpkg --set-selections < ~/package-list.txt
sudo apt-get dselect-upgrade

システムの健康状態の確認

# 破損した依存関係の確認
sudo apt check

# すべてのパッケージを確認
sudo debsums -c

# システムログの確認
journalctl -xe | grep -i apt
tail -f /var/log/apt/history.log

パフォーマンス最適化

より高速なパッケージダウンロード

並列ダウンロードを有効にする:

/etc/apt/apt.conf.d/99parallelを編集:

echo 'Acquire::Queue-Mode "host";' | sudo tee /etc/apt/apt.conf.d/99parallel
echo 'Acquire::http::Pipeline-Depth "5";' | sudo tee -a /etc/apt/apt.conf.d/99parallel

最も高速なミラーを使用する:

# apt-fastをインストール
sudo add-apt-repository ppa:apt-fast/stable
sudo apt update
sudo apt install apt-fast

# apt-fastを使用してaptの代わりに使用
sudo apt-fast install package-name

キャッシュサイズの削減

# キャッシュを100MBに制限
echo 'APT::Archives::MaxSize "100";' | sudo tee /etc/apt/apt.conf.d/99max-cache

有用なパッケージ管理スクリプト

すべてのパッケージマネージャーの更新

#!/bin/bash
# すべてのパッケージマネージャーの更新

echo "=== APT 更新 ==="
sudo apt update && sudo apt upgrade -y

echo "=== Snap 更新 ==="
sudo snap refresh

echo "=== Flatpak 更新 ==="
flatpak update -y

echo "すべてのシステムが更新されました!"

大きなパッケージの検索

# インストール済みパッケージの最大サイズをリスト
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head -20

# より読みやすい形式
dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head -20 | awk '{printf "%.2f MB\t%s\n", $1/1024, $2}'

パッケージの監査

#!/bin/bash
# パッケージシステムの監査

echo "=== システムパッケージ統計 ==="
echo "インストール済みパッケージ: $(dpkg -l | grep ^ii | wc -l)"
echo "アップグレード可能なパッケージ: $(apt list --upgradable 2>/dev/null | grep -c upgradable)"
echo "ホールドされたパッケージ: $(apt-mark showhold | wc -l)"
echo "自動削除可能: $(apt autoremove --dry-run | grep -Po '^\d+')"
echo "キャッシュサイズ: $(du -sh /var/cache/apt/archives | cut -f1)"

クイックリファレンスチートシート

必須コマンド:

# 更新&アップグレード
sudo apt update && sudo apt upgrade -y

# パッケージのインストール
sudo apt install package-name

# パッケージの削除
sudo apt remove package-name

# パッケージの検索
apt search keyword

# パッケージ情報の表示
apt show package-name

# インストール済みの一覧
apt list --installed

# システムのクリーンアップ
sudo apt autoremove && sudo apt autoclean

# 破損したパッケージの修正
sudo apt install -f && sudo dpkg --configure -a

結論

Ubuntuのパッケージ管理システムをマスターすることは、効率的なシステム管理に不可欠です。インタラクティブなセッションでは現代的なaptコマンドを使用し、スクリプトではapt-getを使用し、ユニバーサルパッケージではSnapとFlatpakを探索することで、これらのツールを理解することで、セキュアで最新で整理されたUbuntuシステムを維持できます。

基本的なコマンドから始めて、徐々に高度な技術を組み込み、常にシステムを最新に保つようにしてください。定期的なメンテナンスとベストプラクティスの組み合わせにより、スムーズで信頼性の高いUbuntu体験が得られます。

プロのヒント: パッケージをインストールまたはアップグレードする前に常にsudo apt updateを実行してください!

有用なリンク

このサイトの関連記事