Ubuntuのapt-markで手動/自動インストールを管理する方法

パッケージ管理

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)でコマンド構文は互換

目次

  1. apt-markとは
  2. 前提環境
  3. showmanual / showauto でマーク状態を確認する
  4. apt-mark auto でパッケージを自動マークにする
  5. apt-mark manual で手動マークに戻す
  6. apt-mark hold でバージョンを固定する
  7. マーク情報の保存先(extended_states)
  8. Ubuntu 22.04 vs 24.04 の違い
  9. よくある間違いと注意点
  10. まとめ

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 実行)



ubuntu@linuxlab: ~
$ apt-mark –version
apt 2.8.3 (arm64)

showmanual / showauto でマーク状態を確認する

まずは現在のマーク状態を確認するところから始めましょう。

手順1:手動インストール済みパッケージを確認する(showmanual)

apt-mark showmanual で、自分で明示的にインストールしたパッケージの一覧が表示されます。




ubuntu@linuxlab: ~
$ apt-mark showmanual
apt
base-files
bash
coreutils

$ apt-mark showmanual | wc -l
91

Ubuntu 24.04 の Docker 公式イメージ(フレッシュ状態)では 91個 のパッケージが手動マークになっていました。bashcoreutilsapt など、システムの根幹をなすパッケージが並んでいます。

手順2:自動インストール済みパッケージを確認する(showauto)




ubuntu@linuxlab: ~
$ apt-mark showauto
libdb5.3t64
$ apt-mark showauto | wc -l
1

フレッシュな Ubuntu 24.04 コンテナでは libdb5.3t64 の1個だけが自動マークになっていました。このライブラリは bash などが依存しているものですが、システムイメージ構築の都合で自動マークになっています。

apt-mark showmanual/showauto の実行結果(Ubuntu 24.04、実測)
apt-mark showmanual/showauto の実行結果(Ubuntu 24.04、実測)

手順3:固定パッケージを確認する(showhold)




ubuntu@linuxlab: ~
$ apt-mark showhold
(出力なし: hold中のパッケージはない)

フレッシュ状態ではholdパッケージはありません。hold の使い方は後ほど説明します。

apt-mark auto でパッケージを自動マークにする

apt-mark auto は「このパッケージは依存で入ったもの」と apt に伝えるコマンドです。自動マークになったパッケージは、それに依存する手動マークパッケージがなくなると apt autoremove の削除候補になります。

手順1:curl をインストールして依存関係を確認する

まず curl をインストールして、何が自動マークになるかを見てみます。




ubuntu@linuxlab: ~
$ apt-get install -y 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-certificateslibcurl4t64openssl など 20 個の依存パッケージが自動マークになりました(合計21個)。curl 本体は手動マークです。

手順2:apt-mark auto でパッケージを自動マークにする




ubuntu@linuxlab: ~
$ apt-mark auto curl
curl set to automatically installed.
$ apt-mark showmanual | grep curl
(出力なし: 手動マークから外れた)

手順3:autoremove の削除候補を確認する

curl を自動マークにした直後に apt-get autoremove --dry-run(実際には削除しない確認)を実行してみます。




ubuntu@linuxlab: ~
$ apt-get autoremove –dry-run 2>&1 | tail -2
0 upgraded, 0 newly installed, 19 to remove and 5 not upgraded.

curl を自動マークに変えただけで、curl 本体+依存ライブラリ合わせて 19個 が autoremove の削除候補になりました。もし apt autoremove を実行すると curl が丸ごと消えてしまいます。正直、これは思ったより多い数です。

apt-mark auto で自動マーク変更→autoremove削除候補の流れ(実測)
apt-mark auto で自動マーク変更→autoremove削除候補の流れ(実測)

注意:apt-mark auto の使用は慎重に

手動でインストールしたパッケージを誤って apt-mark auto にすると、次の apt autoremove で依存パッケージごと削除されます。変更前に apt-get autoremove --dry-run で削除候補を確認してから実行してください。

apt-mark manual で手動マークに戻す

自動マークになったパッケージを「手動インストール」に戻すには apt-mark manual を使います。




ubuntu@linuxlab: ~
$ apt-mark manual curl
curl set to manually installed.
$ apt-mark showmanual | grep curl
curl

curl set to manually installed. と表示されれば手動マークへの変更完了です。apt-mark showmanual に curl が表示されるようになり、autoremove の対象から外れます。

複数パッケージをまとめて手動マークにする

スペース区切りで複数パッケージを一度に指定できます。




ubuntu@linuxlab: ~
$ apt-mark manual curl wget vim
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する




ubuntu@linuxlab: ~
$ apt-get install -y curl
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 を実行しても更新されません。




ubuntu@linuxlab: ~
$ apt-get upgrade –dry-run 2>&1 | grep “held back”
The following packages have been kept back:
curl

「kept back」として表示され、curl は更新対象から除外されます。

手順3:hold を解除する(unhold)




ubuntu@linuxlab: ~
$ apt-mark unhold curl
Canceled hold on curl.
$ apt-mark showhold | grep curl
(出力なし: hold解除済み)

Canceled hold on curl. と出力されれば固定解除完了です。以降は apt upgrade で通常通り更新されます。

apt-mark hold/unhold でバージョン固定する実行例(実測)
apt-mark hold/unhold でバージョン固定する実行例(実測)

カーネルを固定する場合

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 というファイルに保存されています。テキスト形式で確認できます。




ubuntu@linuxlab: ~
$ head -12 /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 コマンドは、裏でこのファイルを更新しています。

/var/lib/apt/extended_states の実体ファイル(実測)
/var/lib/apt/extended_states の実体ファイル(実測)

Ubuntu 22.04 vs 24.04 の違い

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

Ubuntu 22.04 vs 24.04 apt-mark 挙動比較(実測)
Ubuntu 22.04 vs 24.04 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 コマンドと組み合わせる方法があります。




ubuntu@linuxlab: ~
# 手動マークのパッケージをアルファベット順で保存して grep する例
$ 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初期セットアップ完全ガイド も参考にしてください。

コメント

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