Ubuntuを使っていると「とりあえず apt update してから…」という手順をよく見かけますが、apt update と apt 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)は依存関係の解決がより積極的な上位版
目次
- 前提環境
- apt update とは?(リストを更新するだけ)
- apt upgrade とは?(パッケージを実際に更新)
- セット実行:sudo apt update && sudo apt upgrade
- 更新候補を確認:apt list –upgradable
- apt upgrade vs apt full-upgrade の違い
- よくあるエラーと解決策
- まとめ
前提環境
本記事のコマンドは以下の環境で実測・検証しています。
| 項目 | 内容 |
|---|---|
| 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でもパッケージのバージョン番号やコマンドの挙動は同一で、末尾の arm64 が amd64 に変わるだけです。
apt update とは?(リストを更新するだけ)
apt update は、インターネット上のリポジトリから最新のパッケージ情報を取得し、ローカルのキャッシュを更新するコマンドです。このコマンドだけでは、システム上のパッケージは何ひとつ変わりません。
実際に何が起きているかというと、/var/lib/apt/lists/ ディレクトリに各リポジトリのパッケージ一覧ファイルが保存されます。今回 ubuntu:24.04 コンテナでこのディレクトリを空にした状態から apt update を実行したところ、0ファイルから19ファイルへ増え、合計181,469パッケージ分の情報がローカルに保存されました。
①apt update の実行方法
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ダウンロードしていますが、これはパッケージそのものではなく、どんなパッケージのどのバージョンが配布されているかという目録です。

上の図は 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)を実行してみました。
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 を先に実行するだけで判定が「0 upgraded」から「6 upgraded」に変わります。これが apt update を必ず先に実行すべき理由です。
apt upgrade とは?(パッケージを実際に更新)
apt upgrade は、apt update で取得したパッケージ情報をもとに、現在インストールされているパッケージを最新版へ更新するコマンドです。
正確には「既存パッケージの新しいバージョンへの置き換え」を行います。新しいパッケージの追加や、既存パッケージの削除は行わない点が特徴です。
③apt upgrade の実行方法
実際に ubuntu:24.04 で 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ライブラリ)・libsystemd0・libgnutls30t64 など6つのセキュリティアップデートが適用されました。実際に3,941 kBのアーカイブをダウンロードし、各パッケージを「Setting up」で新バージョンに置き換えています。これらはすべて noble-security リポジトリ由来のものでした。

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行を覚えるだけで十分です。
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 は実行されません。だから安全にセットで使えます。

更新候補を確認:apt list –upgradable
apt upgrade を実行する前に、何が更新されるかを具体的に確認したい場合は 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.9 → 3.0.13-0ubuntu3.11 に上がることが一目で分かります。

正直なところ、更新が「あるかどうか」を確認するだけなら 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 -s と apt-get dist-upgrade -s(どちらもシミュレーション)を比較したところ、今回のケースではどちらも「6 upgraded, 0 newly installed, 0 to remove」で同じ結果でした。差が出るのは、カーネルアップデートや大規模な依存関係の変更があったときです。
もうひとつ、Ubuntu 22.04 と 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
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)が裏で動いている場合が多いです。しばらく待ってから再実行してください。
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
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
これはコンテナで実際に再現した警告です。apt(フロントエンド)の出力をパイプやスクリプトで処理しようとすると出ます。スクリプトでは apt-get(バックエンド)を使うことで回避できます。手動操作では無視して問題ありません。
(警告なしで実行)
まとめ
| コマンド | 何をするか | パッケージの変更 | 実行頻度 |
|---|---|---|---|
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 コンテナで実際に実行し、libssl3t64・libsystemd0 などセキュリティ関連パッケージ6件の更新を確認しました。apt update なしでは「0 upgraded」と判定されてしまうことも実測で示しています。「update してから upgrade」――この順番だけは、理由まで含めて覚えておいてください。
本格的にサーバーを運用するなら
VPS上のUbuntuサーバーを長期運用するなら、定期的な apt upgrade に加えて、ファイアウォール設定・SSH鍵認証・ログ監視が重要です。VPS選びからサーバー構築・セキュリティ設定まで解説した記事もあわせてご覧ください。



コメント