Yüklemeden bir Debian paketinin dosyaları nasıl listelenir


Yanıtlar:


340

dpkg -c(veya --contents) bir .deb paket dosyasının içeriğini listeler (ön uçtur dpkg-deb.)

dpkg -c package_file.deb

Paket dosyaları yerine doğrudan paket isimleriyle çalışmak için kullanabilirsiniz apt-file. (Önce apt-filepaketi yüklemeniz gerekebilir .)

sudo apt-file update        
apt-file list package_name

İlk açıklamada belirtildiği gibi apt-file, önceden yapılandırılmış Apt depolarınızdaki paketlerin içeriğini listeler. Herhangi bir paketin kurulu olup olmadığı önemli değildir.


17
apt-file'ın da güncellenmesi gerekir ( sudo apt-file update) ve yalnızca önceden yapılandırılmış Apt depolarınızdaki paketlerin içeriğini listeler.
quack quixote,

1
@quackquixote: Ubuntu
12.04'te

1
dpkg -cGüzel!
d -_- b

2
Apt dosyası yanıtı, paketinizin .debayrı indirdiğiniz bir dosya yerine yapılandırılmış bir depodan geldiğini varsayar . Asıl soru yine de belirsiz.
Zoredache

5
@confiq, testime göre değil. 12.04.4 kullanıyorum ve hala "E: Önbellek boş. Önce 'apt-file update' komutunu çalıştırmanız gerekiyor." Yazıyor.
Matthew Flaschen

58

Yerine --contentskullanın -L:

dpkg --contents PACKAGENAME

Bu şekilde kullanıldığında, dpkgön uç gibi davranır dpkg-deb, bu nedenle man dpkg-debtüm seçenekleri görmek için kullanın .

Paket içeriğini görüntülemek için bir arşiv tarayıcı da kullanabilirsiniz.


2
Bu ilk önce ben kurup kaldırmadığım sürece çalışmaz.
Xiè Jìléi,

3
Bir argüman olarak bir .deb dosyası verirseniz iyi çalışmalıdır (PACKAGENAME yerine, PACKAGE-DEB-FILE komutunu verin).
quix quixote

3
Bu cevap yanlış. İlk önce paketin kurulu olması gerekir. Yüklemişseniz, bir .deb dosyanız yoktur.
Neil,

Bu komut benim için çalışıyor. Örneğin, google-chrome-stable_current_amd64.deb dosyasını Google'dan indirdim. Daha sonra şu komutu verdi: dpkg --contents google-chrome-stable_current_amd64.debve bu yazarken /opt/google/chromehiçbiri şu anda sistemime yüklenmemiş olan (çoğunlukla kendisine ) yükleyeceği tüm dosyaları listeledi . (Bu
önemliyse

10
@Neil, cevap yanlış değil. Sadece bir deb dosyanız olduğundan, yüklü olduğu anlamına gelmez. apt-file tüm gerekli paketleri sağlar. OO
d -_- b

21

dpkg --contentsKaldırılan pakete bakmanıza izin verir. .Deb henüz sisteminizde değilse,

apt-get --download-only install pkgname

Paket indirilecek /var/cache/apt/archivesancak yüklenmeyecek.


3
İçeriği indirmeden listeleyebilir miyim? Çok yavaş bir bağlantım varsa ve paket indirmek için çok büyükse. .Deb dosyası, içerik listesinin gittiği bir dosya başlığına sahipse, sanırım tüm paketi indirmeniz gerekmeyebilir. Mümkün mü?
Xiè Jìléi,

13

En iyi yol doğrudan paket deposuna göz atmak olacaktır:

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

Örnek:

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


Ve terminalden ayrılmaktan kaçınmak için, örneğin lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/( lynxkurduğunuzda) kullanabilirsiniz.
Ruslan,

8

Çektiğim baldoz en http fikri @ ve Ubuntu ve Debian için genelleştirilmiş, biraz eklendi sedve bash fonksiyonu tek poşetine sarılmış:

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

Kullanımı:

$ 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

Birden fazla satırda aynı işlev:

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

Açıklaması:

  1. döner -si lsb_release "Ubuntu" veya "Debian" taban url ile değiştirmek https://packages.ubuntu.comveyahttps://packages.debian.org
  2. lsb_Release -sc, tam URL'yi oluşturmak için kullanılan kod adını (örneğin, "trusty", "sid", vb.) döndürür: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. Bu URL'yi curl ile alın ve html'yi üç sed komutuyla yönlendirin. İlk önce sadece dosya listesini yakalar (aradakiler <pre>ve </pre>etiketler); ikinci html etiketlerini çıkarır; üçüncü boş satırları kaldırır.

Not: PPA'larda arama yapmaz, alternatif apt kaynakları repoları aramaz ve yalnızca çalıştırmakta olduğunuz debian / ubuntu sürümünün piyasaya sürülmesi için resmi paketleri sorgular.


Çalıştırmak için yakuta ihtiyacım var mı?
Anwar,

1
@Anwar, başlangıçta Ruby kullandım çünkü tembeldim ve multiline regexes sed / awk / grep'i emmişti. Ancak iki sed komutunu kullanmak için yeniden yazdım, Ruby'ye gerek yok.
notpeter

Güzel! Aradığım cevap bu.
Anwar

4

Ocak 2017'de hala bu sorunu çözebilecek tüm insanlar için, Debian 8.5'te apt ve dpkg'ın son sürümleriyle hiçbir şey indirmeden harika şeyler yaşayabilirsiniz.

İndirme Yapmadan Deb Dosyasının İçeriğini Listele:

Önce deb dosyasının tam URL'sini bulun:

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

Not: --print-uris anahtarı deb paketinin url'sini yazdırıyor ancak deb indirilmedi.

Ardından indirmeden deb paketinin içeriğini görüntüleyin:

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 ......................

Not: Aynı sonuç ile elde edilebilir

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

Dosyayı yukarıdaki deb paketinden indirmeden çıkarın.
Örneğin, bu paketi yüklemeden ve deb paketini indirmeden paket yade'nin man sayfasını okumak istiyoruz.

Tavsiye ettiği şekilde deb paket içerisinde adam sayfasının Dosya adı dpkg -colduğunu./usr/share/man/man1/yade.1.gz

Anında man sayfasını okumak için:

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 sayfası man uygulaması kullanılarak doğru görüntüleniyor.

Not: Borular üstü ar komutuyla çalışmaz.

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

Bu açıklama yalnızca "apt" kullanan ve daha eski "apt-x" komutlarına sahip olmayan sistemler için geçerlidir!
Jon Watte

2

Deneyin:

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

1

Öncelikle kurmadan ya da listeyi .debdosyadan çıkarmadan önce mümkün değil gibi görünüyor .

Aşağıdaki komutu deneyin:

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

language-pack-enPaket adınızla değiştirin .

Temelde .debayıklanan curlve üzerinde çalışan dosyayı okur dpkg --contents FILE.


Paket dosyasını indirmeden içeriği de kontrol edebilirsiniz.

Dolayısıyla, .debdosyanın URL'sini biliyorsanız, aşağıdaki kabuk komutu tüm paket dosyalarını listeler:

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

Kıvrılma params: -s- sessiz, -L- taşınan bağlantıları izleyin.

URL’yi bilmiyorsanız, şunu getir: apt --print-urisörn.

apt --print-uris install avis | grep avis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.