Debian系パッケージ
101 試験では、Debian 系のパッケージ管理は「コマンドとオプションの組み合わせ」として出ます。選択肢には dpkg のオプションと apt のサブコマンドが混ぜて並べられ、低レベルの道具 (dpkg) と高レベルの道具 (apt) の役割の違いを分かっているかが試されます。
その核心は依存関係です。dpkg は手元の .deb を展開して登録するだけで、別のパッケージが必要でも自分で取りに行きません。足りなければエラーで止まります。apt は /etc/apt/sources.list 系に書かれたリポジトリを知っていて、必要な依存を洗い出し、まとめて取ってきて dpkg に渡します。apt は dpkg の上に乗っているという上下関係です。
dpkg の主なオプション
| オプション | 意味 |
|---|---|
dpkg -i <file.deb> | .deb ファイルを導入する。依存は解決しない |
dpkg -r <パッケージ名> | 削除する。設定ファイルは残る |
dpkg -P <パッケージ名> | 完全削除 (purge)。設定ファイルも消す |
dpkg -l | インストール済みパッケージを一覧する |
dpkg -L <パッケージ名> | そのパッケージが提供するファイルの一覧 |
dpkg -S <ファイルパス> | そのファイルがどのパッケージに属するかを逆引き |
dpkg -s <パッケージ名> | パッケージの状態と詳細情報を表示 |
dpkg -l の出力は行頭に状態記号が付きます。ii なら「導入を望んでいて、実際に導入済み」、rc なら「削除済みだが設定ファイルが残っている」です。rc が残るのは -r で消したときで、-P なら残りません。この違いは選択肢問題で頻出します。
apt と apt-get
| コマンド | 意味 |
|---|---|
apt update | リポジトリのパッケージ情報を取り直す。ソフトは更新しない |
apt install <名前> | 依存ごと解決して導入する |
apt remove <名前> | 削除する。設定ファイルは残る |
apt purge <名前> | 設定ファイルごと削除する |
apt upgrade | 導入済みパッケージを更新する。削除は伴わない |
apt full-upgrade / apt-get dist-upgrade | 依存関係の変化に応じて削除も伴う更新 |
apt は人間向けの新しい入口、apt-get はスクリプト向けの古い入口で、見た目が違うだけで実体はほぼ同じです。試験では apt-get 側の名前で出ることも多いため、apt full-upgrade と apt-get dist-upgrade が同じであることを押さえてください。
apt update と apt upgrade の取り違えが最頻出の引っかけです。update はカタログを取り直すだけで、実際のソフトは1バイトも新しくなりません。
apt-cache は照会専用
システムを一切変更しません。
| コマンド | 意味 |
|---|---|
apt-cache search <語> | パッケージ名と説明文から検索 |
apt-cache policy <名前> | 導入済みバージョンと候補バージョンを表示 |
apt-cache depends <名前> | そのパッケージが依存しているものを表示 |
apt-cache rdepends <名前> | そのパッケージに依存しているものを逆に表示 |
apt-cache policy の出力は Installed と Candidate の2行が要点です。Installed が (none) なら未導入、Candidate はリポジトリから入れられるバージョンです。
なおこの演習環境はネットワークが切れているため、apt install のような取得を伴う操作は必ず失敗します。照会系だけを打ってください。試験で問われるのもそちら側です。
よくある引っかけ
依存解決をするのは apt であって dpkg ではありません。dpkg -i で依存が足りなかった場合に apt-get -f install で後追い修復する、という流れも出題されます。
dpkg -L と dpkg -S は向きが逆です。-L はパッケージからファイルへ、-S はファイルからパッケージへ向かいます。
dpkg -S にはパスの罠もあります。最近の Debian は /bin が /usr/bin へのリンクですが、dpkg のデータベースは /bin/cp という古い形で記録しているため、dpkg -S /usr/bin/cp は見つからないと言われ、dpkg -S /bin/cp なら coreutils が返ります。