2010/6/22 [email protected] <[email protected]> > > 以下图中, > 绿色圆是为了满足依赖关系而apt-get或aptitude自动安装上的 包 > 蓝色圆是管理员使用apt-get install 或 aptitude install指定安装的包,简称为手动安装的 包
其实你没必要搞这么复杂 而且邮件列表的指导原则是采用纯文本格式撰写 这些图片对后续的讨论和邮件的存档 (包括 usenet 和 google groups 中的阅读) 非常不友好 > 例子 1: [snip] > 例子3: > 1. 在例子2的基础上, 有个手动安装的包E推荐D(既E Recommends D,手动安装E时,也会把D装上) > > apt-get remove C : 将删除C, 同时提示你用apt-get autoremove去清除B,D > apt-get autoremove C : 将删除B, C, D > aptitude remove C : 将删除B, C, D 我前面的疑惑就是针对你的最后一句话 也就是这个情况 从 /var/lib/apt/extended_states 可以看出 只有自动安装状态是被记录的 具体的依赖与推荐关系并不被记录 (可以通过 aptitude why $pkg 来查找指定包的可能安装原因) 依照你此例中说明的情况 执行 $ apt-get autoremove 会卸载所有只被某些包推荐而不被任何包依赖的包 而这明显与事实不符 我希望你给出具体的例子 也就是具体的 package names 而不是这些的并没有让问题变得更明了的示意图 这些图片中的依赖与推荐关系用文字也可以表述的很清楚 > 我的理解: 删除C, 那么B,D 这两个包既是自动安装的,且没有其他手动安装的包依赖于它们, > 则可以判定B,D也是没必要的 > 虽然D被E Recommend, 但为啥是这么设计的, 我没猜出开发人员的想法 因为本身并不成立 你说的这种卸载方式 以 apt 对包依赖的记录 是无法实现的 > 例子4: [snip] > 例子5: > 1. 在例子4的基础上, D变成推荐B, E依然依赖于D > > apt-get remove C : 将删除C, 同时提示你用apt-get autoremove去清除B > apt-get autoremove C : 将删除B, C > aptitude remove C :将删除B, C > > 我的理解: 删除C, 而B没有被其他手动安装的包直接依赖或者间接依赖(我指那些一层层depend on的关系), D被E依赖 > 所以B不是必要的,可以删除, 而D不能删除 这个例子里也有同样的问题 一个比较合理的判断一个包是否会被自动卸载的方法是用 aptitude why $pkg 只要 aptitude why $pkg 能够找到任何一条路径使得 $pkg 是被某些包依赖或推荐的 则 apt-get autoremove 和 aptitude remove 就不会卸载 $pkg 如果你不同意的话 希望能举出真实反例 > Tao > -- > http://huangtao.me/ > http://www.google.com/profiles/UniIsland >

