インストールされていない Debian パッケージのファイルを一覧表示する方法
このコマンドはインストールされているパッケージの内容を一覧表示することができますが、 インストールされていないパッケージの内容を一覧表示して、パッケージをプレビューしたり調べたりするにはどうすればよいでしょうか?
このコマンドはインストールされているパッケージの内容を一覧表示することができますが、 インストールされていないパッケージの内容を一覧表示して、パッケージをプレビューしたり調べたりするにはどうすればよいでしょうか?
dpkg -c
(--contents
) は .deb パッケージファイルの内容を一覧表示します (dpkg-deb
のフロントエンドです。)
dpkg -c package_file.deb
パッケージファイルではなく、パッケージ名を直接操作するには apt-file
を使うとよいでしょう。(
sudo apt-file update
apt-file list package_name
最初のコメントで述べたように、apt-file は既に設定されている Apt リポジトリ内のパッケージの内容をリストアップします。特定のパッケージがインストールされているかどうかは関係ありません。
--contents
の代わりに -L
を使います:
dpkg --contents PACKAGENAME
このように使うと、dpkg
は dpkg-deb
のフロントエンドとして機能しますので、すべてのオプションを見るには man dpkg-deb
を使います。
I took @baldoz’s http idea and generalized it for Ubuntu and Debian, added a little sed
and wrapped it in a bash function one-liner:
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';
}
Explained:
https://packages.ubuntu.com
または https://packages.debian.org
に置き換えます。3. URL を curl で取得し、3 つの sed コマンドで html をパイプします。最初にファイルリスト (https://packages.ubuntu.com/trusty/all/curl/filelist
と <pre>
タグの間のもの) のみをキャプチャし、2 番目に html タグを削除し、3 番目に空白行を削除します。2017年1月時点でまだこの問題をググるかもしれないすべての人々のために、Debian 8.5のaptとdpkgの最近のバージョンで何もダウンロードせずにいくつかのクールなものを持つことができます。
ダウンロードせずにdebファイルの内容を表示:
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")
と達成することができます
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
**上記の deb パッケージからファイルを、ダウンロードなしで抽出して下さい。
dpkg --contents <(curl -s $(apt-get install --yes --no-download --reinstall --print-uris language-pack-en | tail -n1 | grep -o "http[^']"))
dpkg -c <(curl -sL "http://httpredir.debian.org/debian/pool/main/a/avis/avis_1.2.2-4_all.deb")
.deb
をパッケージ名に変更してみてください。
パッケージファイルをダウンロードしなくても内容を確認することもできます。
そこで、language-pack-en
ファイルのURLがわかれば、以下のシェルコマンドで全てのパッケージファイルを一覧表示します:
apt --print-uris install avis | grep avis
Curlパラメータ: .deb
- silent, curl
- follow moved links.
URLがわからない場合は: dpkg --contents FILE
で取得します。