- Linux では、依存関係は他のプログラムが機能するために必要なパッケージまたはライブラリであり、ディストリビューションに応じて apt-cache、apt-rdepends、rpm、yum、pactree、zypper、ldd などのツールを使用して一覧表示できます。
- Debian/Ubuntu システムでは、apt-cache depend、apt-rdepends、dpkg-deb、apt-get build-dep が主にリポジトリと .deb ファイル内のパッケージ依存関係を検査するために使用されます。
- RPM と Arch Linux の世界では、rpm -qR、yum deplist、yum provides、pactree などのコマンドを使用すると、直接の依存関係と完全な依存関係ツリーおよび逆の依存関係の両方を確認できます。
- 壊れたパッケージや満たされていない依存関係が表示された場合は、dpkg --configure -a、apt-get -f install、キャッシュのクリア、Synaptic、または最後の手段として /var/lib/dpkg/status ファイルを編集することで修復できます。

しばらく GNU/Linux を使用していると、プログラムをインストールするときにパッケージ マネージャーが大量の「余分な」ものをダウンロードし始めるのはなぜかと疑問に思ったことがあるかもしれません。 ライブラリと追加パッケージは、よく知られている依存関係です。これらを理解することで、安心してシステムを管理できるか、何も壊さないことを祈りながら何も知らないままシステムに入るかの違いが生まれます。
さらに、誰かがアプリケーションをインストールし、まるで魔法のように、 説明なしにさらに3つまたは4つのパッケージこれは不信感を生みます。本当に必要なのでしょうか?システムが自力で対処すべきではないでしょうか?この記事では、まさにこの問題に取り組みます。 Linuxでパッケージの依存関係を一覧表示する方法 (DEB、RPM、Pacman、Zypper…) また、どのパッケージが他のパッケージに依存しているかを確認する方法、バイナリを検査する方法、依存関係が壊れた場合にどうするかについても説明します。
依存関係とは何ですか? Linux ではなぜそれほど重要なのですか?

簡単に言えば、依存関係とは 他のものが正しく機能するために必要なパッケージ(プログラムまたはライブラリ)たとえば、LibreOffice をインストールする場合、単一のパッケージをダウンロードするだけではありません。メインの「メタパッケージ」には、多数のグラフィック ライブラリ、フォント、システム統合ツールなどが含まれています。
パッケージが他のパッケージを必要とすることを示すと、パッケージ マネージャーが自動的にそれを処理します。 依存関係と事前依存関係の連鎖を解決するつまり、ツリーが閉じられるまで、依存関係の依存関係など、必要なものすべてをダウンロードしてインストールします。
問題は、これらの条件のいずれかが満たされていない場合に発生します。必要なライブラリがリポジトリに存在しない場合、パッケージ化が不十分な外部ソースから何かをインストールした場合、または インストールまたはアップデートが途中で中断されるそのとき、「満たされていない依存関係」や「壊れたパッケージ」という恐ろしいメッセージが表示されます。
パッケージが破損しているとみなされるのは、 インストールステータスが不完全または矛盾している システムの他の部分と依存関係が構築されていない(例えば、解凍されているが構成されていない、または依存関係が満たされていない)状態です。この状態になると、依存関係システム全体が不安定になるため、他のパッケージのインストール、更新、または削除時にエラーが発生する可能性があります。
だからこそ、知っておくことが重要なのです 何が何に依存しているかを検査する方法、そして何か問題が発生した場合にどのように修復するかまず、Debian/Ubuntu (DEB) ベースのシステムで最も一般的なケースを見て、次に RPM の世界 (Fedora、CentOS、RHEL、openSUSE)、最後に Arch Linux などの他のファミリで最も一般的なケースを見ていきます。
DEB システム (Debian、Ubuntu および派生) への依存関係を一覧表示する
Debian と Ubuntu のエコシステムでは、ツール スタックが非常に統一されているため、依存関係を数えるのは非常に簡単です。 apt、apt-cache、dpkgおよび補完ユーティリティ apt-rdepends なので、日常的に必要となるケースはほぼすべてカバーされます。
apt-cacheを使用してリポジトリで利用可能なパッケージの依存関係を一覧表示する
パッケージが設定されたリポジトリ内にある場合は、次のコマンドで必要なものを確認できます。
apt-cacheはパッケージ名に依存します
たとえば、vim が何に依存しているかを確認するには、次のようにします。
apt-cacheはvimに依存します
出力には「Depends:」「PreDepends:」「Suggests:」などの行が表示され、一目で判別できます。 必須および推奨の依存関係これは、特定のプログラムをインストールするときに何が引き継がれるかを簡単に理解できる方法です。
より詳細な情報が必要な場合は、apt-cacheの他のサブコマンドと組み合わせることができます。 ショーパッケージ逆依存関係とバージョンも表示されます。
apt-cache showpkg vsftpd
このコマンドでは、vsftpdが依存するパッケージに加えて、他のパッケージも表示されます。 vsftpdに依存しているこれは、運用サーバーでサービスをアンインストールする前に非常に役立つ情報です。
apt-rdepends で完全な依存関係ツリーを表示する
フラットなリストだけでなく、 依存関係の再帰的な連鎖 (依存関係の依存関係などの詳細)、スター ユーティリティは apt-rdepends です。
apt-rdepends パッケージ名
このツールは通常デフォルトではインストールされないので、最初に次のコマンドで追加する必要があります。
sudo apt-get で apt-rdepends をインストールします
apt-rdependsをインストールすると、非常に強力なブラウジングが可能になります。便利なオプションには以下のようなものがあります。
- -b (-ビルド): パッケージをコンパイルするために必要な直接的な依存関係を表示します。
- -p (-print-state): 出力にパッケージのステータスとバージョンが含まれます。
- -f (-follow=依存): 依存関係と事前依存関係に従い、より網羅的なツリーを生成します。
構文がわからなくなった場合は、いつでも次の方法でツールのマニュアルを確認できます。
man apt-rdepends
apt-get build-dep でビルド依存関係を自動的にインストールする
開発環境では、次のようなことが必要になることがよくあります。 ソースコードからパッケージをコンパイルするために必要なすべての依存関係そのために以下のコマンドを実行します。
sudo apt-get build-dep パッケージ名
このサブコマンドはリポジトリを検索してソースパッケージに関する情報を取得し、 ビルド プロセスが依存するすべてのパッケージをインストールします。ただし、プログラム自体はインストールされず、ビルドの依存関係のみがインストールされることに注意してください。
たとえば、次を実行する場合:
sudo apt-get build-dep gmc
システムは「以下の新しいパッケージがインストールされます…」といった概要を表示し、追加される開発ライブラリ(-dev、ビルドツールなど)をすべてリストします。その後、以下のコマンドでコードをインポートできます。
apt-get ソース パッケージ名
いつものツールでコンパイルできます。依存関係を手動で探す必要がなく、環境を準備する非常にクリーンな方法です。
ルーズ DEB パッケージ (ダウンロードした .deb ファイル) の依存関係を一覧表示する
あなたが持っているものが 手動でダウンロードした.debファイル (たとえば、サードパーティの Web サイトから) インストールする前に依存関係を検査したい場合は、低レベル ツール dpkg-deb を使用できます。
dpkg-deb -I mypackage.deb
このコマンドは「Depends:」フィールドを含むパッケージヘッダーを表示し、 システムに他にどのようなパッケージをインストールする必要がありますか? .debファイルが正しく動作するためには、 AppImageなどの代替パッケージシステムが管理する依存関係とパッケージ自体が提供する依存関係を比較するのに役立つためです。
特に次のような環境で役立ちます。 外部パッケージをチェックせずに混在させることで、パッケージ マネージャーを壊すことは避けたいものです。 何が含まれているか、または配布バージョンと互換性があるかどうかを確認します。
DEB のその他の便利なコマンド: apt、dpkg、dpkg-query、which、whereis、locate
依存関係を一覧表示するだけでなく、いくつかのクエリコマンドを習得すると、 パッケージがインストールされているかどうか、またどこに配置されているかこれは、システム上で依存関係が実際に満たされているかどうかを確認するのに役立ちます。
- apt -qq パッケージ名をリストする: パッケージがインストールされているかどうか、バージョンとアーキテクチャとともに表示します。
- apt-cache ポリシー パッケージ名: インストールされているバージョン、バージョン候補、ソース リポジトリを表示します。
- dpkg -l | grep -i パッケージ名 o dpkg-query –list | grep -i パッケージ名: dpkg データベースからパッケージ、そのステータス、および説明を一覧表示します。
- どのバイナリ: 実行ファイルがユーザーの PATH 内にある場合、そのパスを返します (例: /bin/nano)。
- バイナリはどこにあるか: 実行ファイルだけでなく、 関連文書およびファイル (man ページ、情報など)。
- パターンを見つける: 場所データベース内のファイルを非常に高速に検索しますが、Locale をインストールして更新する必要があります。
これらのツールをapt-cacheとapt-rdependsと組み合わせることで、かなり包括的なマップを構築することができます。 何がインストールされているか、誰がそれを使用しているか、何が欠けているか すべてがうまく収まるように。
RPM の世界 (Fedora、RHEL、CentOS、openSUSE) での依存関係と逆依存関係を一覧表示します。
RPMベースのディストリビューションは、いくつかの強力なツールを提供しています。その基盤は rpmはパッケージデータベースと直接連携し、その上で次のような高レベルのマネージャに依存します。 yum (クラシックシステムの場合) または dnf (Fedora の最新バージョンおよび派生版の場合)。
インストール済みまたはリポジトリRPMパッケージの依存関係を確認する
インストールされたパッケージの依存関係を rpm に問い合わせる場合の一般的なコマンドは次のようになります。
rpm -qR パッケージ名
選択 -qR (-requires) rpmにリストするように指示する このパッケージが依存するすべてのパッケージと機能これは、低レベルでは、DEB の世界で apt-cache が行うことと同等です。
もしあなたが持っているものが .rpm ファイル (インストールされていない) で、システムに組み込む前にその依存関係を調べたい場合は、コマンドが少し変わります。
rpm -qpR .rpm ファイル
ここに -p 彼は RPM に作業するように指示します。 ディスク上のパッケージファイルについて インストールされたパッケージに基づいてではなく。
-Rに加えて、rpmはより多くのコンテキストを取得するための非常に便利な組み合わせを受け入れます。たとえば、 -ql パッケージに含まれるファイルを一覧表示します。 -気 詳細情報(概要、バージョン、グループなど)を提供し、 -V データベースに関する整合性(所有者、権限、ハッシュなど)を検証します。
Yum/DNF を使用して依存関係の一覧表示、依存関係の逆順表示などを実行する
rpm レイヤーでは、yum や dnf などのマネージャーによって、依存関係のクエリと解決、リポジトリ、更新、およびソフトウェアのライフサイクル全体の管理が大幅に簡素化されます。
yum の場合、依存関係に直接関連する非常に便利なサブコマンドがいくつかあります。
- yum deplit パッケージ名: 特定のパッケージの依存関係、それがインストールされているか、リポジトリで使用可能かどうかを表示します。
- yum 解決された ep 依存関係: 指定された依存関係 (ライブラリ名、仮想容量など) を満たすパッケージを返します。
- yumはpath_or_fileを提供します:あなたに伝えます 特定のファイルはどのパッケージに属していますか?どのバイナリまたはライブラリが不足しているかはわかっているが、どのパッケージに含まれているかがわからない場合に非常に便利です。
とも yum info パッケージ名 パッケージに関する詳細な情報(概要やソースリポジトリを含む)が表示され、 yum list パッケージ名 インストールされているバージョンと更新可能なバージョンを比較します。
より高度なシナリオでは、yumはインストール、更新、削除、パッケージグループの一覧表示、アクティブなリポジトリの表示、トランザクション履歴の管理などのアクションのクイックガイドも統合しており、 依存関係を調べるだけでなく、何がいつどこからインストールされたかを理解するため.
RPM コマンドと Yum コマンドの類似点
rpm と yum を切り替える場合は、迷わないようにいくつかの基本的な同等性を覚えておくと役立ちます。
- パッケージをインストールする: rpm -ivh o rpm -Uvh ≈ yum install (後者は依存関係を解決してインストールします)。
- パッケージを削除: rpm -e ≈ yum 削除.
- パッケージ情報を確認する: rpm -qi ≈ ヤム情報.
- 名前でパッケージを検索する: yum検索文字列 ≈ rpm -qa | grep チェーン (後者はインストールされているかどうかを示します)。
この話の教訓は、依存関係に関する問い合わせについては、 rpm は「生の」詳細を提供し、yum は問題解決作業を容易にします。リモート リポジトリからのパッケージのダウンロードおよび一括操作。
Arch Linux および派生 Linux (Pacman / Pactree) の依存関係を一覧表示する
Arch Linux および Pacman ベースのディストリビューション (Manjaro、EndeavourOS など) には、関係を視覚化するための非常に強力で便利なツールがあります。 パクツリー他のシステムのフラットな出力とは異なり、Pactreeは 階層的な依存関係ツリー一目で読みやすくなります。
たとえば、vim の依存関係ツリーを検査するには、次のコマンドを実行します。
パックツリーvim
出力は、tree コマンドに似たスタイルで表示され、各依存関係とそのサブ依存関係が分岐します。
活力
├─vim ランタイム
├─gpm
│ └─バッシュ
│ ├─readline
│ │ ├─glibc
│ │ ├─linux-api-headers
│ │ ├─tzdata
│ │ └─ファイルシステム
└─acl
└─属性
└─glibc
ご覧のとおり、視覚的に非常に簡単に理解できます。 各レベルからどのパッケージがぶら下がっているか視点を逆にして、どのパッケージが特定のパッケージに依存しているかを確認したい場合は、他の pacman ツールを使用することもできますが、「下向き」のビューの場合、pactree に勝るものはありません。
最大限に活用したい場合は、次のマニュアル ページを参照してください。
マン・パクツリー
SUSE および openSUSE の依存関係を一覧表示する (Zypper)
openSUSEやSLEのようなディストリビューションでは、リファレンスパッケージマネージャは zypperソフトウェアのインストール、更新、削除に加えて、依存関係を非常に便利にチェックできます。
vim などの特定のパッケージに必要なものを確認するには、次のコマンドを使用します。
zypper info –vim が必要です
このコマンドは、通常のパッケージ情報(名前、バージョン、リポジトリなど)と、要件セクションのリストを表示します。 システムに存在しなければならないすべての依存関係これは、apt-cache の「Depends」または rpm -qR の「Requires」に相当します。
他のzypperオプション(パターン検索、リポジトリ一覧など)と組み合わせることで、 どのパッケージがどのライブラリを搭載しているかをかなり細かく制御できる SUSE 環境内。
どのパッケージが他のパッケージに依存しているかを確認する方法(逆依存関係)
パッケージが何に依存しているかを知ることと同じくらい重要なのは、 他のどのパッケージがそれに依存しているかこの逆依存関係のチェックは、実際にはシステムの半分で使用できる、一見「無害」に見えるものをアンインストールする前に行うことが重要です。
Debian/Ubuntu システムでは、以下を使用できます。
- apt-cache rdepends パッケージ名: 指定されたパッケージに依存するパッケージのリストを表示します。
- apt-cache showpkg パッケージ名パッケージとその依存関係に関する情報に加えて、それを必要とするパッケージを含む「Reverse Depends」セクションが含まれています。
RPM の世界では、yum はそれを表示する方法も提供しています。
- yum deplit パッケージ名: 出力により、各依存関係に誰が貢献しているかを間接的に確認できます。
- yumはfile_or_capacityを提供しますこれは、どのパッケージが特定のライブラリまたはファイルを提供しているかを示しており、推測することができます。 削除すると何が影響しますか?.
これらのクエリを組み合わせることで、「このライブラリを削除すると、どのアプリケーションが動作しなくなりますか?」などの質問に簡単に答えることができます。そして、それはサーバーや重要なデスクトップ環境では、まさに貴重な情報です。
ldd でバイナリファイルの依存関係を検査する
パッケージマネージャ以外にも、次のようなことを知りたいと思うことがあるかもしれません。 特定のバイナリがどの動的ライブラリを使用するかたとえば、読み込みエラーや libc バージョンの問題をデバッグする場合などです。
Unix系システムにおけるこのための標準ツールは ldd基本的な使い方は非常に簡単です。
ldd /path/to/binary_file
出力には、バイナリに必要な共有ライブラリと、その解決元のパス、ロード方向が表示されます。「見つかりません」と表示された場合は、 依存関係がシステムにないか、有効な検索パスにありません.
より詳細な情報を表示し、ライブラリ自体の内部依存関係を追跡したい場合は、以下を使用できます。
ldd -v /path/to/binary_file
-v オプションは追加情報を追加し、バージョン、エクスポートされたシンボル、および実稼働環境でサービスが起動するか、または静かにクラッシュするかの違いを生む可能性のあるその他の詳細を確認するのに役立ちます。
Debian/Ubuntu システムで壊れたパッケージと満たされていない依存関係を修復する
どんなに注意していても、遅かれ早かれ、次のようなシステムに遭遇するでしょう。 壊れたパッケージ、満たされていない依存関係、またはロックファイルパニックに陥る前に、概念を理解し、適切な回復手順に従うことが重要です。
壊れたパッケージは、通常、インストールやアップグレードが中断されたとき、不適切に構築された外部パッケージがインストールされたとき、または 互換性のないリポジトリが混在している典型的な症状: 競合が解決されるまで apt が続行を拒否するため、何もインストールまたは更新できません。
最初の試み: dpkgとaptによる再構成と修復
最初の論理的なステップは、dpkg に未完了の部分の設定を完了するように要求することです。
sudo dpkg –configure –a
このコマンドは、展開済みだが未設定のすべてのパッケージの設定を強制的に実行します。インストール後に実行待ちのスクリプトがある場合は、それらも実行されます。多くの場合、これだけで十分です。 「矛盾した状態は解決される」.
それでも動作しない場合は、破損した残骸を避けるためにローカルの.debキャッシュをクリアすることをお勧めします。 ディスク領域を解放する:
sudo apt-get clean && sudo apt-get autoclean
次に、リポジトリ情報を再生成し、apt が fix オプションを使用して依存関係を再構築するようにします。
sudo apt-get update –fix-missing
sudo apt-get install -f
の組み合わせ –修正-欠落 y -f (-fix-broken) これにより、apt は矛盾したパッケージや満たされていない依存関係を解決しようとし、必要なものをインストールまたは修正します。これは、より積極的な対策に頼る前に、最も効果的な手段の一つです。
「ロックできませんでした」のようなロックメッセージがまだ表示される場合は、 廃止されたロックファイルその場合、実際に apt または dpkg が実行されていないことが確実な場合にのみ、それらを削除できます。
sudo rm /var/lib/apt/lists/lock && sudo rm /var/cache/apt/archives/lock && sudo rm /var/lib/dpkg/lock
この後、前のコマンド シーケンス (configure、clean、update、install -f) を繰り返して、システムが正常な状態に戻るかどうかを確認します。
dpkgを使用して壊れたパッケージを手動で削除する
問題が解決しない場合は、次のステップとして、問題の原因を正確に特定する必要があります。 どのパッケージが壊れた状態か。これには以下を使用できます:
sudo dpkg -l | grep ^..r
ステータスに「r」と表示されているパッケージは 不完全または壊れたインストール名前を特定したら、強制的に削除してみることができます。
sudo dpkg –remove –force-remove-reinstreq パッケージ名
このコマンドは、競合しているパッケージの状態が不一致であっても、dpkg にそのパッケージを強制的に削除させます。その後、キャッシュをクリアして再度更新します。
sudo apt-get clean && sudo apt-get autoclean
sudo apt-get update && sudo apt-get dist-upgrade
システムが問題なくアップデートされた場合、 パッケージデータベースを安定した状態に戻しました 通常通り仕事を続けることができます。
Synapticを使用して壊れたパッケージをグラフィカルに修復する
より視覚的なアプローチを好む場合や、ターミナルに慣れていない人を助ける場合は、パッケージマネージャー シナプス それは依然として非常に強力なツールです。
まず、インストールします (まだインストールしていない場合)。
sudo apt-get synapticをインストールする
次に、それを開いて次の操作を行います。
- アクティブ化 Filtros フィルターを選択して ロトス.
- 破損していると思われるパッケージを見つけます。
- 右クリックして選択 「完全にアンインストールするにはチェックを入れてください」.
- 変更を適用してSynapticが 問題のあるパッケージを削除し、依存関係を再構築します.
さらに、メニューには 編集 → 壊れたパッケージを修復Synaptic には、不整合を一括で解決しようとする自動オプションが含まれており、これにより手動の手順をいくつか省略できます。
最後の手段: dpkg ステータスファイルを編集する
他の方法がすべて失敗した場合、高度で繊細な選択肢が 1 つ残ります。 /var/lib/dpkg/statusファイルを直接編集するここに、dpkg はインストールされた各パッケージの状態を保存します。
アイデアとしては、スーパーユーザー モードでテキスト エディターで開くことです。
sudo nano /var/lib/dpkg/status
中に入ったら、壊れたパッケージを説明するブロックを探します(「パッケージ:パッケージ名」で始まり、「ステータス:」、「バージョン:」などのいくつかのフィールドが含まれます)。 ブロック全体を削除するこれは、dpkg データベースからその存在を削除するようなものです。
変更を保存し、エディターを閉じて、次を実行します。
sudo apt-get clean && sudo apt-get update && sudo apt-get dist-upgrade
他に不整合がなければ、システムは正常に機能する状態になっているはずです。この手法は慎重に使用し、可能であれば、変更を元に戻す必要がある場合に備えてステータスファイルのバックアップを作成してください。
apt-cache、apt-rdepends、rpm、yum、pactree、zypper、ldd、dpkg、apt修復ツールなどのコマンド群を使えば、かなり包括的な概要を把握できるでしょう。 Linux でパッケージの依存関係をリストする方法、何が何に依存しているかを知る方法、何かが壊れたときにどう対処するか。これらのツールを習得すると、ソフトウェアをインストールするときに安心できるだけでなく、エラーごとにシステムが何を伝えているのかを読み取り、盲目的に判断せずに情報に基づいた決定を下すことができるようになります。
バイトの世界とテクノロジー全般についての情熱的なライター。私は執筆を通じて自分の知識を共有するのが大好きです。このブログでは、ガジェット、ソフトウェア、ハードウェア、技術トレンドなどについて最も興味深いことをすべて紹介します。私の目標は、シンプルで楽しい方法でデジタル世界をナビゲートできるよう支援することです。