apt upgrade と apt-get upgrade の違い
UbuntuやDebian系のサーバでパッケージを更新するとき、apt upgrade と apt-get upgrade のどちらを使うべきか迷うことがあります。結論から言うと、手作業でサーバを管理する場合は apt upgrade、スクリプトや自動化で使う場合は apt-get upgrade が基本です。
apt と apt-get の位置づけ
apt は、人がターミナル上で直接使いやすいように作られたコマンドです。表示が見やすく、更新対象や進行状況も把握しやすいため、日常的なサーバ管理ではこちらが扱いやすいです。
一方で apt-get は、より古くから使われている低レベル寄りのコマンドです。出力や挙動が比較的安定しているため、シェルスクリプト、cron、Dockerfile、CI、構成管理ツールなど、自動処理の中では apt-get がよく使われます。
普段実行するなら apt upgrade でよい
自分でログインしてサーバを更新する場合は、次の流れで問題ありません。
sudo apt update
sudo apt upgrade
apt update は、利用可能なパッケージ情報を更新するコマンドです。実際にパッケージを更新するのが apt upgrade です。
更新前に確認したい場合
サーバ運用では、いきなり更新するのではなく、何が更新されるのかを先に確認したい場合があります。その場合は次のようにします。
sudo apt update
apt list --upgradable
更新対象を確認して問題なさそうであれば、次を実行します。
sudo apt upgrade
apt-get upgrade を使う場面
apt-get upgrade も、基本的には同じようにパッケージ更新を行います。
sudo apt-get update
sudo apt-get upgrade
ただし、手作業で実行するなら apt の方が見やすいため、普段のサーバ管理では apt を使えば十分です。apt-get は、自動化やスクリプト内で使うもの、と考えると分かりやすいです。
apt upgrade と apt-get upgrade で結果に差が出る場合
apt upgrade と apt-get upgrade で、今適用できるパッケージの結果に差が出ることがあります。これは異常とは限りません。
主な理由は、apt upgrade の方が手作業向けに少し柔軟で、更新に必要な新しい依存パッケージの追加を許す場合があるためです。一方、apt-get upgrade はより保守的で、既存パッケージの更新は行いますが、新しいパッケージの追加や既存パッケージの削除が必要になる更新は保留しやすいです。
そのため、apt upgrade では適用可能と表示され、apt-get upgrade では保留される、ということがあります。
このような場合は、まず実行内容をシミュレーションして確認します。
sudo apt update
sudo apt upgrade --dry-run
表示された内容に問題がなければ、通常は次のコマンドで進めて大丈夫です。
sudo apt upgrade
apt-get を使いながら、新しい依存パッケージの追加も許可したい場合は、次のように実行できます。
sudo apt-get --with-new-pkgs upgrade
ただし、パッケージの削除が必要になる更新まで進める場合は upgrade ではなく full-upgrade の領域です。削除対象をよく確認してから実行します。
full-upgrade が必要になる場合
upgrade では、更新に伴って新しいパッケージの追加や既存パッケージの削除が必要になる場合、その更新が保留されることがあります。
そのような場合は、内容を確認したうえで full-upgrade を使います。
sudo apt full-upgrade
full-upgrade は、必要に応じてパッケージの追加や削除も行うため、通常の upgrade より影響範囲が広くなります。サーバで実行する場合は、削除されるパッケージがないかを必ず確認してから進めるのが安全です。
不要になったパッケージが表示された場合
更新後に「もう必要とされていません」と表示されるパッケージは、以前は依存関係で自動インストールされたものの、現在は依存元がなくなったパッケージです。基本的には削除して問題ありません。
まずは、削除される内容を確認します。
sudo apt autoremove --dry-run
問題なさそうであれば、実際に削除します。
sudo apt autoremove
もし残したいパッケージが含まれている場合は、手動インストール扱いに変更できます。
sudo apt-mark manual パッケージ名
まとめ
手作業でサーバを更新するなら、基本は次のコマンドで十分です。
sudo apt update
sudo apt upgrade
スクリプトや自動化では、安定した挙動が期待できる apt-get を使うのが一般的です。
つまり、普段のサーバ管理では apt、自動化では apt-get と使い分ければ問題ありません。両者で適用可能なパッケージ数に差が出る場合は、apt upgrade --dry-run で内容を確認し、問題なければ apt upgrade で進めます。更新後に不要なパッケージが表示された場合は、apt autoremove --dry-run で確認してから削除すると安全です。