Pertanyaan Cara daftar file dari paket Debian tanpa menginstal


Perintah ini hanya bisa mendaftar konten paket yang diinstal,

dpkg -L PACKAGENAME

tetapi bagaimana daftar isi paket yang tidak diinstal, untuk melihat / memeriksa paket?


255
2017-12-14 06:49


asal


Mirip dengan Ubuntu: askubuntu.com/questions/32507/… - Ciro Santilli 新疆改造中心 六四事件 法轮功


Jawaban:


dpkg -c (atau --contents) daftar isi file paket .deb (Ini adalah front-end untuk 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-file paket pertama.)

sudo apt-file update        
apt-file list package_name

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


306
2017-12-14 15:42



apt-file juga perlu diperbarui (sudo apt-file update), dan hanya daftar konten untuk paket di repositori Apt Anda yang sudah dikonfigurasi. - quack quixote
@quackquixote: Di Ubuntu 12.04 otomatis - confiq
dpkg -c bagus! - d-_-b
Jawaban Apt-file mengasumsikan bahwa paket Anda berasal dari repositori yang dikonfigurasi, bukan a .deb file yang telah Anda unduh secara terpisah. Pertanyaan aslinya masih ambigu. - Zoredache
@confiq, bukan dengan pengujian saya. Saya menjalankan 12.04.4 dan masih mengatakan "E: Cache kosong. Anda perlu menjalankan 'apt-file update' terlebih dahulu." - Matthew Flaschen


Menggunakan --contents dari pada -L:

dpkg --contents PACKAGENAME

Ketika digunakan dengan cara ini, dpkg bertindak sebagai ujung-depan dpkg-deb, jadi gunakan man dpkg-deb untuk melihat semua opsi.

Anda juga dapat menggunakan browser arsip untuk melihat isi paket.


53
2017-12-14 08:14



Ini tidak berfungsi kecuali saya menginstalnya terlebih dahulu dan kemudian menghapusnya. - Xiè Jìléi
seharusnya berfungsi dengan baik jika Anda memberikan file .deb sebagai argumen (bukan PACKAGENAME, berikan PAKET-DEB-FILE). - quack quixote
Jawaban ini salah. Anda harus menginstal paket terlebih dahulu. Jika Anda tidak menginstalnya, maka Anda tidak memiliki file .deb. - Neil
Perintah ini berfungsi untuk saya. Misalnya, saya mengunduh google-chrome-stable_current_amd64.deb dari Google. Kemudian mengeluarkan perintah: dpkg --contents google-chrome-stable_current_amd64.deb dan daftar semua file yang akan diinstal (sebagian besar 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
@Neil, jawabannya tidak salah. Hanya karena Anda memiliki file deb, bukan berarti itu dipasang. apt-file membutuhkan seluruh paket build-essential. O.O - d-_-b


dpkg --contents akan membiarkan Anda melihat paket yang dihapus. Jika .deb belum ada di sistem Anda, lakukan

apt-get --download-only install pkgname

Paket akan diunduh ke /var/cache/apt/archives tetapi tidak diinstal.


17
2017-12-14 14:34



Bisakah saya daftar isi tanpa mengunduhnya? Jika koneksi saya sangat lambat, dan jika paket terlalu besar untuk diunduh. Jika file .deb memiliki file header di mana daftar isi berjalan, saya kira mengunduh seluruh paket mungkin tidak diperlukan. Apakah ini mungkin? - Xiè Jìléi


Cara terbaik adalah dengan menelusuri secara langsung repositori paket:

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

Contoh:

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


11
2018-06-01 13:57



Dan untuk menghindari meninggalkan terminal, Anda dapat menggunakan mis. lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/ (asalkan Anda punya lynx terinstal). - Ruslan


Saya ambil Ide http @ baldoz dan generalisasi untuk Ubuntu dan Debian, menambahkan sedikit sed dan membungkusnya dalam fungsi bash satu-liner:

function deb_list () { curl -s $(lsb_release -si | sed -e 's Ubuntu http://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 beberapa baris:

function deb_list () {
    curl -s $(lsb_release -si \
                | sed -e 's Ubuntu http://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 http://packages.ubuntu.com atau https://packages.debian.org
  2. lsb_Release -sc mengembalikan codename (mis. "amanah", "sid", dll) menggunakannya untuk membangun URL lengkap: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Ambil URL itu dengan curl dan pipa html melalui tiga perintah sed. Pertama hanya menangkap daftar file (apa antara <pre> dan </pre> tag); strip kedua label html apa pun; ketiga menghapus semua baris kosong.

Catatan: Ini tidak mencari PPA, repos sumber alternatif tepat dan hanya kueri paket resmi yang tersedia untuk rilis debian / ubuntu yang Anda jalankan.


7
2018-04-21 21:44



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


Mencoba:

apt-get download packages-name
dpkg --contents *.deb

2
2018-06-27 15:28





Sepertinya itu tidak mungkin sebelum menginstalnya terlebih dahulu atau mengekstrak daftar dari .deb mengajukan.

Coba perintah berikut:

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

Perubahan language-pack-en dengan nama paket Anda.

Itu pada dasarnya membaca .deb file diekstrak melalui curl dan lari dpkg --contents FILE di atasnya.


Anda juga dapat memeriksa konten tanpa mengunduh file paket.

Jadi, jika Anda tahu URL .deb file, 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")

Curl params: -s - diam, -L - ikuti tautan yang dipindahkan.

Jika Anda tidak tahu URL, ambil dengan: apt --print-uris, mis.

apt --print-uris install avis | grep avis

1
2017-12-27 13:33