Dockerfileを書いていて【apt】と【apt-get】【apt-cache】の使い分けに悩んだ話

僕の普段使うLinuxのディストリビューションはUbuntuです。

Ubuntuではかなり前から古いapt-getではなく新しいaptが推奨されているため、今では当然のようにaptを使っています。

aptはapt-getとapt-cacheが統合されたようなコマンドなので、こっちのほうが便利ですしね。

旧(apt-get,apt-cache,dpkg)と新(apt)の対応例

機能
apt-get updateapt update設定されたすべての取得元からパッケージ情報をダウンロードする
apt-get upgradeapt upgrade設定された取得元からシステムに現在インストール済みのすべてのパッケージで利用可能なアップグレードをインストールする
apt-get dist-upgradeapt full-upgradeupgradeではパッケージを更新するために他のパッケージを削除する必要があるときは保留されるが、こちらはパッケージを削除しないと更新できないパッケージも更新対象となる
apt-get install パッケージapt install パッケージパッケージをインストールする
apt-get remove パッケージapt remove パッケージパッケージを削除する
apt-get autoremoveapt autoremoveパッケージを削除したために必要なくなったパッケージを削除する
apt-cache search 文字列apt search 文字列指定した文字列を含むパッケージを検索する
apt-cache show パッケージapt show パッケージ指定されたパッケージに関する情報を表示する
dpkg --list⁠ パッケージ
apt-cache -n search
apt list パッケージパッケージを検索する

しかし、Dockerfileを触っていると、apt-getを使っているものが多いです。

なんでだろう?aptが推奨じゃないの?と思っていましたが、aptのマニュアルを見るとこう書かれていました。

スクリプトの使い方およびほかの APT ツールとの違い

apt(8) コマンドラインはエンドユーザ向けツールとして設計されています。動作はバージョン間で変更される可能性があ
ります。後方互換性を損なうことのないようには努めますが、変更がインタラクティブな使用に有益と思われる場合に
は、その保証はありません。

apt(8) のすべての機能は、apt-get(8) や apt-cache(8) など専用の APT ツールで利用可能です。apt(8) は、単にいくつ
かのオプションのデフォルト値を変更します (apt.conf(5) の特にバイナリ範囲を参照)。可能な限り下位互換性を保つよ
うに、スクリプトでは (潜在的に有効になっているいくつかの追加オプションをつけて) コマンドを使うべきです。


つまり、コマンドラインで打つときはaptを使いますが、スクリプトで使うときは下位互換性を保ってapt-getやapt-cacheを使うのが推奨されているようです。

なるほど、勉強になりました。

コメントを残す

メールアドレスが公開されることはありません。