【Linux】dpkgコマンドでdebパッケージを直接管理・操作する

目次

概要

Debian系ディストリビューション(Ubuntu, Debian, Kali Linuxなど)において、パッケージファイル(.deb)を直接インストール、削除、情報照会するための低レベルな管理コマンドです。

apt や apt-get と異なり、インターネットリポジトリからのダウンロード機能や依存関係の自動解決機能は持ちませんが、ローカルにあるパッケージファイルの手動インストールや、システム内の詳細なパッケージ情報の調査に不可欠なツールです。

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

構文

dpkg [アクション] [オプション] [パッケージ名またはファイル名]

主なアクション

アクション説明
-i / –installパッケージ(.debファイル)をインストールします。
-r / –removeパッケージを削除します(設定ファイルは残します)。
-P / –purgeパッケージを完全に削除します(設定ファイルも含めて削除)。
-l / –listインストールされているパッケージの一覧を表示します(パターン指定可)。
-s / –status指定したパッケージの詳細な状態を表示します。
-L / –listfiles指定したパッケージがインストールしたファイルの一覧を表示します。
-S / –search指定したファイルがどのパッケージに属しているかを検索します。
-c / –contentsパッケージファイル(.deb)の中身(ファイルリスト)を表示します。
-I / –infoパッケージファイル(.deb)の詳細情報を表示します。
-x / –extractパッケージファイル(.deb)を指定ディレクトリに展開します。
–fsys-tarfileパッケージファイル(.deb)のデータ部分をtar形式で標準出力に出力します。

基本の使い方

手元にある .deb ファイル(ここでは custom-tool_2.1.0_amd64.deb)をシステムにインストールします。

# ローカルのパッケージファイルをインストール
sudo dpkg -i custom-tool_2.1.0_amd64.deb

実行結果例

Selecting previously unselected package custom-tool.
(Reading database ... 120500 files and directories currently installed.)
Preparing to unpack custom-tool_2.1.0_amd64.deb ...
Unpacking custom-tool (2.1.0) ...
Setting up custom-tool (2.1.0) ...
Processing triggers for man-db (2.9.4-2) ...

実践コマンド

パッケージを削除する(設定を残す・完全に消す)

不要になったツールを削除します。後で再インストールする可能性がある場合は -r、設定ファイルごと消し去りたい場合は -P を使います。

※注意: ここでは「ファイル名」ではなく「パッケージ名」を指定します。

# 設定ファイルを残して削除
sudo dpkg -r sample-editor

# 設定ファイル(/etc/sample-editor.confなど)も含めて完全削除
sudo dpkg -P sample-editor

インストールせずにパッケージの中身を確認する

配布された .deb ファイルが、システム上のどこにどんなファイルを配置する予定なのかを事前確認します。

# ファイルリストを表示
dpkg -c custom-tool_2.1.0_amd64.deb

実行結果例

drwxr-xr-x root/root         0 2025-01-23 10:00 ./
drwxr-xr-x root/root         0 2025-01-23 10:00 ./usr/bin/
-rwxr-xr-x root/root      1024 2025-01-23 10:00 ./usr/bin/custom-tool
drwxr-xr-x root/root         0 2025-01-23 10:00 ./usr/share/doc/

パッケージの中身を指定ディレクトリに展開する

インストールは行わず、特定のディレクトリに中身だけを展開して解析したい場合に使用します。

# カレントディレクトリ配下の 'extracted' フォルダに展開
mkdir extracted
dpkg -x custom-tool_2.1.0_amd64.deb ./extracted

debパッケージをtar形式に変換して特定ファイルを抽出する

ar コマンドなどがなくても、dpkg 自身で .deb のデータ部を tar ストリームとして出力できます。これを tar コマンドにつなぐことで、特定ファイルだけを取り出せます。

# debファイルをtar形式に変換して保存
dpkg --fsys-tarfile monitor-app_1.5.0_amd64.deb > monitor-app.tar

# tarの中から 'bin' を含むファイルを確認
tar tvf monitor-app.tar | grep bin

インストール済みパッケージの状態を一覧表示する

システムに入っているパッケージを検索します。

# 'python3' から始まるパッケージの状態を表示
dpkg -l "python3*"

カスタムポイント

  • 表示幅の調整 (COLUMNS)dpkg -l の出力は画面幅に合わせて切り詰められることがあります。スクリプト処理やログ保存のために完全な名前を表示したい場合、環境変数 COLUMNS を指定します。BashCOLUMNS=200 dpkg -l "openssl*"
  • 設定ファイルの情報を確認 (-f)パッケージファイルのメタデータ(Controlファイル)から、特定のフィールドだけを抽出します。Bash# パッケージの依存関係(Depends)だけを表示 dpkg -f custom-tool_2.1.0_amd64.deb Depends

注意点

  1. 依存関係を解決しないdpkg -i でインストールしようとした際、必要なライブラリが不足していても自動でダウンロードしてくれません。「依存関係エラー」でインストールが失敗した場合は、直後に sudo apt install -f(依存関係の修復)を実行する必要があります。
  2. ファイル名とパッケージ名の違い
    • インストール時 (-i)、中身確認時 (-c)、展開時 (-x):ファイル名 (xxx.deb) を指定します。
    • 削除時 (-r, -P)、状態確認時 (-l, -s):パッケージ名 (xxx) を指定します。
  3. Root権限インストールや削除などのシステム変更操作には sudo が必要です。

応用

特定のファイルがどのパッケージのものか調べる (-S)

/bin/ls ってどのパッケージに入っているの?」といった疑問を解決します。トラブルシューティングで重要です。

# 指定したパスを含むパッケージを検索
dpkg -S /bin/ls

実行結果例

coreutils: /bin/ls

まとめ

dpkg は、Debian系システムのパッケージ管理における最もプリミティブ(根本的)なコマンドです。

普段のアップデートには apt を使いますが、「ネットに繋がらない環境への持ち込みインストール」や「設定ファイルを含めた完全削除」、「特定のファイルがどのパッケージ由来かの調査」においては、このコマンドが唯一の解決策となります。

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

この記事を書いた人

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

目次