Cara daftar file paket Debian tanpa menginstal

284

Perintah ini hanya dapat mencantumkan konten paket yang diinstal,

dpkg -L PACKAGENAME

tetapi bagaimana cara mendaftar konten dari paket yang tidak diinstal, untuk melihat dulu / memeriksa paket?

Xiè Jìléi
sumber
Serupa di Ubuntu: askubuntu.com/questions/32507/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

340

dpkg -c(atau --contents) mencantumkan konten file paket .deb (Ini adalah front-end ke dpkg-deb.)

dpkg -c package_file.deb

Untuk bekerja secara langsung dengan nama paket daripada file paket, Anda dapat menggunakan apt-file. (Anda mungkin perlu menginstal apt-filepaket terlebih dahulu.)

sudo apt-file update        
apt-file list package_name

Seperti yang dinyatakan dalam komentar pertama, file apt daftar konten untuk paket dalam repositori Apt Anda yang sudah dikonfigurasi. Tidak relevan apakah paket tertentu diinstal atau tidak.

alfplayer
sumber
17
apt-file juga perlu diperbarui ( sudo apt-file update), dan hanya mencantumkan konten untuk paket di repositori Apt Anda yang sudah dikonfigurasi.
quack quixote
1
@quackquixote: Di Ubuntu 12.04 otomatis
confiq
1
dpkg -cbagus!
d -_- b
2
Jawaban file Apt mengasumsikan bahwa paket Anda berasal dari repositori yang telah dikonfigurasikan alih-alih .debfile yang telah Anda unduh secara terpisah. Namun pertanyaan aslinya tidak jelas.
Zoredache
5
@confiq, bukan dengan pengujian saya. Saya menjalankan 12.04.4 dan masih mengatakan "E: Cache kosong. Anda harus menjalankan 'pembaruan file apt' terlebih dahulu."
Matthew Flaschen
58

Gunakan --contentsalih-alih -L:

dpkg --contents PACKAGENAME

Ketika digunakan dengan cara ini, dpkgbertindak sebagai front-end dpkg-deb, jadi gunakan man dpkg-debuntuk melihat semua opsi.

Anda juga dapat menggunakan browser arsip untuk melihat konten paket.

quack quixote
sumber
2
Ini tidak berfungsi kecuali saya menginstalnya terlebih dahulu dan kemudian uninstall.
Xiè Jìléi
3
seharusnya berfungsi dengan baik jika Anda memberikan file deb sebagai argumen (alih-alih PACKAGENAME, berikan PAKET-DEB-FILE).
Quack quixote
3
Jawaban ini salah. Anda harus menginstal paket terlebih dahulu. Jika Anda belum menginstalnya, maka Anda tidak memiliki file deb.
Neil
Perintah ini bekerja untuk saya. Misalnya, saya mengunduh google-chrome-stable_current_amd64.deb dari Google. Kemudian mengeluarkan perintah: dpkg --contents google-chrome-stable_current_amd64.debdan terdaftar semua file yang akan diinstal (kebanyakan ke /opt/google/chrome), tidak ada yang saat ini diinstal pada sistem saya saat saya mengetik ini. (Saya menjalankan Xubuntu 11,10 jika itu penting.)
quux00
10
@Neil, jawabannya tidak salah. Hanya karena Anda memiliki file deb, bukan berarti itu diinstal. apt-file membutuhkan seluruh paket build-essential. OO
d -_- b
21

dpkg --contentsakan membiarkan Anda melihat paket yang dihapus. Jika. Deb belum ada di sistem Anda, lakukan

apt-get --download-only install pkgname

Paket akan diunduh /var/cache/apt/archivestetapi tidak diinstal.

Rudedog
sumber
3
Bisakah saya mendaftar konten tanpa mengunduhnya? Jika saya menggunakan koneksi yang sangat lambat, dan jika paket terlalu besar untuk diunduh. Jika file .deb memiliki header file tempat daftar isinya berjalan, saya kira mengunduh seluruh paket mungkin tidak diperlukan. Apakah ini mungkin?
Xiè Jìléi
13

Cara terbaik adalah menelusuri langsung repositori paket:

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

Contoh:

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

baldoz
sumber
Dan untuk menghindari meninggalkan terminal, Anda dapat menggunakan misalnya lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/(asalkan Anda telah lynxmenginstal).
Ruslan
8

Saya mengambil ide http @ baldoz dan menggeneralisasinya untuk Ubuntu dan Debian, menambahkan sedikit seddan membungkusnya dengan fungsi bash 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'; }

Pemakaian:

$ 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

Fungsi yang sama pada banyak baris:

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';
}

Dijelaskan:

  1. lsb_release -si mengembalikan "Ubuntu" atau "Debian" menggantikannya dengan url dasar https://packages.ubuntu.comatauhttps://packages.debian.org
  2. lsb_Release -sc mengembalikan codename (mis. "trusty", "sid", dll) menggunakannya untuk membangun URL lengkap: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. Ambil URL itu dengan ikal dan pipa html melalui tiga perintah sed. Pertama hanya menangkap daftar file (ada apa di antara <pre>dan </pre>tag); strip kedua semua tag html; ketiga menghapus setiap baris kosong.

Catatan: Ia tidak mencari PPA, repo sumber apt alternatif dan hanya menanyakan paket resmi yang tersedia untuk rilis debian / ubuntu yang Anda jalankan.

notpeter
sumber
Apakah saya perlu ruby ​​untuk menjalankannya?
Anwar
1
@ Anwar, saya awalnya menggunakan Ruby karena saya malas dan regil multiline mengisap sed / awk / grep. Tapi saya sudah menulis ulang untuk menggunakan dua perintah sed, tidak perlu Ruby.
notpeter
Bagus! Ini adalah jawaban yang saya cari
Anwar
4

Untuk semua orang yang mungkin masih googling masalah ini pada Januari 2017, Anda dapat memiliki beberapa hal keren dengan apt dan dpkg versi terbaru di Debian 8.5 tanpa mengunduh apa pun.

Daftar Isi File Deb Tanpa Unduhan:

Pertama-tama cari url lengkap file 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 switch mencetak url paket deb tetapi deb tidak diunduh.

Kemudian tampilkan konten paket deb tanpa mengunduhnya:

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: Hasil yang sama bisa dicapai dengan

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

Ekstrak file dari paket deb di atas, tanpa unduhan.
Misalnya kita ingin membaca halaman manual paket yade tanpa menginstal paket ini dan tanpa mengunduh paket deb.

Nama file halaman manual di dalam paket deb seperti yang disarankan oleh dpkg -cis./usr/share/man/man1/yade.1.gz

Untuk membaca halaman manual dengan cepat:

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

halaman manual ditampilkan dengan benar menggunakan aplikasi manual.

PS: Pipa di atas tidak bekerja dengan perintah 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
George Vasiliou
sumber
Deskripsi ini berfungsi untuk sistem yang hanya menggunakan "apt" dan tidak memiliki perintah "apt-x" yang lebih lama!
Jon Watte
2

Mencoba:

apt-get download packages-name
dpkg --contents *.deb
readanon
sumber
1

Sepertinya tidak mungkin sebelum menginstalnya terlebih dahulu atau mengekstraksi daftar dari .debfile.

Coba perintah berikut:

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

Ubah language-pack-endengan nama paket Anda.

Ini pada dasarnya membaca .debfile yang diekstraksi melalui curldan dijalankan dpkg --contents FILEdi atasnya.


Anda juga dapat memeriksa konten tanpa mengunduh file paket.

Jadi jika Anda tahu URL .debfile, perintah shell berikut akan mencantumkan semua file paket:

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

Paruh ikal: -s- diam, -L- ikuti tautan yang dipindahkan.

Jika Anda tidak tahu URL-nya, ambil dengan:, apt --print-urismis

apt --print-uris install avis | grep avis
kenorb
sumber