Pregunta Cómo listar archivos de un paquete Debian sin instalar


Este comando solo puede mostrar el contenido de los paquetes instalados,

dpkg -L PACKAGENAME

¿pero cómo enumerar los contenidos de un paquete no instalado para obtener una vista previa / examinar el paquete?


255


origen


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


Respuestas:


dpkg -c (o --contents) enumera el contenido de un archivo de paquete .deb (es un front-end para dpkg-deb.)

dpkg -c package_file.deb

Para trabajar directamente con nombres de paquetes en lugar de archivos de paquetes, puede usar apt-file. (Puede necesitar instalar el apt-file paquete primero.)

sudo apt-file update        
apt-file list package_name

Como se indicó en el primer comentario, apt-file enumera los contenidos de los paquetes en sus repositorios Apt ya configurados. Es irrelevante si un paquete en particular está o no instalado.


306



apt-file también necesita ser actualizado (sudo apt-file update), y solo muestra el contenido de los paquetes en sus repositorios Apt ya configurados. - quack quixote
@quackquixote: en Ubuntu 12.04 es automático - confiq
dpkg -c ¡bonito! - d-_-b
La respuesta del archivo Apt asume que su paquete proviene de un repositorio configurado en lugar de un .deb archivo que ha descargado por separado. La pregunta original es ambigua sin embargo. - Zoredache
@confiq, no por mi prueba. Estoy ejecutando 12.04.4 y todavía dice "E: el caché está vacío. Primero necesita ejecutar 'actualización de archivo apt'". - Matthew Flaschen


Utilizar --contents en lugar de -L:

dpkg --contents PACKAGENAME

Cuando se usa de esta manera, dpkg actúa como un front-end para dpkg-deb, entonces usa man dpkg-deb para ver todas las opciones

También puede usar un navegador de archivos para ver el contenido del paquete.


53



Esto no funciona a menos que lo haya instalado primero y luego lo desinstale. - Xiè Jìléi
debería funcionar bien si le das un archivo .deb como argumento (en lugar de PACKAGENAME, dale PACKAGE-DEB-FILE). - quack quixote
Esta respuesta es incorrecta Tienes que tener el paquete instalado primero. Si no lo tiene instalado, entonces no tiene un archivo .deb. - Neil
Este comando funciona para mí. Por ejemplo, descargué google-chrome-stable_current_amd64.deb de Google. Luego emitió el comando: dpkg --contents google-chrome-stable_current_amd64.deb y enumeró todos los archivos que instalará (principalmente a /opt/google/chrome), ninguno de los cuales está actualmente instalado en mi sistema mientras escribo esto. (Estoy ejecutando Xubuntu 11.10 si eso importa). - quux00
@Neil, la respuesta no está mal. Solo porque tenga un archivo deb, no significa que esté instalado. apt-file necesita todo el paquete build-essential. O.O. - d-_-b


dpkg --contents le permitirá ver el paquete desinstalado. Si el .deb aún no está en su sistema, haga

apt-get --download-only install pkgname

El paquete se descargará a /var/cache/apt/archives pero no instalado


17



¿Puedo simplemente enumerar los contenidos sin descargarlo? Si tengo una conexión muy lenta y el paquete es demasiado grande para descargarlo. Si el archivo .deb tiene un encabezado de archivo donde va la lista de contenidos, creo que descargar todo el paquete quizás no sea necesario. es posible? - Xiè Jìléi


La mejor manera sería navegar directamente en el repositorio de paquetes:

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

Ejemplo:

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


11



Y para evitar salir de la terminal, puede usar, p. lynx -dump -nolist http://packages.debian.org/wheezy/all/transmission-common/filelist | grep ^/ (siempre que tenga lynx instalado). - Ruslan


Yo tomé idea http de @baldoz y lo generalizó para Ubuntu y Debian, agregó un poco de sed y lo envolvió en una función bash de un solo 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'; }

Uso:

$ 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

La misma función en múltiples líneas:

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

Explicado:

  1. lsb_release -si devuelve "Ubuntu" o "Debian" reemplazar eso con la url base http://packages.ubuntu.com o https://packages.debian.org
  2. lsb_Release -sc devuelve el nombre clave (por ejemplo, "trusty", "sid", etc.) utilízalo para compilar la URL completa: http://packages.ubuntu.com/trusty/all/curl/filelist
  3. Obtenga esa URL con curl y canalice el html a través de tres comandos sed. Primero captura solo la lista de archivos (lo que está entre <pre> y </pre> etiquetas); segundo quita cualquier etiqueta html; tercero elimina cualquier línea en blanco.

Nota: No busca PPA, repos de fuentes alternativas y solo consulta los paquetes oficiales disponibles para el lanzamiento de debian / ubuntu que esté ejecutando.


7



¿Necesito rubí para ejecutarlo? - Anwar
@Anwar, al principio había usado Ruby porque era floja y las expresiones regulares multilínea absorben sed / awk / grep. Pero lo he reescrito para usar dos comandos sed, no se requiere Ruby. - notpeter
¡Bonito! Esta es la respuesta que estaba buscando - Anwar


Tratar:

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

2





Parece que no es posible antes de instalarlo primero o extraer la lista de .deb archivo.

Pruebe el siguiente comando:

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

Cambio language-pack-en con tu nombre de paquete

Básicamente lee .deb archivo extraído a través de curl y correr dpkg --contents FILE en eso.


También puede verificar el contenido sin descargar el archivo del paquete.

Entonces, si conoce la URL de .deb archivo, el siguiente comando de shell listará todos los archivos del paquete:

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

Param de rizos: -s - silencio, -L - seguir enlaces movidos.

Si no conoce la URL, busque por: apt --print-uris, p.ej.

apt --print-uris install avis | grep avis

1





Para todas aquellas personas que todavía puedan buscar en Google este tema en enero de 2017, puedes tener algunas cosas interesantes con las versiones recientes de apt y dpkg en Debian 8.5 sin descargar nada.

Lista del contenido del archivo Deb sin descargar: 

Primero ubique la url completa del archivo 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

PD: el modificador de impresión imprime la url del paquete deb, pero deb no se descarga.

A continuación, muestra los contenidos del paquete deb sin descargarlo:

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: el mismo resultado se puede lograr con

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

Extraiga un archivo del paquete de Deb anterior, sin descargarlo.
Por ejemplo, queremos leer la página man del paquete yade sin instalar este paquete y sin siquiera descargar el paquete deb.

Nombre de archivo de la página man dentro del paquete Deb según lo recomendado por dpkg -c es ./usr/share/man/man1/yade.1.gz

Para leer la página del hombre sobre la marcha:

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

la página man se muestra correctamente utilizando la aplicación man.

PD: Above pipes no funciona con el comando 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

1