Почему я вижу различное количество пакетов в / usr / share / doc и при использовании команды dpkg -l?

184
jeebface
user@host:~$ dpkg -l | tail -n +6 | wc -l 1212 user@host:~$ ls /usr/share/doc/ | wc -l 1148 

Моя цель - собрать информацию о лицензии для всех установленных пакетов. Использование dpkg -lкоманды дает мне 1212 записей, но я вижу только 1148 каталогов /usr/share/doc/. Что может объяснить это несоответствие?

0

2 ответа на вопрос

1
Austin Hemmelgarn

Для этого есть две общие причины:

  1. Не все пакеты содержат фактические данные. Некоторые из них являются так называемыми «метапакетами», которые состоят исключительно из списка зависимостей (хорошие примеры - основные пакеты для большинства сред рабочего стола). Некоторые из них являются «виртуальными» пакетами, которые существуют, чтобы обеспечить простой способ зависеть от конкретной службы, не заботясь о том, какая реализация используется (например, пакет «init» в Debian). Debian также имеет «переходные фиктивные пакеты», которые существуют для того, чтобы убедиться, что зависимости по-прежнему корректно разрешаются во время обновлений (потому что сам dpkg не имеет возможности переименовывать установленные пакеты).
  2. У вас могут быть некоторые пакеты, которые были удалены, но в системе по-прежнему есть файлы конфигурации. Команда, которую dpkgвы дали, будет по-прежнему перечислять эти пакеты вместе с установленными, но у них почти никогда не будет директории /usr/share/doc.
1
Deltik

Вот один из способов понять это: сравнение.

deltik@node51 [~]$ dpkg -l | tail -n +6 | wc -l 3170 deltik@node51 [~]$ ls /usr/share/doc/ | wc -l 2964 

Каждая строка dpkg -l | tail -n +6отформатирована так:

ii zram-config 0.5 all Upstart job to enable zram support 

Каждая строка ls /usr/share/doc/отформатирована так:

zram-config

Чтобы команды соответствовали друг другу, они должны выглядеть dpkg -l | tail -n +6 | awk '' | sort -hи ls /usr/share/doc/ | sort -h.

Теперь поместите результаты в два файла:

deltik@node51 [~]$ dpkg -l | tail -n +6 | awk '' | sort -h > /tmp/a.txt deltik@node51 [~]$ ls /usr/share/doc/ | sort -h > /tmp/b.txt 

И их различие (используйте colordiffдля более удобного просмотра):

colordiff /tmp/.txt 

В моей системе я видел эти шаблоны:

  • Если у вас есть две разные архитектуры, вы увидите, что /usr/share/doc/показывает только базовый пакет без добавленной архитектуры:

    305,308c305,306 < gcc-5-base:amd64 < gcc-5-base:i386 < gcc-6-base:amd64 < gcc-6-base:i386 --- > gcc-5-base > gcc-6-base 

    Это объясняет большую часть различий в моей многоархивной ( i386и amd64) системе.

  • Если вы игнорируете различные архитектуры из dpkg -lкоманды ( dpkg -l | tail -n +6 | awk '' | awk -F":" '' | sort -h | uniq > /tmp/a.txt), вы увидите, что некоторые пакеты ничего не помещают /usr/share/doc/, например, пакеты, начинающиеся с linux-image.

  • Или есть другое имя папки /usr/share/doc/, например, NetworkManagerдля network-managerпакета или HTMLдля различных пакетов KDE.

Похожие вопросы