ターミナル

apt vs apt-get 公式が本当に推奨している使い方とは

2023年1月28日

aptがあればapt-getは不要?

Debian系のパッケージ管理として「apt」が登場してから、時々「apt-getは不要!」という話を聞くことがあります。

結論から言うと、公式では「使い分けよう」が正解です。

公式の方では、次のように解説しています。

ユーザーは インタラクティブ 用途には apt(8) コマンドを使うことが推奨されますし、シェルスクリプト中ではapt-get(8) や apt-cache(8) コマンドを使うことが推奨されます

aptやapt-getそれぞれの特徴をしっかり捉えて、正しく使い分けるようにしましょう。

特に参考にしてほしい方

  • aptまたはapt-getのみで済ませている方
  • aptとapt-getの違いをあまり意識していない方

aptは対話型(インタラクティブ)として、apt-getはCLI用として使う

apt, apt-getコマンドの実行イメージ画像

aptやapt-getの違いについて、公式のドキュメント(翻訳版)を元に比較してみます。

カタカナ用語が多く少々読みにくいですが、なるべく分かりやすくなるよう解説します。

英語の原文が読める方は、記事の最後にリンクを張っているのでそちらの方が分かりやすいかもしれません。

aptコマンドの特徴と使い方

aptコマンドの特徴について、Debianの公式ドキュメントには次のようにあります。

apt コマンドはパッケージ管理のための上位コマンドラインインターフェースです。基本的に apt-get や apt-cache 等のコマンドのラッパーで、インタラクティブな用途に良いオプションをデフォルトで有効にしてエンドユーザーインターフェース向けとなっています。

  • apt は、apt install としてパッケージをインストールするとフレンドリーなプログレスバーを提供します。
  • apt は、ダウンロードされたパッケージが上手くインストールされた後、デフォルトでキャッシュされた .deb パッケージを削除 します。

ということですから、ざっくり次のことが言えます。

  • aptコマンドはapt-getやapt-cacheを内包し、使いやすいようにカスタムしたコマンド
  • エンドユーザ(開発者)が使いやすいように設計されている

aptではインストール中のプログレスバーをはじめ、コマンドライン上にエンドユーザ向けのメッセージが表示されますね。

使用する状況としては、ssh上で直接パッケージをインストールする時などでしょうか。

apt-getコマンドの特徴と使い方

次のapt-getコマンドについて、公式の見解は次の通りです。

  • apt-get/apt-cache はコマンドラインのユーザーインターフェースのみを提供します。
  • apt-get はリリース間のような大掛かりなシステムアップグレードに最適です。
  • apt-get は頑強で安定なパッケージリゾルバーを提供します。
  • apt-getはハードウエアリソースへの要求が楽である。メモリーの消費は少なく、実行速度が早い。
  • apt-cache はパッケージ名や説明に関して標準の regex を使った検索機能を提供します。
  • apt-get と apt-cache は /etc/apt/preferences を使って複数のバージョンのパッケージを管理できますが、それはとても面倒です。

apt-getについてはそのようにありますので、要約すると次の通りです。

  • 最も基本的な、CLI専用のパッケージ管理ツールコマンド
  • メモリや時間効率が良く、大規模なシステムアップデートに向いている
  • 複数のバージョン管理には向かない

CLIで動かすのであれば、今後もapt-getの方を使っても良さそうです。

使用状況は、Docker等の仮想環境でパッケージをインストールするときなどでしょうか。
それ以外でもバックグラウンドでのパッケージインストールは良くすると思うので、今後も使っていく機会は多そうです。

もう一つのコマンド「aptitude」について

もう一つのコマンド「aptitude」について

aptitude コマンドは最も多芸なAPTを使うパッケージ管理ツールです。

  • aptitude はフルスクリーンのインタラクティブなテキストユーザーインターフェースを提供します。
  • aptitude はコマンドラインのユーザーインターフェースも提供します。
  • aptitude はインストールされたパッケージを検査したり利用可能なパッケージを探索したりするような日常のインタラクティブなパッケージ管理に最適です。
  • aptitudeはハードウエアリソースへの要求が厳しい。メモリーの消費は多く、実行速度も遅い。
  • aptitude はパッケージメタデータ全てに関する拡張されたregex を使った探索を提供します。
  • aptitude は /etc/apt/preferences を使わずに複数のバージョンのパッケージを管理できますし、それは非常に直感的です。

要約してみます。

  • インタラクティブ(対話)モードとCLIモードの両方が使用できる
  • パッケージ関連のトラブルシューティングに向いている
  • メモリや速度効率は悪い
  • 複数バージョンの管理がしやすい

一番リッチなパッケージ管理ツールですね。

CLIモードも搭載していますが、通常はaptコマンドで良さそうです。

トラブルが起きた場合の確認や、メッセージを見ながら動作をさせたい時に向いています。
何に使えるというよりかは、何かあった時に使うという感じでしょうか。

aptとapt-getコマンドは、目的に応じて使い分けよう

今回はaptコマンド、apt-getコマンド、あまり取り上げませんでしたがaptitudeコマンドについて紹介しました。

それぞれの特徴を、簡単にもう一度まとめてみます。

apt

インタラクティブ向けにカスタマイズしており、確認しながらの使用におすすめ(sshなど)

apt-get

CLIのみ対応しており、バックグラウンド動作におすすめ(シェルやdockerなど)

aptitude

インタラクティブにもCLIにも対応。パッケージの確認作業におすすめ(トラブル時や複数バージョン管理など)

sshのターミナル上ではaptを使い、Dockerなどのスクリプト上ではapt-getを使う方針で問題ないと思います。

私はほとんど使いませんが、aptitudeという選択肢もあります。

使用する目的に合わせて、最適なコマンドを選択するようにしてください。

参考サイト

Debianドキュメント(日本語): https://www.debian.org/doc/manuals/debian-reference/ch02.ja.html

Debianドキュメント(英語): https://www.debian.org/doc/manuals/debian-reference/ch02.en.html

Debian管理者ハンドブック: https://debian-handbook.info/browse/ja-JP/stable/sect.apt-get.html

Debian管理者ハンドブック(英語): https://debian-handbook.info/browse/stable/sect.apt-get.html

-ターミナル
-