Onde o Debian armazena a lista de pacotes instalados?

Onde o Debian armazena a lista de pacotes instalados?

Preciso encontrar uma lista dos pacotes que foram instalados em um servidor Debian (Armbian) antes de ele morrer. Como está offline, não posso usar aptou dpkg(ou qualquer outro comando). eu preciso saberquais arquivoscontêm a lista (mesmo que sejam binários). Tentei pesquisar, mas tudo diz apenas para executar os comandos aforementioend, o que não é uma opção.

Responder1

Como aproximar `dpkg --get-selections` de um backup de/etc e/var?aborda sua preocupação subjacente.

A lista de pacotes instalados é armazenada em arquivo /var/lib/dpkg/status. Procure por Status: install ok installedlinhas — isso indica que o pacote está instalado corretamente.

A seguinte invocação do AWK extrairá os nomes dos pacotes instalados de um statusarquivo:

awk '/^Package:/ { package = $2 }
     /^Status: install ok installed/ { print package }' /path/to/status

Se o sistema suporta múltiplas arquiteturas, você também precisará acompanhar isso:

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

Outro arquivo interessante é /var/lib/apt/extended_stateso que registra o sinalizador de “instalação automática” dos pacotes instalados. Você pode restaurar os sinalizadores executando 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

Você pode combinar os dois arquivos para listar os pacotes que foram instalados manualmente e contar com o gerenciamento de dependências para instalar os pacotes instalados automaticamente (embora isso não resulte necessariamente na instalação do mesmo conjunto de pacotes):

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 a seção “ARQUIVOS” emman dpkg:

/var/lib/dpkg/status
Status dos pacotes disponíveis. Este arquivo contém informações sobre se um pacote está marcado para remoção ou não, se está instalado ou não, etc.

informação relacionada