私はapt-cache pkgnameを使用してパッケージを取得します
me@host:~$ apt-cache pkgnames | wc -l
62803
62803の結果を取得
だが
me@host:~$ dpkg -l | wc -l
2336
このような大きな違いをもたらす理由は何ですか。私はdpkgがaptよりも優れていると思います。
私はapt-cache pkgnameを使用してパッケージを取得します
me@host:~$ apt-cache pkgnames | wc -l
62803
62803の結果を取得
だが
me@host:~$ dpkg -l | wc -l
2336
このような大きな違いをもたらす理由は何ですか。私はdpkgがaptよりも優れていると思います。
回答:
apt
dpkg
ローカルにインストールされたパッケージ- リモートリポジトリの管理用です。それらは関連しています。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
グロブパターンを引数として使用することもできます。グロブパターンの有無に応じて、インストール済み/構成済みのパッケージのみ、またはすべてのパッケージが表示されます。