![¿Dónde almacena Debian la lista de paquetes instalados?](https://rvso.com/image/192238/%C2%BFD%C3%B3nde%20almacena%20Debian%20la%20lista%20de%20paquetes%20instalados%3F.png)
Necesito encontrar una lista de los paquetes que se instalaron en un servidor Debian (Armbian) antes de que muriera. Como está desconectado, no puedo usar apt
ni dpkg
(ni ningún otro comando). necesito saberqué archivo(s)contienen la lista (incluso si son binarios). Intenté buscar, pero todo solo dice que ejecute los comandos anteriores, lo cual no es una opción.
Respuesta1
¿Cómo aproximar `dpkg --get-selections` a partir de una copia de seguridad de/etc y/var?aborda su preocupación subyacente.
La lista de paquetes instalados se almacena en /var/lib/dpkg/status
. Busque Status: install ok installed
líneas; esto indica que el paquete está instalado correctamente.
La siguiente invocación de AWK extraerá los nombres de los paquetes instalados de un status
archivo:
awk '/^Package:/ { package = $2 }
/^Status: install ok installed/ { print package }' /path/to/status
Si el sistema admitía varias arquitecturas, también deberá realizar un seguimiento de ello:
awk '/^Package:/ { p = $2; i = 0 }
/^Status: install ok installed/ { i = 1 }
i && /^Architecture: all/ { print p; next }
i && /^Architecture/ { printf "%s:%s\n", p, $2 }' /path/to/status
Otro archivo interesante es /var/lib/apt/extended_states
el que registra el indicador de “instalación automática” para los paquetes instalados. Puedes restaurar las banderas ejecutando algo como
awk '/^Package:/ { p = $2 }
/^Architecture/ { a = $2 }
/^Auto-Installed: 1/ { printf "%s:%s\n", p, a }' /path/to/extended_states |
xargs sudo apt-mark auto
Puede combinar ambos archivos para enumerar los paquetes que se instalaron manualmente y confiar en la administración de dependencias para instalar los paquetes instalados automáticamente (aunque esto no necesariamente dará como resultado que se instale el mismo conjunto de paquetes):
awk 'FNR == NR && /^Package:/ { p = $2 }
/^Status: install ok installed/ { i = 1 }
FNR == NR && i && /^Architecture: all/ { ps[p] = 1; next }
FNR == NR && i && /^Architecture/ { ps[p ":" $2] = 1}
FNR != NR && /^Package:/ { p = $2 }
FNR != NR && /^Architecture:/ { a = $2 }
/^Auto-Installed: 1/ { delete ps[p ":" a] }
END { for (p in ps) print p }' /path/to/status /path/to/extended_states
Consulte la sección “ARCHIVOS” enman dpkg
:
/var/lib/dpkg/status
Estados de los paquetes disponibles. Este archivo contiene información sobre si un paquete está marcado para eliminarse o no, si está instalado o no, etc.