Help us understand the problem. What is going on with this article?

重要なのに忘れがちなapt関係のコマンドのメモ

いい加減にapt-getからaptに乗り換えようと思った

 Linux(Ubuntu)やラズパイ(Raspberry Pi OS)でよく使う、パッケージ管理コマンドのapt。今まで、互換性を重視して基本的にapt-getを使うようにしてきました。ただ、Ubuntuは6年前の14.04から、Raspberry Pi OSもRaspbian Jessieからaptコマンドが使えるようになったので、そろそろ互換性の問題が起こることもよほど無いだろうと思いaptコマンドに乗り換えることにしました。

 というわけで、apt-getaptの違いと忘れがちなaptコマンドとかを備忘録がわりにまとめておきたいと思います。随時更新していきます。

apt-getaptの違い

 そもそもaptが何で、apt-get(apt-cache)と何が違うかというと、以下くらいのようです。

  • aptは新しいパッケージ管理コマンドで apt-getapt-cacheが統合したもの
  • aptはプログレスバーがついて進捗がわかりやすい
  • upgradeのときaptよりapt-getの方が条件が厳しい(慎重)

 あんまり使い手側が意識する必要はないですね。apt-cacheも古いからaptを使うようにした方がよいのと、aptはプログレスバーが出るのでちょっとカッコいい(?)くらいでしょうか。コマンドの対応表を最後の方にのっけたのでそちらも参考にしてみてください。

 他パッケージインストールするコマンドで似たものにaptitudesnapといったものがあります。aptitudeaptと似た外部パッケージですが、基本的に積極的に使用する必要はないと思います。snapaptがdebパッケージをインストールするのに対して、snapsnapパッケージをインストールします。仕組みの詳細は割愛しますがsnapパッケージはクリーンにインストールしやすく、aptとも共存可能なので、パッケージによってはsnapを選択するのも良いかと思います。

aptコマンド基本

 パッケージのリストをアップデートして、インストールするのが基本ですね。<package>のところは、対象のパッケージの名前を入れてください。

$ sudo apt update
$ sudo apt install <package>

 インストールするとき、いちいち Yes or Noを聞かれるのが嫌な場合(特にスクリプトで自動化したい場合)は、以下のように-yオプションをつけましょう。-yの位置はinstallの前でも後ろでもOKです。

$ sudo apt -y install <package>

 ログを極力表示させたくないときは-qqオプションを使う。

$ sudo apt -qq update
$ sudo apt -qq install <package>

 ログを全く表示させたくないときは、コマンドの後に> /dev/null 2>&1をつける。これはapt以外のコマンドでも使える。

$ sudo apt update > /dev/null 2>&1
$ sudo apt install <package> > /dev/null 2>&1

パッケージのバージョン一覧確認

 インストール可能なパッケージのバージョンの一覧の確認方法です。<package>のところは、対象のパッケージの名前を入れてください。

$ apt list -a <package>

 インストール済みのパッケージのバージョンを確認する方法は、正確にはaptコマンドではないですがapt-show-versionsというパッケージを使う方法があります。

$ apt-show-versions <package>

 apt-show-versionsがインストールされていなかったら、以下コマンドでインストールしましょう。

$ sudo apt-get install apt-show-versions

 もしくは、以下のようにdpkgコマンドでも確認できます。

$ dpkg -l <package>

自動更新を止める

 パッケージの更新を止める場合は以下です。

$ sudo apt-mark hold <package>

 使うのは、例えばCUDA関係とかですかね。ついでに、aptではないですがカーネルの自動更新を止める方法は以下です。

$ sudo dpkg-reconfigure --priority=low unattended-upgrades

 続いて出てくる画面で「自動的に安定版の更新をダウンロードしてインストールしますか?」というようなことが聞かれるので「いいえ」を選択すれば自動更新を止められます(「はい」にすると、自動で更新されます)。

 実際に設定されるのは以下のファイルです。

/etc/apt/apt.conf.d/20auto-upgrades

 手動で設定したい場合は、以下の通りに0に設定することで自動更新を停止できます(1にすると自動更新します)。

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";

aptコマンドとapt-get/apt-cacheコマンドの対応表

 代表的なコマンドの対応表を載せます。apt-getapt-cacheを使っている人はaptコマンドへ置き換えを進めると良いのではないかと思います。

apt apt-get/apt-cache 内容
sudo apt update sudo apt-get update パッケージリストの更新
sudo apt install <package> sudo apt-get install <package> パッケージのインストール
apt search <package> apt-cache search <package> パッケージの検索
sudo apt remove <package> sudo apt-get remove <package> パッケージの削除
sudo apt remove --purge <package> sudo apt-get remove --purge <package> パッケージの完全な削除
sudo apt upgrade sudo apt-get upgrade パッケージの更新(apt-getの方が慎重)
apt list -a apt-cache policy <package> バージョンの一覧確認

Dockerfileではaptでなくapt-getが推奨

 Docker ドキュメントをみたところ、どうもDockerのDockerfileでは、aptでなくapt-getが推奨なようですね。

 全部aptに置き換えたいのに、紛らわしいです…

Docker入門して機械学習環境構築

まとめ

 apt関係の情報をまとめました。これで心置きなくapt-getからaptに乗り換えられそうです。

関連ページ

Ubuntuをちょっと使いやすくする設定集

参考

変更履歴

  • 2020/11/27 Dockerfileに関して追記
  • 2020/11/04 基本コマンドと対応表を追記
karaage0703
闇のエンジニア/変なデジカメ開発中/ディープラーニング芸人/Raspberry Piとからあげ大好き/はてなブログ書いてます
https://karaage.hatenadiary.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away