Где Debian хранит список установленных пакетов?

Где Debian хранит список установленных пакетов?

Мне нужно найти список пакетов, которые были установлены на сервере Debian (Armbian) до того, как он умер. Поскольку он находится в автономном режиме, я не могу использовать aptor dpkg(или любую другую команду). Мне нужно знатькакой файл(ы)содержат список (даже если они двоичные). Я пробовал искать, но все просто говорит о необходимости выполнить вышеупомянутые команды, что не является вариантом.

решение1

Как аппроксимировать `dpkg --get-selections` из резервной копии /etc и /var?решает вашу основную проблему.

Список установленных пакетов хранится в /var/lib/dpkg/status. Ищите Status: install ok installedстроки — это говорит о том, что пакет установлен правильно.

Следующий вызов AWK извлечет имена установленных пакетов из statusфайла:

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

Если система поддерживает несколько архитектур, вам также необходимо это отслеживать:

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

Еще один интересный файл, /var/lib/apt/extended_statesкоторый записывает флаг «автоматической установки» для установленных пакетов. Вы можете восстановить флаги, запустив что-то вроде

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

Вы можете объединить оба файла, чтобы получить список пакетов, которые были установлены вручную, и положиться на управление зависимостями для установки автоматически установленных пакетов (хотя это не обязательно приведет к установке того же набора пакетов):

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

См. раздел «ФАЙЛЫ» вman dpkg:

/var/lib/dpkg/статус
Статусы доступных пакетов. Этот файл содержит информацию о том, отмечен ли пакет для удаления или нет, установлен ли он или нет и т. д.

Связанный контент