わいせつな作業をしなくても、部分的な定量的な答えを見つけることができました。これが私の(頭のいい)方法論です:
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)
、for dependants_count > 1
)。
libc6が一番上に表示されるのは当然のことです。:)ところで、私はいくつかのプログラミング関連のパッケージといくつかのGISツールがインストールされた典型的なUbuntu9.10セットアップを持っています。
いくつかの統計:
- インストールされているパッケージの総数:1717
- 直接扶養家族の平均数:0.92
- 共有なしの重複サイズの合計(間接的な依存関係を無視):10.25GB
- 直接扶養家族の数のヒストグラム(対数Yスケールに注意):
上記は間接的な依存関係を完全に無視していることに注意してください(つまり、すべてが少なくとも間接的にlibc6に依存している必要があります)。私が本当にすべきことは、すべての依存関係のグラフを作成し、それを統計の基礎として使用することです。たぶん、私はいつかそれを回避して、より詳細で厳密な長いブログ記事を投稿するでしょう。