インストールせずにDebianパッケージのファイルをリストする方法


284

このコマンドは、インストールされたパッケージの内容のみをリストできます。

dpkg -L PACKAGENAME

しかし、パッケージをプレビュー/検査するために、インストールされていないパッケージの内容をリストするにはどうすればよいですか?


回答:


340

dpkg -c(または--contents).debパッケージファイルの内容をリストします(これはのフロントエンドdpkg-debです)。

dpkg -c package_file.deb

パッケージファイルではなくパッケージ名を直接操作するには、を使用できますapt-file。(apt-file最初にパッケージをインストールする必要がある場合があります。)

sudo apt-file update        
apt-file list package_name

最初のコメントで述べたように、apt-fileはすでに設定されたAptリポジトリ内のパッケージの内容をリストします。特定のパッケージがインストールされているかどうかは関係ありません。


17
apt-fileも更新する必要があり(sudo apt-file update)、設定済みのAptリポジトリ内のパッケージのコンテンツのみを一覧表示します。
いんちきキホーテ

1
@quackquixote:Ubuntu 12.04では自動です
-confiq

1
dpkg -cいいね!
d -_- b

2
Apt-fileの回答では、パッケージが.deb個別にダウンロードしたファイルではなく、構成済みのリポジトリからのものであると想定しています。しかし、元の質問はあいまいです。
ゾレダチェ

5
@confiq、私のテストではありません。12.04.4を実行していますが、「E:キャッシュが空です。最初に「apt-file update」を実行する必要があります」と表示されます。
マシューフラシェン14年

58

--contents代わりに使用-L

dpkg --contents PACKAGENAME

この方法で使用dpkgすると、のフロントエンドとして機能するため、すべてのオプションを表示するdpkg-debために使用man dpkg-debします。

アーカイブブラウザを使用して、パッケージの内容を表示することもできます。


2
最初にインストールしてからアンインストールしない限り、これは機能しません。
謝Jìléi

3
引数として.debファイルを指定すると正常に機能するはずです(PACKAGENAMEではなく、PACKAGE-DEB-FILEを指定します)。
いんちきのキホーテ2009

3
この答えは間違っています。最初にパッケージをインストールする必要があります。インストールしていない場合、.debファイルはありません。
ニール

このコマンドは私のために機能します。たとえば、Googleからgoogle-chrome-stable_current_amd64.debをダウンロードしました。次に、コマンドを発行しました。dpkg --contents google-chrome-stable_current_amd64.debインストールするすべてのファイル(ほとんどが/opt/google/chrome)をリストしました。これを入力しても、現在システムにインストールされているファイルはありません。(問題があればXubuntu 11.10を実行しています。)
quux00

10
@ニール、答えは間違っていません。debファイルがあるからといって、インストールされているわけではありません。apt-fileには、build-essentialパッケージ全体が必要です。OO
d -_- b

21

dpkg --contentsアンインストールされたパッケージを見ることができます。.debがシステム上にまだない場合は、

apt-get --download-only install pkgname

パッケージはダウンロード/var/cache/apt/archivesされますが、インストールされません。


3
コンテンツをダウンロードせずにリストするだけでいいですか?接続が非常に遅く、パッケージが大きすぎてダウンロードできない場合。.debファイルにコンテンツリストが含まれるファイルヘッダーがある場合、パッケージ全体をダウンロードする必要はないでしょう。これは可能ですか?
謝Jìléi

13

最良の方法は、パッケージリポジトリを直接参照することです。

http://packages.debian.org/[distro name]/all/[package name]/filelist

例:

http://packages.debian.org/wheezy/all/transmission-common/filelist


そして、ターミナルを離れるのを避けるために、例えばlynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/lynxインストール済みの場合)を使用できます。
ルスラン

8

@baldozのhttpアイデアを取り入れてUbuntuとDebianに一般化し、少し追加sedしてbash関数のワンライナーでラップしました。

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu https://packages.ubuntu.com ' -e 's Debian https://packages.debian.org ')/$(lsb_release -sc)/all/$1/filelist | sed -n -e '/<pre>/,/<\/pre>/p' | sed -e 's/<[^>]\+>//g' -e '/^$/d'; }

使用法:

$ deb_list curl
/usr/bin/curl
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/copyright
/usr/share/doc/curl/NEWS.Debian.gz
/usr/share/man/man1/curl.1.gz

複数の行で同じ関数:

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu https://packages.ubuntu.com ' \
                      -e 's Debian https://packages.debian.org '
              )/$(lsb_release -sc)/all/$1/filelist \
      | sed -n -e '/<pre>/,/<\/pre>/p' \
      | sed -e 's/<[^>]\+>//g' -e '/^$/d';
}

説明:

  1. 「Ubuntuの」または「Debianの」を返します-si lsb_releaseは、ベースURLとそれを置き換えますhttps://packages.ubuntu.comか、https://packages.debian.org
  2. lsb_Release -scは、完全なURLを構築するためにそれを使用するコード名(例:「trusty」、「sid」など)を返します。 https://packages.ubuntu.com/trusty/all/curl/filelist
  3. curlでそのURLを取得し、3つのsedコマンドでhtmlをパイプします。最初にファイルリスト(タグ<pre></pre>タグの間)のみをキャプチャします。2番目はHTMLタグを取り除きます。3番目は空白行を削除します。

注:PPA、代替aptソースリポジトリは検索せず、実行中のdebian / ubuntuのリリースで利用可能な公式パッケージのみをクエリします。


実行するにはルビーが必要ですか?
アンワル

1
@Anwar、私は怠け者で、複数行の正規表現がsed / awk / grepを吸い込んでいたため、最初はRubyを使用していました。しかし、2つのsedコマンドを使用するように書き直しました。Rubyは必要ありません。
notpeter

いいね!これは私が探していた答えです
アンウォー

4

2017年1月にまだこの問題をグーグルで調べているすべての人々のために、Debian 8.5の最新バージョンのaptとdpkgをダウンロードすることなく、クールなものを入手できます。

ダウンロードせずにDebファイルの内容を一覧表示:

最初にdebファイルの完全なURLを見つけます:

root@debian:apt-get --print-uris download yade
'http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb' yade_2016.06a-7_amd64.deb 1621148 SHA256:26c0d84484a92ae9c2828edaa63243eb764378d79191149970926aa3ec40cdd4

PS:--print-urisスイッチはdebパッケージのURLを出力しますが、debはダウンロードされません。

次に、debパッケージの内容をダウンロードせずに表示します。

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb -c /dev/stdin
drwxr-xr-x root/root         0 2016-12-10 22:18 ./
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/
drwxr-xr-x root/root         0 2016-12-10 22:18 ./usr/bin/
-rwxr-xr-x root/root     13184 2016-12-10 22:18 ./usr/bin/yade
.........................more files listed bellow ......................

PS:同じ結果を達成することができます

root@debian:dpkg -c <(curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb")

ダウンロードせずに、上記のdebパッケージからファイルを抽出します。
たとえば、このパッケージをインストールせずに、debパッケージをダウンロードしなくても、yadeパッケージのマニュアルページを読みたいとします。

助言としてdebパッケージ内のmanページのファイル名がdpkg -cあります./usr/share/man/man1/yade.1.gz

その場でmanページを読むには:

root@debian:curl -sL -o- "http://httpredir.debian.org/debian/pool/main/y/yade/yade_2016.06a-7_amd64.deb" |dpkg-deb --fsys-tarfile /dev/stdin |tar -xO ./usr/share/man/man1/yade.1.gz |man /dev/stdin

manページは、manアプリケーションを使用して正しく表示されます。

PS:上記のパイプはarコマンドでは機能しません。

root@debian:apt --version --> apt 1.4~beta2 (amd64)
root@debian:dpkg --version --> Debian 'dpkg' package management program version 1.18.18 (amd64).
root@debian:man --version --> man 2.7.6.1
root@debian:tar --version --> tar (GNU tar) 1.29

この説明は、「apt」のみを使用し、使用可能な古い「apt-x」コマンドがないシステムで機能します。
ジョンワット


1

最初にインストールするか、.debファイルからリストを抽出する前に、それは不可能だと思われます。

次のコマンドを試してください。

dpkg --contents <(curl -s $(apt-get install --yes --no-download --reinstall --print-uris language-pack-en | tail -n1 | grep -o "http[^']\+"))

language-pack-enパッケージ名で変更します。

基本的には、.deb経由curlで抽出されたファイルを読み取り、実行dpkg --contents FILEします。


パッケージファイルをダウンロードせずにコンテンツを確認することもできます。

.debファイルのURLがわかっている場合、次のシェルコマンドはすべてのパッケージファイルを一覧表示します。

dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")

Curlパラメーター:-s-サイレント、-L-移動したリンクをたどります。

URLがわからない場合は、次の方法で取得しますapt --print-uris

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