Ubuntu 16.04 / Debian 8: aptコマンドの使い方

apt-getコマンドとapt-cacheコマンドを一つにまとめたaptコマンドの使い方について記載します。

 

1 aptコマンド

apt-get/apt-cacheの統合を目指したコマンドです。従来、apt-get / apt-cacheでいちいち切り替えるのが面倒でした。aptコマンドを使えば、installやsearchをaptコマンドのまま使うことができます。

 

apt install <pkgname> インストール
apt remove <pkgname> アンインストール
apt autoremove 依存で必要だったが現在は不要なパッケージの削除
apt search <pkgname> 検索
apt show <pkgname> 情報表示
apt update アップデート
apt upgrade アップグレード
apt dist-upgrade (full-upgrade) パッケージ削除がありうるアップグレード

 

apt-getとの違いで画面下部にプログレスバーが表示されるようになります。

2 apt upgradeとapt-get upgradeの違い

apt upgradeは新規パッケージをインストールする場合があります。apt-get upgradeは新規パッケージをインストールしません。

apt dist-upgrade/apt dist-upgradeは新規パッケージを追加するだけでなく既存パッケージを削除する場合があります。これはapt upgrade/apt-get upgradeとは異なります。

基本的にはapt upgradeを使う方が良いです。

2.1 apt-get upgradeでカーネルがアップグレードされない

SSHでログインするとセキュリティアップデートがあると表示されます。

Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-21-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

7 packages can be updated.
7 updates are security updates.

Last login: Sat Jul  9 21:56:03 2016 from 192.168.11.4

セキュリティアップデートの対象はlinux-genericパッケージ等です。

$ apt list --upgradable
Listing... Done
linux-generic/xenial-updates,xenial-security 4.4.0.28.30 amd64 [upgradable from: 4.4.0.21.22]
linux-headers-generic/xenial-updates,xenial-security 4.4.0.28.30 amd64 [upgradable from: 4.4.0.21.22]
linux-image-generic/xenial-updates,xenial-security 4.4.0.28.30 amd64 [upgradable from: 4.4.0.21.22]

apt-get upgradeを実行すると新規パッケージのインストールがあると判定されてパッケージのアップグレードは保留されます。

$ sudo apt-get upgrade -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

apt upgradeを実行するとパッケージがアップグレードされます。

$ sudo apt upgrade -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-4.4.0-28 linux-headers-4.4.0-28-generic linux-image-4.4.0-28-generic
  linux-image-extra-4.4.0-28-generic
The following packages will be upgraded:
  linux-generic linux-headers-generic linux-image-generic
3 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 68.3 MB of archives.
After this operation, 295 MB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64
linux-image-4.4.0-28-generic amd64 4.4.0-28.47 [18.7 MB]

apt-get upgradeで同じことをやろうとすると以下のように–with-new-pkgsオプションを付与する必要があります。

$ sudo apt-get upgrade --with-new-pkgs # equal with sudo apt upgrade.

3 パッケージの依存関係が解決できない

アップデートされなくなった非公式リポジトリを利用している場合に起こりがちです。以下のコマンドで強制的に解消します。

$ apt -f install

4 aptを試すだけで実行しない

aptの–just-printオプションを使います。

$ apt install --just-print apache2
注意: これはシミュレーションにすぎません!
      apt-get は実際の実行に root 権限を必要とします。
      ロックが非アクティブであることから、今この時点の状態に妥当性が
      あるとは言い切れないことに注意してください!
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  emacs24 emacs24-bin-common emacs24-common emacs24-common-non-dfsg emacs24-el libgif7
  liblockfile-bin liblockfile1 libm17n-0 libotf0 m17n-db
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3
  libaprutil1-ldap liblua5.1-0
提案パッケージ:
  apache2-doc apache2-suexec-pristine | apache2-suexec-custom
以下のパッケージが新たにインストールされます:
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1
  libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 15 個。
Inst libapr1 (1.5.2-3 Ubuntu:16.04/xenial [amd64])
Inst libaprutil1 (1.5.4-1build1 Ubuntu:16.04/xenial [amd64])
Inst libaprutil1-dbd-sqlite3 (1.5.4-1build1 Ubuntu:16.04/xenial [amd64])
Inst libaprutil1-ldap (1.5.4-1build1 Ubuntu:16.04/xenial [amd64])
Inst liblua5.1-0 (5.1.5-8ubuntu1 Ubuntu:16.04/xenial [amd64])
Inst apache2-bin (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [amd64])
Inst apache2-utils (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [amd64])
Inst apache2-data (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [all])
Inst apache2 (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [amd64])
Conf libapr1 (1.5.2-3 Ubuntu:16.04/xenial [amd64])
Conf libaprutil1 (1.5.4-1build1 Ubuntu:16.04/xenial [amd64])
Conf libaprutil1-dbd-sqlite3 (1.5.4-1build1 Ubuntu:16.04/xenial [amd64])
Conf libaprutil1-ldap (1.5.4-1build1 Ubuntu:16.04/xenial [amd64])
Conf liblua5.1-0 (5.1.5-8ubuntu1 Ubuntu:16.04/xenial [amd64])
Conf apache2-bin (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [amd64])
Conf apache2-utils (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [amd64])
Conf apache2-data (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [all])
Conf apache2 (2.4.18-2ubuntu3 Ubuntu:16.04/xenial [amd64])

5 upgradeされるパッケージ一蘭を表示する

apt list –upgradeableでアップグレードパッケージが表示されます。<package>/<osname>-securityと表示されるものがセキュリティアップデートです。

$ apt list --upgradeable
一覧表示... 完了
brltty/xenial-updates 5.3.1-2ubuntu2.1 amd64 [5.3.1-2ubuntu2 からアップグレード可]
libbrlapi0.6/xenial-updates 5.3.1-2ubuntu2.1 amd64 [5.3.1-2ubuntu2 からアップグレード可]
libmetacity-private3a/xenial-updates 1:3.18.4-0ubuntu0.1 amd64 [1:3.18.3-1ubuntu3 からアップグレード可]
linux-headers-4.4.0-22/xenial-updates,xenial-updates,xenial-security,xenial-security 4.4.0-22.39 all [4.4.0-22.39 からアップグレード可]
linux-headers-generic/xenial-updates,xenial-security 4.4.0.22.23 amd64 [4.4.0.21.22 からアップグレード可]
linux-libc-dev/xenial-updates,xenial-security 4.4.0-22.39 amd64 [4.4.0-21.37 からアップグ レード可]
metacity-common/xenial-updates,xenial-updates 1:3.18.4-0ubuntu0.1 all [1:3.18.3-1ubuntu3  からアップグレード可]
openssh-client/xenial-updates 1:7.2p2-4ubuntu1 amd64 [1:7.2p2-4 からアップグレード可]
openssh-server/xenial-updates 1:7.2p2-4ubuntu1 amd64 [1:7.2p2-4 からアップグレード可]
openssh-sftp-server/xenial-updates 1:7.2p2-4ubuntu1 amd64 [1:7.2p2-4 からアップグレード可]
python3-brlapi/xenial-updates 5.3.1-2ubuntu2.1 amd64 [5.3.1-2ubuntu2 からアップグレード可]
thermald/xenial-updates 1.5-2ubuntu1 amd64 [1.5-2 からアップグレード可]
xbrlapi/xenial-updates 5.3.1-2ubuntu2.1 amd64 [5.3.1-2ubuntu2 からアップグレード可]

apt-get upgrade –just-printでもアップグレードパッケージが表示されますが、どれがセキュリティアップデートかまではわかりません。

6 インストール済みのパッケージ一蘭を表示する

dpkg -lと同様ですが、こちらはxenial、xenial-update、xenial-security等のリポジトリまで表示されます。

$ apt list --installed

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

一覧表示...
a11y-profile-manager-indicator/xenial,now 0.1.10-0ubuntu3 amd64 [インストール済み、自動]
account-plugin-facebook/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [インストール 済み、自動]
account-plugin-flickr/xenial,xenial,now 0.12+16.04.20160126-0ubuntu1 all [インストール済 み、自動]

7 autoremoveされるパッケージの一覧を表示する

autoremoveを–just-printで実行してRemvと表示されるパッケージを見つけます。

$ apt autoremove --just-print | grep "^Remv " | cut -d' ' -f 2

WARNING: apt does not have a stable CLI interface. Use with caution in
scripts.

emacs24
emacs24-bin-common
emacs24-el
emacs24-common
emacs24-common-non-dfsg
libgif7
liblockfile1
liblockfile-bin
libm17n-0
libotf0
m17n-db