Ubuntuをアップデートする方法 apt update/upgradeの違い

コマンド

Ubuntuを使っていると「とりあえず apt update してから…」という手順をよく見かけますが、apt updateapt upgrade の違いを正確に説明できる方は意外と少ないです。

結論から言うと、apt update はパッケージリストを更新するだけで、何もインストール・更新しません。実際に更新を適用するのは apt upgrade です。2つをセットで使ってはじめてシステムが最新状態になります。

本記事では ubuntu:24.04 の公式Dockerコンテナで両コマンドを実際に実行し、それぞれが何をしているかを実測結果で解説します。数字はすべて2026-06-15に手元で計測した実際の出力です。

この記事のポイント

  • apt update はリポジトリからパッケージ情報を取得するだけで、更新は一切行わない
  • apt upgrade で実際にパッケージを最新バージョンに更新する
  • 正しい手順は sudo apt update && sudo apt upgrade -y のセット実行
  • 実測:apt update なしだと6件のセキュリティ更新を「0 upgraded」と見逃した
  • apt full-upgrade(dist-upgrade)は依存関係の解決がより積極的な上位版

目次

  1. 前提環境
  2. apt update とは?(リストを更新するだけ)
  3. apt upgrade とは?(パッケージを実際に更新)
  4. セット実行:sudo apt update && sudo apt upgrade
  5. 更新候補を確認:apt list –upgradable
  6. apt upgrade vs apt full-upgrade の違い
  7. よくあるエラーと解決策
  8. まとめ

前提環境

本記事のコマンドは以下の環境で実測・検証しています。

項目 内容
OS Ubuntu 24.04 LTS(noble)
apt バージョン 2.8.3(apt --version の実測値)
dpkg バージョン 1.22.6(実測)
実行環境 Docker公式イメージ ubuntu:24.04(arm64 / 2026-06-15 実測)
実行権限 sudo(一般ユーザーで実行する場合は sudo が必要)

注意

検証は Apple Silicon 上の Docker(arm64)で行ったため、出力のアーキテクチャ表記は arm64 になっています。x86_64(amd64)のVPSやPCでもパッケージのバージョン番号やコマンドの挙動は同一で、末尾の arm64amd64 に変わるだけです。

apt update とは?(リストを更新するだけ)

apt update は、インターネット上のリポジトリから最新のパッケージ情報を取得し、ローカルのキャッシュを更新するコマンドです。このコマンドだけでは、システム上のパッケージは何ひとつ変わりません。

実際に何が起きているかというと、/var/lib/apt/lists/ ディレクトリに各リポジトリのパッケージ一覧ファイルが保存されます。今回 ubuntu:24.04 コンテナでこのディレクトリを空にした状態から apt update を実行したところ、0ファイルから19ファイルへ増え、合計181,469パッケージ分の情報がローカルに保存されました

①apt update の実行方法




ubuntu@server: ~
$ ls /var/lib/apt/lists/*.* 2>/dev/null | wc -l
0
$ sudo apt update
Get:16 http://ports.ubuntu.com/ubuntu-ports noble-security/main arm64 Packages [1904 kB]
Get:17 http://ports.ubuntu.com/ubuntu-ports noble-security/restricted arm64 Packages [4733 kB]
Get:19 http://ports.ubuntu.com/ubuntu-ports noble-security/universe arm64 Packages [1555 kB]
Fetched 39.6 MB in 3s (11.6 MB/s)
Reading package lists… Done
$ ls /var/lib/apt/lists/*Packages* /var/lib/apt/lists/*InRelease | wc -l
19

注目してほしいのは、apt update が取得しているのは「パッケージ一覧ファイル」だけだという点です。39.6 MBダウンロードしていますが、これはパッケージそのものではなく、どんなパッケージのどのバージョンが配布されているかという目録です。

apt update の実実行ログ(Ubuntu 24.04 実測)
apt update の実実行ログ(Ubuntu 24.04 実測)

上の図は ubuntu:24.04 コンテナで実際に apt update を実行したログです。apt(フロントエンド)で実行すると、最後に「N packages can be upgraded. Run 'apt list --upgradable' to see them.」と表示されますが、これはただの通知で、まだ何もアップグレードされていません

②apt update が必要な理由

Dockerコンテナを起動した直後や、VPSを長期間放置していた場合、/var/lib/apt/lists/ は空か古い情報のままです。この状態で apt upgrade を実行すると、どうなるでしょうか。実際に /var/lib/apt/lists/ を空にした状態でアップグレードのシミュレーション(-s)を実行してみました。




ubuntu@server: ~ (apt update なし)
$ ls /var/lib/apt/lists/ | wc -l
0
$ sudo apt-get upgrade -s
Building dependency tree…
Reading state information…
Calculating upgrade…
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

これは実際に確認した結果です。apt update をしていないと、本当は6件のセキュリティアップデートがあるのに 「0 upgraded(更新なし)」と判定されてしまいました。リストが空=「更新できるものを知らない」状態なので、当然です。

apt update なし vs あり の挙動の違い(実測)
apt update なし vs あり の挙動の違い(実測)

同じコンテナイメージでも、apt update を先に実行するだけで判定が「0 upgraded」から「6 upgraded」に変わります。これが apt update を必ず先に実行すべき理由です。

apt upgrade とは?(パッケージを実際に更新)

apt upgrade は、apt update で取得したパッケージ情報をもとに、現在インストールされているパッケージを最新版へ更新するコマンドです。

正確には「既存パッケージの新しいバージョンへの置き換え」を行います。新しいパッケージの追加や、既存パッケージの削除は行わない点が特徴です。

③apt upgrade の実行方法

実際に ubuntu:24.04 で sudo apt upgrade -y を実行したログがこちらです。




ubuntu@server: ~
$ sudo apt upgrade -y
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 3941 kB of archives.
Fetched 3941 kB in 0s (14.8 MB/s)
Setting up libgcrypt20:arm64 (1.10.3-2ubuntu0.1) …
Setting up libssl3t64:arm64 (3.0.13-0ubuntu3.11) …
Setting up libsystemd0:arm64 (255.4-1ubuntu8.16) …
Setting up libgnutls30t64:arm64 (3.8.3-1.1ubuntu3.6) …

Ubuntu 24.04(noble)で実行したところ、libssl3t64(OpenSSLライブラリ)・libsystemd0libgnutls30t64 など6つのセキュリティアップデートが適用されました。実際に3,941 kBのアーカイブをダウンロードし、各パッケージを「Setting up」で新バージョンに置き換えています。これらはすべて noble-security リポジトリ由来のものでした。

apt upgrade 実実行ログ(Ubuntu 24.04 実測)
apt upgrade 実実行ログ(Ubuntu 24.04 実測)

apt update は何も変えませんでしたが、apt upgrade でようやく実体が更新される――この対比が2つのコマンドの役割の違いそのものです。

④-y フラグで確認なしに実行する

そのまま apt upgrade を実行すると「Do you want to continue? [Y/n]」と確認を求められます。スクリプトや自動化の場面では -y を付けることでこの確認をスキップできます。

注意

-y フラグを使う場合は、実行前に apt upgrade --dry-run(または -s)で何が変わるかを必ず確認してください。本番環境では特に慎重に。次のセクションの apt list --upgradable も事前確認に使えます。

セット実行:sudo apt update && sudo apt upgrade

日常的なアップデート作業は、次の1行を覚えるだけで十分です。




ubuntu@server: ~
$ sudo apt update && sudo apt upgrade -y
Fetched 39.6 MB in 3s (11.6 MB/s)
6 packages can be upgraded. Run ‘apt list –upgradable’ to see them.
6 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Setting up libssl3t64:arm64 (3.0.13-0ubuntu3.11) …

&& は「前のコマンドが成功したら次を実行する」という意味です。apt update が失敗した場合(ネットワークエラーなど)、apt upgrade は実行されません。だから安全にセットで使えます。

sudo apt update && sudo apt upgrade -y のセット実行(Playwright実撮影)
sudo apt update && sudo apt upgrade -y のセット実行(Playwright実撮影)
著者アイコン
著者アイコン

VPSを借りたら最初にこのコマンドを実行するのが定番です。今回の実測でも、更新の正体は libssl3t64(OpenSSL)などのセキュリティパッチでした。パッチが当たっていない状態でサーバーをインターネットに公開するのは危険なので、公開前に必ず実行してください。

更新候補を確認:apt list –upgradable

apt upgrade を実行する前に、何が更新されるかを具体的に確認したい場合は apt list --upgradable を使います。実際の出力がこちらです。




ubuntu@server: ~
$ apt list –upgradable
Listing…
libgcrypt20/noble-updates,noble-security 1.10.3-2ubuntu0.1 arm64 [upgradable from: 1.10.3-2build1]
libgnutls30t64/noble-updates,noble-security 3.8.3-1.1ubuntu3.6 arm64 [upgradable from: 3.8.3-1.1ubuntu3.5]
liblzma5/noble-updates,noble-security 5.6.1+really5.4.5-1ubuntu0.3 arm64 [upgradable from: …0.2]
libssl3t64/noble-updates,noble-security 3.0.13-0ubuntu3.11 arm64 [upgradable from: 3.0.13-0ubuntu3.9]
libsystemd0/noble-updates,noble-security 255.4-1ubuntu8.16 arm64 [upgradable from: 255.4-1ubuntu8.15]
libudev1/noble-updates,noble-security 255.4-1ubuntu8.16 arm64 [upgradable from: 255.4-1ubuntu8.15]

出力形式は「パッケージ名/リポジトリ 新バージョン アーキテクチャ [upgradable from: 旧バージョン]」です。このケースでは6パッケージすべてが noble-security(セキュリティアップデートのリポジトリ)由来でした。libssl3t64 なら 3.0.13-0ubuntu3.93.0.13-0ubuntu3.11 に上がることが一目で分かります。

apt list --upgradable の実出力(Ubuntu 24.04 実測)
apt list –upgradable の実出力(Ubuntu 24.04 実測)

正直なところ、更新が「あるかどうか」を確認するだけなら apt update 実行後の出力末尾を見れば十分です(「N packages can be upgraded」と表示されます)。apt list --upgradable は「具体的にどのパッケージがどのバージョンへ更新されるか」を確認したいときに使います。

apt upgrade vs apt full-upgrade の違い

apt upgrade に似たコマンドとして apt full-upgrade(または apt-get dist-upgrade)があります。違いを表にまとめました。

コマンド 既存パッケージの更新 新パッケージの追加 パッケージの削除 推奨場面
apt upgrade あり なし なし 日常的なアップデート
apt full-upgrade あり あり(依存解決のため) あり(依存解決のため) 大きなシステム変更時

apt upgrade は「既存パッケージの更新のみ」に限定されるため、安全性が高いです。一方 apt full-upgrade は依存関係を解決するために、新しいパッケージを追加したり、古いパッケージを削除したりすることがあります。

実際に ubuntu:24.04 で apt-get upgrade -sapt-get dist-upgrade -s(どちらもシミュレーション)を比較したところ、今回のケースではどちらも「6 upgraded, 0 newly installed, 0 to remove」で同じ結果でした。差が出るのは、カーネルアップデートや大規模な依存関係の変更があったときです。

もうひとつ、Ubuntu 22.04 と 24.04 で apt の環境がどう違うかも実測で比較しました。

Ubuntu 22.04 vs 24.04 apt 環境比較(実測)
Ubuntu 22.04 vs 24.04 apt 環境比較(実測)

Ubuntu 22.04(jammy)では apt 2.4.14、Ubuntu 24.04(noble)では apt 2.8.3 が使われています(実測)。コマンドの使い方は同じですが、利用可能なパッケージ総数は 162,919(22.04)から 181,469(24.04)へ増えています。新しいLTSほど扱えるソフトウェアが増えている、ということです。

よくあるエラーと解決策

①E: Could not get lock /var/lib/dpkg/lock-frontend




ubuntu@server: ~
$ sudo apt update
E: Could not get lock /var/lib/dpkg/lock-frontend
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

apt は二重起動を防ぐため、/var/lib/dpkg/lock-frontend というロックファイルを使います(コンテナ内で確認すると、このファイルが実際に存在していました)。別の apt プロセスが実行中だとこのエラーが出ます。Ubuntu の自動更新(unattended-upgrades)が裏で動いている場合が多いです。しばらく待ってから再実行してください。




ubuntu@server: ~
$ ps aux | grep apt
root 1234 0.0 0.3 … unattended-upgrades
$ sudo systemctl stop unattended-upgrades
$ sudo apt update

②E: Repository ‘http://…’ does not have a Release file

EOL(サポート終了)のUbuntuバージョンを使っているか、古いサードパーティリポジトリが残っている場合に発生します。Ubuntu 22.04 または 24.04 LTS への移行を検討してください。

③WARNING: apt does not have a stable CLI interface




ubuntu@server: ~
$ apt list –installed | head
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

これはコンテナで実際に再現した警告です。apt(フロントエンド)の出力をパイプやスクリプトで処理しようとすると出ます。スクリプトでは apt-get(バックエンド)を使うことで回避できます。手動操作では無視して問題ありません。




ubuntu@server: ~(スクリプト内での推奨)
$ sudo apt-get update && sudo apt-get upgrade -y
(警告なしで実行)

まとめ

コマンド 何をするか パッケージの変更 実行頻度
apt update リポジトリからパッケージ情報を取得 なし(情報取得のみ) upgrade 前に毎回
apt upgrade インストール済みパッケージを最新版に更新 あり(更新のみ) 週1〜月1程度
apt full-upgrade 依存解決のため新規追加・削除も実施 あり(追加・削除も) 大きな変更時のみ

Ubuntu のシステムをセキュアに保つためにやるべきことはシンプルです。

  • サーバーに SSH ログインしたら sudo apt update && sudo apt upgrade -y を実行する
  • apt list --upgradable で何が更新されるかを事前確認できる
  • スクリプト内では apt-get を使う(CLI警告の回避)

本記事では ubuntu:24.04 コンテナで実際に実行し、libssl3t64libsystemd0 などセキュリティ関連パッケージ6件の更新を確認しました。apt update なしでは「0 upgraded」と判定されてしまうことも実測で示しています。「update してから upgrade」――この順番だけは、理由まで含めて覚えておいてください。

本格的にサーバーを運用するなら

VPS上のUbuntuサーバーを長期運用するなら、定期的な apt upgrade に加えて、ファイアウォール設定・SSH鍵認証・ログ監視が重要です。VPS選びからサーバー構築・セキュリティ設定まで解説した記事もあわせてご覧ください。

コメント

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