Jak wyświetlić listę plików pakietu Debian bez instalacji


Odpowiedzi:


340

dpkg -c(lub --contents) wyświetla zawartość pliku pakietu .deb (jest to interfejs użytkownika dpkg-deb.)

dpkg -c package_file.deb

Aby pracować bezpośrednio z nazwami pakietów, a nie z plikami pakietów, możesz użyć apt-file. (Może być konieczne apt-filenajpierw zainstalowanie pakietu.)

sudo apt-file update        
apt-file list package_name

Jak stwierdzono w pierwszym komentarzu, apt-file wyświetla zawartość pakietów w już skonfigurowanych repozytoriach Apt. Nie ma znaczenia, czy dany pakiet jest zainstalowany, czy nie.


17
apt-file również wymaga aktualizacji ( sudo apt-file update) i wyświetla tylko zawartość pakietów w już skonfigurowanych repozytoriach Apt.
— szarlatan

1
@quackquixote: W Ubuntu 12.04 jest to automatyczne
— konfiq

1
dpkg -cmiły!
— d -_- b

2
Odpowiedź pliku Apt zakłada, że ​​pakiet pochodzi ze skonfigurowanego repozytorium zamiast z .debpliku pobranego osobno. Pierwotne pytanie jest jednak dwuznaczne.
— Zoredache,

5
@confiq, nie przez moje testy. Korzystam z wersji 12.04.4 i nadal pojawia się komunikat „E: Pamięć podręczna jest pusta. Najpierw musisz uruchomić aktualizację apt-file”.
— Matthew Flaschen

58

Użyj --contentszamiast -L:

dpkg --contents PACKAGENAME

Gdy jest używany w ten sposób, dpkgdziała jako interfejs użytkownika dpkg-deb, więc użyj, man dpkg-debaby zobaczyć wszystkie opcje.

Możesz także użyć przeglądarki archiwów, aby wyświetlić zawartość pakietu.


2
To nie działa, chyba że najpierw go zainstaluję, a następnie odinstaluję.
— Xiè Jìléi,

3
powinien działać dobrze, jeśli podasz mu plik .deb jako argument (zamiast PACKAGENAME, podaj PACKAGE-DEB-FILE).
— szarlatan

3
Ta odpowiedź jest zła. Najpierw musisz zainstalować pakiet. Jeśli nie masz go zainstalowanego, to nie masz pliku .deb.
— Neil

To polecenie działa dla mnie. Na przykład pobrałem google-chrome-stable_current_amd64.deb z Google. Następnie wydał polecenie: dpkg --contents google-chrome-stable_current_amd64.debi wylistował wszystkie pliki, które zainstaluje (głównie do /opt/google/chrome), z których żaden nie jest aktualnie zainstalowany w moim systemie podczas pisania. (Jeśli to ma znaczenie, korzystam z Xubuntu 11.10.)
— quux00

10
@ Nee, odpowiedź nie jest zła. To, że masz plik deb, nie oznacza, że ​​jest zainstalowany. apt-file potrzebuje całego pakietu niezbędnego do kompilacji. OO
— d -_- b

21

dpkg --contentspozwoli spojrzeć na odinstalowany pakiet. Jeśli .deb nie jest jeszcze w twoim systemie, zrób

apt-get --download-only install pkgname

Pakiet zostanie pobrany, /var/cache/apt/archivesale nie zainstalowany.


3
Czy mogę po prostu wyświetlić zawartość bez pobierania? Jeśli korzystam z bardzo wolnego połączenia i pakiet jest zbyt duży, aby go pobrać. Jeśli plik .deb ma nagłówek pliku, do którego prowadzi lista zawartości, to chyba pobranie całego pakietu może nie być konieczne. czy to możliwe?
— Xiè Jìléi,

13

Najlepszym sposobem byłoby przeglądanie bezpośrednio repozytorium pakietów:

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

Przykład:

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


Aby uniknąć opuszczania terminala, możesz użyć np. lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/(Pod warunkiem, że lynxzainstalowałeś).
— Ruslan

8

Wziąłem pomysł http @ baldoz i uogólniłem go dla Ubuntu i Debiana, dodałem trochę sedi zapakowałem w jedno-liniową funkcję bash:

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

Stosowanie:

$ 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

Ta sama funkcja w wielu liniach:

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

Wyjaśniono:

  1. lsb_release -si zwraca „Ubuntu” lub „Debian” zamień je na podstawowy adres URL https://packages.ubuntu.comlubhttps://packages.debian.org
  2. lsb_Release -sc zwraca kryptonim (np. „zaufany”, „sid” itp.). Użyj go do zbudowania pełnego adresu URL: https://packages.ubuntu.com/trusty/all/curl/filelist
  3. Pobierz ten URL za pomocą curl i potokuj HTML za pomocą trzech poleceń sed. Najpierw przechwytuje tylko listę plików (co pomiędzy tagami <pre>i </pre>); drugi usuwa wszystkie znaczniki HTML; trzeci usuwa wszelkie puste linie.

Uwaga: Nie wyszukuje plików PPA, alternatywnych repozytoriów apt apt i tylko odpytuje oficjalne pakiety dostępne dla wersji debian / ubuntu, którą uruchamiasz.


Czy potrzebuję rubinu, aby go uruchomić?
— Anwar

1
@Anwar, początkowo użyłem Ruby, ponieważ byłem leniwy, a wyrażenia regularne z wieloma wierszami wciągały sed / awk / grep. Ale przepisałem go tak, aby używał dwóch poleceń sed, nie wymaga Ruby.
— notpeter

Miły! Oto odpowiedź, której szukałem
— Anwar

4

Dla tych wszystkich osób, które mogą nadal przeglądać ten problem w styczniu 2017 roku, możesz mieć fajne rzeczy z najnowszymi wersjami apt i dpkg w Debian 8.5 bez pobierania czegokolwiek.

Wyświetl zawartość pliku Deb bez pobierania:

Najpierw zlokalizuj pełny adres URL pliku 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: Przełącznik --print-uris drukuje adres URL pakietu deb, ale deb nie jest pobierany.

Następnie wyświetl zawartość pakietu deb bez pobierania:

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: Taki sam wynik można osiągnąć za pomocą

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

Wyodrębnij plik z powyższego pakietu deb, bez pobierania.
Na przykład chcemy przeczytać stronę podręcznika pakietu yade bez instalowania tego pakietu i nawet bez pobierania pakietu deb.

Nazwa pliku strony man wewnątrz pakietu deb, zgodnie z zaleceniami dpkg -cis./usr/share/man/man1/yade.1.gz

Aby przeczytać stronę podręcznika w locie:

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

strona man jest wyświetlana poprawnie przy użyciu aplikacji man.

PS: Powyższe potoki nie działają z poleceniem 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

Ten opis działa dla systemów, które używają tylko „apt” i nie mają starszych poleceń „apt-x”!
— Jon Watte,


1

Wydaje się, że nie jest to możliwe przed instalacją lub wypakowaniem listy z .debpliku.

Spróbuj wykonać następujące polecenie:

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

Zmień za language-pack-enpomocą nazwy pakietu.

Zasadniczo odczytuje .debwyodrębniony plik curli uruchamia się dpkg --contents FILEna nim.


Możesz także sprawdzić zawartość bez pobierania pliku pakietu.

Więc jeśli znasz adres URL .debpliku, następujące polecenie powłoki wyświetli wszystkie pliki pakietów:

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

Zwijaj parametry: -s- cichy, -L- podążaj za przeniesionymi linkami.

Jeśli nie znasz adresu URL, pobierz:: apt --print-urisnp

apt --print-uris install avis | grep avis
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.