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

284

To polecenie może wyświetlać tylko zawartość zainstalowanych pakietów,

dpkg -L PACKAGENAME

ale jak wyświetlić zawartość niezainstalowanego pakietu, aby wyświetlić podgląd / sprawdzić pakiet?

Xiè Jìléi
źródło
Podobnie na Ubuntu: askubuntu.com/questions/32507/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

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.

alfplayer
źródło
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.

quack quixote
źródło
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.

Rudedog
źródło
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

baldoz
źródło
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.

notpeter
źródło
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
George Vasiliou
źródło
Ten opis działa dla systemów, które używają tylko „apt” i nie mają starszych poleceń „apt-x”!
Jon Watte,
2

Próbować:

apt-get download packages-name
dpkg --contents *.deb
readanon
źródło
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
kenorb
źródło