Ubuntuで apt install を繰り返していると、不要なパッケージが残り続けることがあります。その原因の多くが「自動/手動インストールのマーク」の管理不足です。apt-mark コマンドを使えば、どのパッケージを「自分でインストールした」「依存で入った」と扱うかを制御できます。
また、特定のパッケージをアップデートしたくない場面(カーネルの固定、ライブラリのバージョン維持など)でも apt-mark は役立ちます。本記事では Ubuntu 24.04 LTS の Docker 公式イメージで実際にコマンドを動かした結果を載せながら、apt-mark の全サブコマンドを解説します。
この記事のポイント
apt-mark showmanual/showautoで手動・自動マークのパッケージを一覧できるapt-mark autoでパッケージを自動マークにするとapt autoremoveの削除対象になるapt-mark holdでバージョンを固定し、apt upgradeの対象から外せる- マーク情報は
/var/lib/apt/extended_statesファイルに保存されている - Ubuntu 22.04(apt 2.4.14)と 24.04(apt 2.8.3)でコマンド構文は互換
目次
- apt-markとは
- 前提環境
- showmanual / showauto でマーク状態を確認する
- apt-mark auto でパッケージを自動マークにする
- apt-mark manual で手動マークに戻す
- apt-mark hold でバージョンを固定する
- マーク情報の保存先(extended_states)
- Ubuntu 22.04 vs 24.04 の違い
- よくある間違いと注意点
- まとめ
apt-markとは
apt-mark は APT パッケージマネージャーの補助コマンドです。パッケージに「手動インストール(manual)」「自動インストール(auto)」「バージョン固定(hold)」のマークを付けるために使います。
Ubuntuで apt install curl を実行すると、curl 本体は「手動インストール」、一緒に入った依存ライブラリは「自動インストール」としてマークされます。このマーク情報をもとに apt autoremove が「不要な依存パッケージ」を判断して削除候補にリストアップします。
apt-markが重要な理由
マークを誤って変えると、次の apt autoremove で意図しないパッケージが大量削除される場合があります。本記事で実際の挙動を確認してから操作してください。
前提環境
- OS:Ubuntu 24.04.1 LTS(Noble Numbat)
- apt バージョン:2.8.3(Ubuntu 22.04 は 2.4.14 で構文は互換)
- 実行環境:Docker公式イメージ
ubuntu:24.04(2026-06-13 実行)
apt 2.8.3 (arm64)
showmanual / showauto でマーク状態を確認する
まずは現在のマーク状態を確認するところから始めましょう。
手順1:手動インストール済みパッケージを確認する(showmanual)
apt-mark showmanual で、自分で明示的にインストールしたパッケージの一覧が表示されます。
apt
base-files
bash
coreutils
…
$ apt-mark showmanual | wc -l
91
Ubuntu 24.04 の Docker 公式イメージ(フレッシュ状態)では 91個 のパッケージが手動マークになっていました。bash・coreutils・apt など、システムの根幹をなすパッケージが並んでいます。
手順2:自動インストール済みパッケージを確認する(showauto)
libdb5.3t64
$ apt-mark showauto | wc -l
1
フレッシュな Ubuntu 24.04 コンテナでは libdb5.3t64 の1個だけが自動マークになっていました。このライブラリは bash などが依存しているものですが、システムイメージ構築の都合で自動マークになっています。

手順3:固定パッケージを確認する(showhold)
(出力なし: hold中のパッケージはない)
フレッシュ状態ではholdパッケージはありません。hold の使い方は後ほど説明します。
apt-mark auto でパッケージを自動マークにする
apt-mark auto は「このパッケージは依存で入ったもの」と apt に伝えるコマンドです。自動マークになったパッケージは、それに依存する手動マークパッケージがなくなると apt autoremove の削除候補になります。
手順1:curl をインストールして依存関係を確認する
まず curl をインストールして、何が自動マークになるかを見てみます。
Setting up curl (8.5.0-2ubuntu10.9) …
$ apt-mark showauto | wc -l
21 ← インストール前は1個、依存で20個追加
$ apt-mark showauto | grep -E “^(ca-cert|libcurl|openssl)”
ca-certificates
libcurl4t64
openssl
curl のインストールで ca-certificates・libcurl4t64・openssl など 20 個の依存パッケージが自動マークになりました(合計21個)。curl 本体は手動マークです。
手順2:apt-mark auto でパッケージを自動マークにする
curl set to automatically installed.
$ apt-mark showmanual | grep curl
(出力なし: 手動マークから外れた)
手順3:autoremove の削除候補を確認する
curl を自動マークにした直後に apt-get autoremove --dry-run(実際には削除しない確認)を実行してみます。
0 upgraded, 0 newly installed, 19 to remove and 5 not upgraded.
curl を自動マークに変えただけで、curl 本体+依存ライブラリ合わせて 19個 が autoremove の削除候補になりました。もし apt autoremove を実行すると curl が丸ごと消えてしまいます。正直、これは思ったより多い数です。

注意:apt-mark auto の使用は慎重に
手動でインストールしたパッケージを誤って apt-mark auto にすると、次の apt autoremove で依存パッケージごと削除されます。変更前に apt-get autoremove --dry-run で削除候補を確認してから実行してください。
apt-mark manual で手動マークに戻す
自動マークになったパッケージを「手動インストール」に戻すには apt-mark manual を使います。
curl set to manually installed.
$ apt-mark showmanual | grep curl
curl
curl set to manually installed. と表示されれば手動マークへの変更完了です。apt-mark showmanual に curl が表示されるようになり、autoremove の対象から外れます。
複数パッケージをまとめて手動マークにする
スペース区切りで複数パッケージを一度に指定できます。
curl set to manually installed.
wget set to manually installed.
vim set to manually installed.
apt-mark hold でバージョンを固定する
apt-mark hold を使うと、特定パッケージを現在のバージョンに固定でき、apt upgrade でも更新されなくなります。カーネルの意図しないアップデートを防ぎたいときや、本番環境でライブラリを特定バージョンで維持したい場合に便利です。
手順1:パッケージをholdする
Setting up curl (8.5.0-2ubuntu10.9) …
$ apt-mark hold curl
curl set on hold.
$ apt-mark showhold
curl
curl set on hold. と表示されれば固定完了です。apt-mark showhold でholdされているパッケージの一覧を確認できます。
手順2:hold状態でupgradeを試みる
hold したパッケージは apt upgrade を実行しても更新されません。
The following packages have been kept back:
curl
「kept back」として表示され、curl は更新対象から除外されます。
手順3:hold を解除する(unhold)
Canceled hold on curl.
$ apt-mark showhold | grep curl
(出力なし: hold解除済み)
Canceled hold on curl. と出力されれば固定解除完了です。以降は apt upgrade で通常通り更新されます。

カーネルを固定する場合
apt-mark hold linux-image-generic linux-headers-generic のように指定します。VPSでカーネル更新後の再起動が怖い場合に役立ちます。apt-mark showhold で固定状態を定期的に確認しておきましょう。
マーク情報の保存先(/var/lib/apt/extended_states)
apt-mark のマーク情報は /var/lib/apt/extended_states というファイルに保存されています。テキスト形式で確認できます。
Package: libdb5.3t64
Architecture: arm64
Auto-Installed: 1
Package: libkeyutils1
Architecture: arm64
Auto-Installed: 1
$ grep -c “Auto-Installed: 1” /var/lib/apt/extended_states
21
Auto-Installed: 1 が「自動マーク」の実体です。curl と wget をインストール後、このファイルには 21 個の Auto-Installed: 1 エントリが記録されていました(ファイル全体で 84 行)。apt-mark manual / apt-mark auto コマンドは、裏でこのファイルを更新しています。

Ubuntu 22.04 vs 24.04 の違い
Docker コンテナで Ubuntu 22.04(Jammy)と 24.04(Noble)の両方で apt-mark を実行して比較しました。

コマンドの構文や動作に変更はなく、どちらのバージョンのサーバーでも同じように使えます。ただし apt のバージョンが 22.04 は 2.4.14、24.04 は 2.8.3 と異なります。フレッシュ状態の手動マーク数も 22.04 は 101 個、24.04 は 91 個と差があります(Dockerイメージの構成差によるもの)。
よくある間違いと注意点
①apt-mark auto を実行したらパッケージが消えた
よくあるミスです。apt-mark auto を実行した直後に apt autoremove を実行すると、そのパッケージと依存パッケージが削除されます。必ず apt-get autoremove --dry-run で削除候補を確認してから実行してください。
②apt-mark と apt-cache mark の混同
apt-cache にマーク系コマンドはありません。マーク操作は apt-mark で行います。紛らわしいですが、機能が分かれています。
③hold したパッケージが apt upgrade で更新されてしまう
apt-mark hold でなく、dpkg --set-selections で hold を設定するやり方もありますが、コマンドが異なります。apt-mark hold と dpkg hold は別管理ですので、apt-mark showhold で確認する習慣をつけましょう。
④showmanual の出力が多すぎて把握しにくい
自分でインストールしたパッケージだけを探したいなら、comm コマンドと組み合わせる方法があります。
$ apt-mark showmanual | sort | grep “^nginx\|^curl\|^vim”
curl
nginx
まとめ
apt-mark の主要コマンドをまとめます。
| コマンド | 動作 | 使いどころ |
|---|---|---|
apt-mark showmanual |
手動インストール済みパッケージを一覧表示 | インストール済みパッケージの棚卸し |
apt-mark showauto |
自動インストール済みパッケージを一覧表示 | 不要な依存パッケージの確認 |
apt-mark showhold |
バージョン固定中のパッケージを一覧表示 | 固定状態の確認 |
apt-mark manual <pkg> |
手動マークに変更 | autoremove の対象から外す |
apt-mark auto <pkg> |
自動マークに変更 | 不要なパッケージを autoremove 候補にする |
apt-mark hold <pkg> |
バージョンを固定(upgrade 対象外) | カーネル・重要ライブラリの固定 |
apt-mark unhold <pkg> |
バージョン固定を解除 | hold 解除後に通常の upgrade へ戻す |
- Ubuntu 24.04(apt 2.8.3)フレッシュ状態:手動マーク 91 個・自動マーク 1 個(実測)
- curl をインストールすると依存込みで 21 個が自動マークに(実測)
apt-mark auto curlにすると 19 個が autoremove 候補になる(実測)- マーク情報は
/var/lib/apt/extended_statesに保存される - Ubuntu 22.04 / 24.04 どちらでも構文は同じ
本格的にVPSを運用する場合、apt-mark による依存管理は必須スキルのひとつです。特に apt autoremove 前の確認を習慣にすると、意図しないパッケージ削除を防げます。
VPS の選び方や初期セットアップについては Ubuntu VPS初期セットアップ完全ガイド も参考にしてください。


コメント