apt-cacheとdpkg -lの違い


9

私はapt-cache pkgnameを使用してパッケージを取得します

me@host:~$ apt-cache pkgnames | wc -l
62803

62803の結果を取得

だが

me@host:~$ dpkg -l | wc -l
2336

このような大きな違いをもたらす理由は何ですか。私はdpkgがaptよりも優れていると思います。



@Olorin私はこの質問をオープンのままにすることに投票しました。複製は問題ありませんが、複製の方向を逆にして、dpkg-queryとapt-cacheをこの質問の複製として閉じるようにしてください。
karel

回答:


16

aptdpkgローカルにインストールされたパッケージ- リモートリポジトリの管理用です。それらは関連しています。aptはフロントエンドdpkgです。実行するapt-get install packageと、.debファイルが取得され、を介してインストールされdpkgます。利用可能なパッケージがたくさんあるので数は異なりますが、ごく一部しかシステムにローカルにインストールされません。

apt-cacheインストールされているパッケージとインストールされていないパッケージの両方を表示できます。これは、aptキャッシュを照会するためです-リモートリポジトリで利用可能なもののリスト(そのキャッシュは、実行時に取得するものですapt-get update)。例えば、

$ apt-cache policy terminator
terminator:
  Installed: (none)
  Candidate: 1.91-1


$ dpkg -l terminator
dpkg-query: no packages found matching terminator

インストール/削除されたローカルパッケージのリストをクエリできる別のツールがあることに注意してくださいdpkg-query。例えば、

$ dpkg-query -l 'libc6'
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

$ dpkg -l libc6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version         Architecture    Description
+++-====================-===============-===============-=============================================
ii  libc6:amd64          2.27-3          amd64           GNU C Library: Shared libraries
ii  libc6:i386           2.27-3          i386            GNU C Library: Shared libraries

dpkgマニュアルに従って

dpkgは、dpkg-deb(1)およびdpkg-query(1)のフロントエンドとしても使用できます。サポートされるアクションのリストは、後の「アクション」セクションで確認できます。そのようなアクションが発生した場合、dpkgは与えられたパラメーターでdpkg-debまたはdpkg-queryを実行しますが、特定のオプションは現在それらに渡されていません。そのようなオプションを使用するには、バックエンドを直接呼び出す必要があります。

限りでdpkg-queryは、このツールはインストールされたパッケージのデータベースのクエリに重点を置いており、特定の形式(-fオプションと-Wアクション)で情報を出力できることに注意してください。例えば、

$ dpkg-query -W -f='PACK:${Package}\nARCH:${Architecture}\nSTAT:${Status}\n---\n' libc6
PACK:libc6
ARCH:amd64
STAT:install ok installed
---
PACK:libc6
ARCH:i386
STAT:install ok installed
---

興味深いことに、dpkgデータベースは、削除対象として選択されたパッケージ、またはある時点で削除されたパッケージのリストを保持しています。dpkg-queryグロブパターンを引数として使用することもできます。グロブパターンの有無に応じて、インストール済み/構成済みのパッケージのみ、またはすべてのパッケージが表示されます。


2

dpkg -lは、インストールされているパッケージのバージョン(iiで始まる)、削除されたバージョン(rc)、およびその他のバージョンを表示します(たとえば、インストールされているが構成されていない場合は、マンページを参照)。

apt-cache pkgnamesは、追加されたリポジトリーで使用可能なすべてのパッケージ名(同じパッケージのバージョンではない)を表示します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.