【Linux】apt-getコマンドでパッケージを管理する

目次

概要

Debian系ディストリビューション(Ubuntu, Debianなど)において、パッケージのインストール、更新、削除を行うためのコマンドです。

現在、対話的な利用では apt コマンドが推奨されていますが、apt-get は出力形式が安定的であり、シェルスクリプトや自動化ツール(Ansible等)の内部で呼び出す際には依然として標準的に利用されています。

仕様(引数・オプション)

構文

apt-get [オプション] [コマンド] [パッケージ名]

主なコマンド

コマンド説明
updateパッケージリスト(インデックス)を最新の状態に更新します。
upgradeインストール済みの全パッケージを更新します(パッケージの削除は行いません)。
dist-upgradeupgrade に加え、依存関係の変更に伴うパッケージの削除や新規追加も行います。
install指定したパッケージをインストール、または更新します。
remove指定したパッケージを削除します(設定ファイルは残します)。
purge指定したパッケージと設定ファイルを完全に削除します。
sourceパッケージのソースコードを取得します。
build-depパッケージをビルドするために必要な依存パッケージをインストールします。
download.deb パッケージファイルをカレントディレクトリにダウンロードします。
check依存関係が壊れていないかチェックします。
clean取得したパッケージアーカイブファイル(キャッシュ)を削除します。
autoremove依存関係でインストールされ、不要になったパッケージを自動削除します。
changelogパッケージの変更履歴をダウンロードして表示します。

主なオプション

オプション説明
–no-install-recommends「推奨(Recommends)」パッケージをインストールせず、必須のみを導入します。
-d / –download-onlyインストールや展開は行わず、パッケージファイルのダウンロードのみを行います。
-f / –fix-broken壊れた依存関係の修復を試みます。
-q / –quietログ出力を抑制します(進捗バーを表示しないなど)。
–reinstall指定したパッケージを再インストールします。
-s / –simulate実際には実行せず、何が行われるかのシミュレーション結果を表示します。
-t [リリース]特定のリリース(stable, testingなど)を指定して操作します。
-y / –yes全ての確認プロンプトに自動的に「Yes」で応答します。
–assume-no全ての確認プロンプトに自動的に「No」で応答します。
-u / –show-upgradedアップグレードされるパッケージの一覧を表示します。
-b / –compilesource コマンドと併用し、ソース取得後にビルドを行います。

基本の使い方

リポジトリ情報を更新し、ジョークソフト sl(Steam Locomotive)をインストールする基本的な流れです。

# 1. パッケージリストの更新(必須)
sudo apt-get update

# 2. パッケージのインストール
sudo apt-get install sl

実行結果例

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  sl
0 upgraded, 1 newly installed, 0 to remove and 15 not upgraded.
Need to get 12.5 kB of archives.
After this operation, 48.1 kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com/ubuntu focal/universe amd64 sl amd64 5.02-1 [12.5 kB]
Fetched 12.5 kB in 0s (105 kB/s)
Selecting previously unselected package sl.
(Reading database ... 20543 files and directories currently installed.)
Preparing to unpack .../archives/sl_5.02-1_amd64.deb ...
Unpacking sl (5.02-1) ...
Setting up sl (5.02-1) ...

実践コマンド

システム全体のパッケージを更新する

インストールされている全てのパッケージを新しいバージョンにアップグレードします。

# リスト更新後に実行
sudo apt-get upgrade

パッケージをインストールせずダウンロードだけ行う

インターネットに繋がらない別のマシンへファイルを移送したい場合などに、キャッシュディレクトリ(/var/cache/apt/archives/)へ .deb ファイルを保存します。

# rubyパッケージをダウンロードのみ実行
sudo apt-get install ruby -d

# 保存されたファイルを確認
ls /var/cache/apt/archives/ruby*

不要なパッケージを掃除する

パッケージのインストール時に自動的に入った依存ライブラリで、親パッケージを削除して不要になったものを一括削除します。ディスク容量の節約に有効です。

# 不要な依存パッケージの削除
sudo apt-get autoremove

カスタムポイント

  • 余計なものを入れない (–no-install-recommends)デフォルトでは「推奨」パッケージも一緒にインストールされますが、サーバー構築などで最小限の構成にしたい場合はこのオプションを使用します。Bashsudo apt-get install --no-install-recommends nginx
  • 依存関係の修復 (-f)dpkg での手動インストール失敗などでパッケージ状態が整合性を欠いている場合、このオプション単体で実行すると修復を試みてくれます。Bashsudo apt-get install -f

注意点

  1. aptコマンドとの違いapt は人間が見やすいプログレスバーや色分け表示を行いますが、スクリプト内での動作としては出力が変わる可能性があるため非推奨とされています。自動化スクリプト内では apt-get を使用してください。
  2. dist-upgradeのリスクapt-get upgrade は既存のパッケージを削除しませんが、apt-get dist-upgrade は依存関係解決のために重要なパッケージでも削除することがあります。実行内容は必ず確認してください。
  3. sudo権限source や download 以外、システムへの変更を伴う操作(install, update, remove等)には sudo が必要です。

応用

ソースコードを取得してビルドの依存関係を解決する

Debian系では、バイナリだけでなくソースコードもパッケージ管理されています。自分でコンパイルしたい場合に便利です。

# 1. ソースコードリポジトリを有効にする(/etc/apt/sources.list の deb-src 行が必要)
sudo apt-get update

# 2. nginxのビルドに必要なライブラリを一括インストール
sudo apt-get build-dep nginx

# 3. nginxのソースコードをカレントディレクトリにダウンロード
apt-get source nginx

まとめ

apt-get は、Linuxのパッケージ管理における堅牢なバックエンドツールです。

普段の対話操作には apt を使いつつ、Dockerfileやセットアップスクリプトを書く際は、挙動が安定している apt-get を選択するのがプロフェッショナルな使い分けです。特に -y や –no-install-recommends は自動化の鍵となるオプションですので覚えておきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次