![Onde o Debian armazena a lista de pacotes instalados?](https://rvso.com/image/192238/Onde%20o%20Debian%20armazena%20a%20lista%20de%20pacotes%20instalados%3F.png)
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 apt
ou 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 installed
linhas — isso indica que o pacote está instalado corretamente.
A seguinte invocação do AWK extrairá os nomes dos pacotes instalados de um status
arquivo:
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_states
o 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.