Заполнители dpkg-запроса «Filename», «MD5sum» и «Size» всегда пусты

В настоящее время я пытаюсь получить некоторую информацию об установленных пакетах и ​​системах, которые используют dpkg . Поэтому я попытался использовать dpkg-query . Большинство заполнителей работают нормально, и я получаю то, что мне нужно, однако я заметил, что заполнители Filename , MD5sum и Size всегда пусты.

Простая команда, чтобы увидеть проблему:

 dpkg-query -W -f '"location":"${Filename}","md5":"${MD5sum}","size":"${Size}"\\n' 

Это приведет к загрузке строк просто

 "location":"","md5":"","size":"" 

Как упоминалось в справочной странице , эти поля являются «внутренними, связанными с внешним интерфейсом». На самом деле они используются только в dselect .

Это означает, что вы не можете полагаться на них в dpkg-query по умолчанию. Они соответствуют значениям, хранящимся в «доступной» базе данных, /var/lib/dpkg/available ; dpkg-query по умолчанию учитывает только /var/lib/dpkg/status настоящее время. Вы можете добавить --load-avail объединения информации из «доступной» базы данных, но для этого необходимо использовать dselect качестве инструмента установки вашего пакета, поскольку /var/lib/dpkg/available поддерживается только в Дата от dselect . Если вы используете APT, это не будет работать, как описано в документации к команде -p :

Пользователи интерфейсных приложений на основе APT должны вместо этого использовать apt-cache show package-name поскольку available файл обновляется только при использовании dselect .

Может помочь, если я немного MD5sum значение полей: Filename , MD5sum и SizeMSDOS-Filename ) – все дают информацию о файле, содержащем пакет (его имя файла, контрольную сумму и размер). Они не относятся к самим пакетам, поэтому firebase database status не нуждается в них и не хранит их. Пакет, установленный или не установленный, остается тем же самым независимо от того, где находится его файл пакета и каковы его характеристики. Эта информация полезна только для внешних интерфейсов, которые получают пакеты и предоставляют их dpkg .

Вместо этого вы можете использовать grep-available инструмент grep-available (или, что более grep-aptavail как уже упоминалось, grep-aptavail Kitt ):

 grep-available -s Filename,MD5sum,size -PX  

Пример:

 grep-available -s Filename,MD5sum,size -PX dpkg 

образец вывода:

 Filename: pool/main/d/dpkg/dpkg_1.18.24_amd64.deb MD5sum: 5553b3fac608f5c4f9fa3ddbff18c2c5 Size: 2106696