База пакетов — записи, которые dpkg сделал при установке. Файлы на диске живут своей жизнью.
Когда dpkg ставит пакет, он записывает в базу пакетов его имя, версию, состояние и список всех файлов, которые разложил по системе. Строка Status: install ok installed значит: пакет установлен и настроен, ошибок при установке не было.
Дальше запись меняется, только когда пакетом занимается сам dpkg — при установке, обновлении или удалении. rm, удаливший файл программы, базу не трогает. Поэтому список файлов в записи и содержимое диска могут разойтись.
Список файлов пакета из записи печатает dpkg -L, а ls проверяет сам диск:
В списке dpkg -L есть /usr/bin/lab-pkg-report, а ls печатает No such file or directory.
Ты удалил /usr/share/doc/tree/TODO командой sudo rm. Что напечатает dpkg -L tree?
-
dpkg -Lфайлы не проверяет и о повреждениях не сообщает: он печатает записанный список. -
Список берётся из записи в базе, а
rmеё не меняет. Пропавший файл в списке остаётся — проверяет диск толькоls.
dpkg -L печатает список из записи о пакете, сделанной при установке. Есть ли файл на диске, покажет ls -l /usr/share/doc/tree/TODO — No such file or directory.
Главное в шаге
- dpkg записывает в базу пакетов состояние пакета и список его файлов.
- Запись меняется только операциями dpkg, удаление файла руками её не трогает.
-
dpkg -Lпечатает файлы из записи, есть ли они на диске — проверяетls.