この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:10
ページ更新者:atom
更新日時:2026-06-11 07:10:02

タイトル: apt upgrade パッケージの更新
SEOタイトル: Ubuntu apt upgrade パッケージ更新完全ガイド

この記事の要点
  • sudo apt update && sudo apt upgrade がパッケージ更新の基本形
  • update: パッケージリスト更新 / upgrade: 実体更新 / full-upgrade: 削除を伴う更新
  • -y で全 Yes 自動応答、運用スクリプト向け。サーバ運用では unattended-upgrades で自動セキュリティ更新
  • ロックエラー/var/lib/dpkg/lock-frontend)は別 apt プロセスが動作中。ps aux | grep apt で確認
  • 更新後 /var/run/reboot-required があればカーネル更新 → 再起動推奨

apt upgrade の基本

Ubuntu / Debian 系 Linux のパッケージ更新コマンド。必ず update してから upgrade するのが定石です:

# 1. パッケージリスト(メタデータ)を最新化
sudo apt update

# 2. インストール済パッケージを最新版へアップグレード
sudo apt upgrade

# 3. 一気にやる定番ワンライナー
sudo apt update && sudo apt upgrade -y

# 4. カーネル等の依存削除を伴う完全アップグレード
sudo apt full-upgrade -y

# 5. 不要パッケージを削除
sudo apt autoremove -y

# 6. ダウンロード済キャッシュを削除
sudo apt clean

update と upgrade の違い

コマンド動作所要時間
apt updateパッケージリスト(メタデータ)の取得のみ。実体は変更しない数秒〜数十秒
apt upgradeインストール済パッケージを新版に更新。削除は伴わない数分〜数十分
apt full-upgradeupgrade に加え、依存解決のため不要パッケージを削除することも数分〜数十分
apt dist-upgradefull-upgrade の旧称。同じ動作(apt-get では dist-upgrade)同上
do-release-upgradeUbuntu のメジャーバージョン更新(例: 22.04 → 24.04)1時間〜

apt と apt-get の違い

機能的にはほぼ同じですが、対話的シェル向けは aptスクリプト向けは apt-get が推奨です:

# apt (人間向け): プログレスバー / 色付き / 警告 "CLI is not stable"
sudo apt upgrade -y

# apt-get (スクリプト向け): 出力が安定 / シェルスクリプト用
sudo apt-get upgrade -y
sudo apt-get -o Dpkg::Options::="--force-confnew" upgrade -y

# Ansible playbook 等では apt module が apt-get 相当を呼ぶ

更新可能パッケージの確認

# 更新可能パッケージ一覧
sudo apt update
apt list --upgradable

# セキュリティ更新のみカウント
apt list --upgradable 2>/dev/null | grep -c security

# 特定パッケージの利用可能バージョン
apt-cache policy nginx
# Installed: 1.18.0-6ubuntu14.4
# Candidate: 1.18.0-6ubuntu14.5
# Version table: ...

# 詳細情報
apt show nginx

セキュリティ更新だけを当てる

本番サーバでは「機能変更を含む全更新」よりも「セキュリティ更新のみ」を当てたいケースがあります:

# 方法1: unattended-upgrade を 1 回手動実行
sudo unattended-upgrade --dry-run -d
sudo unattended-upgrade -d

# 方法2: セキュリティリポジトリを指定
sudo apt-get -s -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list upgrade

自動更新: unattended-upgrades

サーバを毎日手動で更新するのは現実的でないので、セキュリティ更新だけ自動適用するのが定番運用です:

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

# 設定
sudo dpkg-reconfigure --priority=low unattended-upgrades
# → Yes を選択

# 動作確認(dry-run)
sudo unattended-upgrade --dry-run -d

# ログ
tail -f /var/log/unattended-upgrades/unattended-upgrades.log
# /etc/apt/apt.conf.d/50unattended-upgrades の例
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::Mail "ops@example.com";

よくあるトラブル

ロック取得失敗

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
# 別の apt / dpkg / unattended-upgrade が動作中
ps aux | grep -E "apt|dpkg|unattended"

# 安全策: 完了を待つ
sudo lsof /var/lib/dpkg/lock-frontend
# プロセス完了を待ってから再実行

# どうしてもの最終手段(壊れる可能性あり、推奨しない)
sudo killall apt apt-get
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
sudo apt update

設定ファイル衝突

Configuration file '/etc/nginx/nginx.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation

N(既存維持)を選び、後で差分を比較するのが安全。.dpkg-dist という名前で新版が残されます。

再起動が必要

# カーネル / libc / systemd 等の更新後
ls /var/run/reboot-required
# このファイルがあれば再起動推奨

cat /var/run/reboot-required.pkgs
# 再起動が必要になったパッケージ一覧

sudo reboot

運用での手動 vs 自動 比較

方式メリットデメリット適用先
手動更新(メンテナンスウィンドウ)事前検証 / 影響最小化運用負荷本番 DB / 基幹サーバ
セキュリティ自動更新CVE 対応が速いサービス断のリスクWeb フロント / 一般サーバ
完全自動更新運用ゼロ互換性事故個人 PC / 開発機
Ansible / Chef で集中管理サーバ群一括更新初期構築コスト10 台以上のフリート

FAQ

Q: apt upgradeapt full-upgrade どちらを使うべき?
A: 通常は apt upgradeカーネル / メタパッケージ更新で削除を伴う場合 full-upgrade が必要。Ubuntu のリリース upgrade では do-release-upgrade

Q: 失敗した更新を取り消したい
A: 旧バージョンを apt install パッケージ=旧バージョン で指定。dpkg -l パッケージ でバージョン確認。事前にスナップショット / バックアップ必須

Q: 特定パッケージを更新対象外にしたい
A: sudo apt-mark hold nginx で固定。解除は apt-mark unhold nginx。一覧は apt-mark showhold

Q: sudo apt upgrade で「保留されています」と出る
A: 依存解決ができないか、不要な削除が発生する更新です。sudo apt full-upgrade で解決するか、apt list --upgradable で詳細確認。