2009-12-14 06:49:35 +0000 2009-12-14 06:49:35 +0000
295
295

Hoe kan men bestanden van een Debian-pakket opsommen zonder installatie

Dit commando kan alleen de inhoud van geïnstalleerde pakketten,

dpkg -L PACKAGENAME

opsommen, maar hoe kan men de inhoud van een niet-geïnstalleerd pakket opsommen, om het pakket te bekijken/bestuderen?

Antwoorden (8)

359
359
359
2009-12-14 15:42:54 +0000

dpkg -c (of --contents) geeft de inhoud van een .deb-pakketbestand weer (het is een front-end naar dpkg-deb.)

dpkg -c package_file.deb

Om direct met pakketnamen te werken in plaats van met pakketbestanden, kunt u apt-file gebruiken. (Het kan zijn dat u eerst het apt-file pakket moet installeren.)

sudo apt-file update        
apt-file list package_name

Zoals vermeld in de eerste opmerking, vermeldt apt-file de inhoud van pakketten in uw reeds geconfigureerde Apt repositories. Het is niet relevant of een bepaald pakket al dan niet geïnstalleerd is.

58
58
58
2009-12-14 08:14:19 +0000

Gebruik --contents in plaats van -L:

dpkg --contents PACKAGENAME

Bij gebruik op deze manier fungeert dpkg als een front-end naar dpkg-deb, dus gebruik man dpkg-deb om alle opties te zien.

U kunt ook een archiefbrowser gebruiken om de inhoud van het pakket te bekijken.

23
23
23
2009-12-14 14:34:45 +0000

dpkg --contents zal u laten kijken naar het gedeïnstalleerde pakket. Als de .deb nog niet op uw systeem staat, doe dan

apt-get --download-only install pkgname

Het pakket wordt gedownload naar /var/cache/apt/archives maar niet geinstalleerd.

15
15
15
2013-06-01 13:57:56 +0000

De beste manier zou zijn om direct te bladeren in het pakketarchief:

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

Voorbeeld:

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

8
8
8
2015-04-21 21:44:25 +0000

Ik nam @baldoz’s http idee en generaliseerde het voor Ubuntu en Debian, voegde een beetje sed toe en wikkelde het in een bash-functie 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'; }

Gebruik:

$ 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

Dezelfde functie op meerdere regels:

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

Uitleg:

  1. 1. lsb_release -si retourneert “Ubuntu” of “Debian” vervangt dat door de basis url https://packages.ubuntu.com of https://packages.debian.org
  2. lsb_Release -sc retourneert de codenaam (b.v. “trusty”, “sid”, enz.) gebruik dat om de volledige URL op te bouwen: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. 3. Haal die URL met curl en pipe de html door drie sed commando’s. 4. Eerst wordt alleen de bestandslijst vastgelegd (wat is er tussen <pre> en </pre> tags); ten tweede worden alle html tags weggestreept; ten derde worden lege regels verwijderd.

Opmerking: Er wordt niet gezocht in PPA’s, er worden alleen apt sources repos afgewisseld en er worden alleen officiële pakketten opgevraagd die beschikbaar zijn voor de release van debian/ubuntu die je aan het uitvoeren bent.

5
5
5
2017-01-06 03:14:29 +0000

Voor al die mensen die dit probleem misschien nog googlen op Jan 2017, kun je een aantal coole dingen hebben met recente versies van apt en dpkg in Debian 8.5 zonder iets te downloaden.

Lijst Inhoud van Deb Bestand Zonder Download:

Zoek eerst de volledige url van het deb bestand :

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 drukt de url van deb pakket af maar deb wordt niet gedownload.

Geef vervolgens de inhoud van het deb pakket weer zonder het te downloaden:

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: Hetzelfde resultaat kan worden bereikt met

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

*Uittrekken van een bestand uit het bovenstaande deb pakket, zonder te downloaden. * Bijvoorbeeld, we willen man pagina van pakket yade lezen zonder dit pakket te installeren en zonder het deb pakket te downloaden.

Filenaam van man pagina binnen deb pakket zoals geadviseerd door dpkg -c is ./usr/share/man/man1/yade.1.gz

Om man pagina on the fly te lezen:

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 pagina wordt correct weergegeven met behulp van man toepassing.

PS: Bovenstaande leidingen werken niet met ar commando.

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
2
2
2
2014-06-27 15:28:37 +0000

Probeer:

apt-get download packages-name
dpkg --contents *.deb
1
1
1
2015-12-27 13:33:51 +0000

Het lijkt erop dat het niet mogelijk is om het eerst te installeren of de lijst uit te pakken uit het .deb-bestand.

Probeer het volgende commando:

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

Change language-pack-en met uw pakketnaam.

Het leest in principe het .deb-bestand dat via curl is uitgepakt en voert dpkg --contents FILE uit.

  • *

U kunt de inhoud ook controleren zonder het pakketbestand te downloaden.

Dus als u de URL van .deb-bestand kent, zal het volgende shell-commando alle pakketbestanden opsommen:

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

Curl params: -s - stil, -L - volg verplaatste links.

Als u de URL niet kent, haal dan op: apt --print-uris, b.v.

apt --print-uris install avis | grep avis