Cómo enumerar los archivos del paquete Deb antes de instalar

La pregunta típica antes de instalar un nuevo paquete deb en nuestro sistema es cuáles son los archivos reales que se instalaron y dónde se encuentran los archivos nuevos. La situación crítica surge cuando se reemplaza un archivo no deseado que nunca quiso reemplazar. Así que hoy, en este tutorial, me centraré en los pasos en los que usted, como sistema admin puede ver los archivos antes de instalar el paquete y asegurarse de que está seguro. Usaremos Ubuntu 18.04 para este artículo y debería funcionar para todas las demás distribuciones de Linux que admiten paquetes deb.

Para enumerar el contenido de un paquete no instalado, necesitaremos un paquete .deb. Vamos descargar un paquete de Ubuntu para nuestras pruebas.

Echemos ‘curl’paquete como un example.

Descargar curl:

$ sudo wget https://archive.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.58.0-2ubuntu3_amd64.deb
$ ls

curl_7.58.0-2ubuntu3_amd64.deb DEBIAN Documentos de escritorio Descargas ejemplos.desktop Música Imágenes Plantillas públicas Videos

embalaje dpkg

Podemos obtener información sobre un paquete mediante ‘dpkg -I’ … Pero no nos dirá el contenido. dpkg es un administrador de paquetes para sistemas basados ​​en Debian.

Para ver el contenido, use la opción ‘–contents’ o ‘-c’ para el comando dpkg.

$ dpkg -c curl_7.58.0-2ubuntu3_amd64.deb

## O ##

dpkg-deb -c curl_7.58.0-2ubuntu3_amd64.deb
drwxr-xr-x root/root         0 2018-03-15 17:50 ./
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/bin/
-rwxr-xr-x root/root    223304 2018-03-15 17:50 ./usr/bin/curl
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/share/
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/share/doc/
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/share/doc/curl/
-rw-r--r-- root/root     10955 2018-01-25 01:57 ./usr/share/doc/curl/copyright
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/share/man/
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/share/man/man1/
-rw-r--r-- root/root     38989 2018-03-15 17:50 ./usr/share/man/man1/curl.1.gz
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/share/zsh/
drwxr-xr-x root/root         0 2018-03-15 17:50 ./usr/share/zsh/vendor-completions/
-rw-r--r-- root/root     12851 2018-03-15 17:50 ./usr/share/zsh/vendor-completions/_curl
lrwxrwxrwx root/root         0 2018-03-15 17:50 ./usr/share/doc/curl/NEWS.Debian.gz -> ../libcurl4/NEWS.Debian.gz
lrwxrwxrwx root/root         0 2018-03-15 17:50 ./usr/share/doc/curl/changelog.Debian.gz -> ../libcurl4/changelog.Debian.gz

Arriba podemos ver los detalles del contenido de un paquete dado. Las desventajas son que debemos haber descargado el paquete .deb respetado.

Para encontrar de qué paquete proviene un archivo .deb específico:

$ sudo dpkg -S curl
libcurl3:amd64: /usr/share/doc/libcurl3/NEWS.Debian.gz
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/changelog.Debian.gz
bash-completion: /usr/share/bash-completion/completions/curl
libpython2.7-stdlib:amd64: /usr/lib/python2.7/macurl2path.py
libcurl3:amd64: /usr/share/doc/libcurl3
python3-pycurl: /usr/share/doc/python3-pycurl
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/copyright
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/NEWS.Debian.gz
gnupg: /usr/lib/gnupg/gpgkeys_curl
python3-pycurl: /usr/lib/python3/dist-packages/curl
libcurl3:amd64: /usr/share/lintian/overrides/libcurl3
python3-pycurl: /usr/share/doc/python3-pycurl/copyright
libcurl3:amd64: /usr/share/doc/libcurl3/changelog.Debian.gz
libpython3.5-stdlib:amd64: /usr/lib/python3.5/macurl2path.py
python3-pycurl: /usr/share/doc/python3-pycurl/changelog.Debian.gz
libcurl3:amd64: /usr/share/doc/libcurl3/copyright
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.4
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.3
python3-pycurl: /usr/lib/python3/dist-packages/curl/__init__.py
python3-pycurl: /usr/lib/python3/dist-packages/pycurl.cpython-35m-x86_64-linux-gnu.so
libcurl3-gnutls:amd64: /usr/share/lintian/overrides/libcurl3-gnutls
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls
python3-pycurl: /usr/lib/python3/dist-packages/pycurl-7.43.0.egg-info
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.4.0
....

Con la opción -L le pedimos a dpkg que enumere el contenido de un paquete instalado proporcionándole el nombre del paquete.

Para enumerar los archivos instalados por un paquete:

$ sudo dpkg -L curl
/.
/usr
/usr/bin
/usr/bin/curl
/usr/share
/usr/share/doc
/usr/share/doc/curl
/usr/share/doc/curl/copyright
/usr/share/zsh
/usr/share/zsh/vendor-completions
/usr/share/zsh/vendor-completions/_curl
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/curl.1.gz
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/NEWS.Debian.gz
...

Listado de archivos usando apt-file

“apt-file” un paquete de software que enumera el contenido de los paquetes en sus repositorios y le permite buscar un archivo en particular entre todos los paquetes disponibles.

Para instalar ‘apt-file’:

$ sudo apt install apt-file
$ sudo apt-file update

Ahora enumere el contenido de cualquier paquete:

$ sudo apt-file list

Ejemplo 1:

$ sudo apt-file list curl
curl: /usr/bin/curl
curl: /usr/share/doc/curl/NEWS.Debian.gz
curl: /usr/share/doc/curl/changelog.Debian.gz
curl: /usr/share/doc/curl/copyright
curl: /usr/share/man/man1/curl.1.gz
curl: /usr/share/zsh/vendor-completions/_curl

Ejemplo 2:

$ sudo apt-file list ssh
ssh: /usr/share/doc/ssh/NEWS.Debian.gz
ssh: /usr/share/doc/ssh/changelog.Debian.gz
ssh: /usr/share/doc/ssh/copyright
ssh: /usr/share/lintian/overrides/ssh

A continuación se muestra la mejor manera de navegar directamente por el repositorio de paquetes.

https://packages.debian.org/[distro_name]/todo/[package_name]/ filelist

Ejemplo:

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

Para extraer los archivos que some_package.deb a un directorio:

$ sudo mkdir some_dir
$ sudo dpkg -x some_package.deb some_dir

Ejemplo:
Para paquete ‘curl’

$ sudo mkdir curl_extracts
$ sudo dpkg -x curl_7.58.0-2ubuntu3_amd64.deb curl_extracts
$ tree curl_extracts
curl_extracts/
└── usr
	├── bin
	│   └── curl
	└── share
    	├── doc
    	│   └── curl
    	│   	├── changelog.Debian.gz -> ../libcurl4/changelog.Debian.gz
    	│   	├── copyright
    	│   	└── NEWS.Debian.gz -> ../libcurl4/NEWS.Debian.gz
    	├── man
    	│   └── man1
    	│   	└── curl.1.gz
    	└── zsh
        	└── vendor-completions
            	└── _curl

9 directories, 6 files

Para extraer los datos de control (script de paquete, metadatos, etc.) que some_package.deb en un directorio:

$ sudo mkdir some_dir
$ sudo dpkg -e some_package.deb some_dir

Ejemplo:
Para paquete ‘curl’

$ sudo mkdir curl_control_data
$ sudo dpkg -x curl_7.58.0-2ubuntu3_amd64.deb curl_control_data
$ tree curl_control_data
curl_control_data/
├── control
└── md5sums

0 directories, 2 files

comando ar vx

El programa GNU ar crea, modifica y extrae archivos. Un único archivo que contiene una colección de otros archivos en una estructura que hace posible recuperar los archivos individuales originales (llamados miembros del archivo) se llama Archivo.

Comprobación del contenido extrayendo directamente el archivo .deb.

$ sudo ar vx curl_7.58.0-2ubuntu3_amd64.deb

Este comando extraerá el archivo .deb y generará las siguientes 3 salidas.

x - debian-binary
x - control.tar.xz
x - data.tar.xz

GNU / tar o BSD / tar es un programa de archivo diseñado para almacenar y extraer archivos de un archivo de almacenamiento conocido como archivo tar. Puede crear un archivo tar o un archivo tar comprimido (.tar). Sin embargo, a veces es necesario enumerar el contenido del archivo tar o tar.gz en la pantalla antes de extraer todos los archivos.

Vamos a extraer el tercer archivo, es decir, data.tar.xz para ver el contenido del archivo .deb.

donde,

t: muestra el contenido de un archivo.
v: enumera detalladamente los archivos procesados ​​(muestra información detallada).
z: Filtre el archivo a través de gzip para que podamos abrir el archivo tar comprimido (descomprimir) .gz.
J: Filtro de archivo a través de bzip2, utilícelo para descomprimir archivos .bz2.
f nombre de archivo: utilice un archivo de almacenamiento llamado nombre de archivo.

$ tar -xvJf data.tar.xz
./
./usr/
./usr/bin/
./usr/bin/curl
./usr/share/
./usr/share/doc/
./usr/share/doc/curl/
./usr/share/doc/curl/copyright
./usr/share/man/
./usr/share/man/man1/
./usr/share/man/man1/curl.1.gz
./usr/share/zsh/
./usr/share/zsh/vendor-completions/
./usr/share/zsh/vendor-completions/_curl
./usr/share/doc/curl/NEWS.Debian.gz
./usr/share/doc/curl/changelog.Debian.gz

Todo lo anterior contiene pasos en los que puede buscar en el paquete, espero que este tutorial le resulte útil. Comente otros métodos que conozca y siga leyendo el próximo tutorial.