Мне удалось вычислить частичный количественный ответ без необходимости выполнять непристойный объем работы. Вот моя методология (без ума от волос):
1) Используйте следующую команду, чтобы сгенерировать список пакетов с установленным размером и списком зависимостей:
dpkg-query -Wf '${Package}\t${Installed-Size}\t${Depends}
2) Разобрать результаты и построить карту статистики для каждого пакета:
struct PkgStats
{
PkgStats() : kbSize(0), dependantCount(0) {}
int kbSize;
int dependentCount;
};
typedef std::map<std::string, PkgStats> PkgMap;
Где dependentCount
- количество других пакетов, от которых напрямую зависит от этого пакета.
Результаты
Вот список 20 самых популярных пакетов в моей системе:
Package Installed KB # Deps Dup'd MB
libc6 10096 750 7385
python 624 112 68
libatk1.0-0 200 92 18
perl 18852 48 865
gconf2 248 34 8
debconf 988 23 21
libasound2 1428 19 25
defoma 564 18 9
libart-2.0-2 164 14 2
libavahi-client3 160 14 2
libbz2-1.0 128 12 1
openoffice.org-core 124908 11 1220
gcc-4.4-base 168 10 1
libbonobo2-0 916 10 8
cli-common 336 8 2
coreutils 12928 8 88
erlang-base 6708 8 46
libbluetooth3 200 8 1
dictionaries-common 1016 7 6
где Dup'd MB
- это количество мегабайт, которое было бы дублировано, если бы не было общего доступа (= installed_size * (dependants_count - 1)
, для dependants_count > 1
).
Не удивительно видеть libc6 сверху. :) Кстати, у меня есть типичная установка Ubuntu 9.10 с несколькими установленными пакетами, связанными с программированием, а также с некоторыми инструментами ГИС.
Немного статистики:
- Всего установленных пакетов: 1717
- Среднее число прямых иждивенцев: 0,92
- Общий дублированный размер без совместного использования (без учета косвенных зависимостей): 10,25 ГБ
- Гистограмма # прямых иждивенцев (обратите внимание на логарифмическую шкалу Y):
Обратите внимание, что приведенное выше полностью игнорирует косвенные зависимости (то есть все должно быть, по крайней мере, косвенно зависеть от libc6). Что я действительно должен был сделать, так это построить график всех зависимостей и использовать его в качестве основы для моей статистики. Может быть, я когда-нибудь займусь этим и опубликую длинную статью в блоге с более подробной информацией и строгостью.