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 administrador del sistema, 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 admitan paquetes deb.
Para enumerar el contenido de un paquete no instalado, necesitaremos un paquete .deb. Vamos descargar un paquete de Ubuntu para nuestras pruebas.
Tomemos el paquete ‘curl’ como ejemplo.
Para descargar curl:
$ sudo wget http://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.
http://packages.debian.org/[distro_name]/todos/[package_name]/ filelist
Ejemplo:
http://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 el paquete ‘rizo’
$ 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 el paquete ‘rizo’
$ 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.
dónde,
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: filtrar el archivo a través de bzip2, utilizar 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 son 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.