Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4562360
  • 博文数量: 1214
  • 博客积分: 13195
  • 博客等级: 上将
  • 技术积分: 9105
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-19 14:41
个人简介

C++,python,热爱算法和机器学习

文章分类

全部博文(1214)

文章存档

2021年(13)

2020年(49)

2019年(14)

2018年(27)

2017年(69)

2016年(100)

2015年(106)

2014年(240)

2013年(5)

2012年(193)

2011年(155)

2010年(93)

2009年(62)

2008年(51)

2007年(37)

分类: BSD

2009-04-08 22:03:10

从以下地址转载:
http://www.icl.pku.edu.cn/yujs/BSDFiles/html/pkg_cutleaves.html

作者:于江生(北京大学计算机系)

声明:允许未经作者的同意进行非商业目的的转载,但必须保持原文的完整性。


FreeBSD对包的管理极为严格,
# make deinstall clean
可以轻而易举地将一个软件包卸载干净。如果由于某些特殊原因系统不能干净地删除某个目录,它会明白地提示用户哪个目录或哪个文件未清除,待用户进一步查明。与GNU/Linux相比,FreeBSD对port tree的维护和管理要更学院派一些。我喜欢用
# make install clean
来编译源码安装,有时也随意地pkg_add。按照运行依存(run dependency),工具软件之间的关系复杂,呈现网状结构,动一处则牵动甚多。FreeBSD下安装软件简单至极,系统能自动按照依存关系递归地安 装所需要的ports。卸载软件也不难,但如果用户有“洁癖”,不想多保留任何“无用的东西”,则就需要pkg_cutleaves来帮忙管理这些软件包 了。
内容摘要

问题的由来

我们在使用FreeBSD的时候,经常安装软件包。在安装的过程中,有一些build时依存的包会先被安装,而往往它 们不是我们所需要的。例如在安装xvidcap时先安装gawk,安装后也不卸载gawk。如果我们不需要gawk,就不得已在安装成功xvidcap后 把gawk手动卸载。

问题是,包之间的复杂的依存关系让我们手动卸载时经常出错。这时,我们需要工具来梳理已经安装的软件包之间的关系,按照它们之间的依存关系整理出一 个有向非循环图(DAG),我们不妨称之为依存图,以此约束我们每一次的卸载都是从叶子结点开始。幸运的是,我们有pkg_cutleaves这样好用的 管理工具,可以帮助我们递归地卸载某些我们不需要的叶子结点。下面给出一个简短的介绍,假设命令都是root下达的。

显示所有叶子结点信息

首先,我们通过

# pkg_cutleaves -lc > ~/installed
来生成所有的叶子结点,大致样子如下:
ImageMagick-6.4.3.6 - Image processing tools
R-2.7.1 - A language for statistical computing and graphics
WordNet-3.0 - Dictionaries and thesauri with devel. libraries (C, TCL) and browsers
ardour-2.4.1 - Ardour - a digital audio workstation
auctex-emacs22-11.85 - Integrated environment for writing LaTeX using GNU Emacs
bibtool-2.48_1 - Command line manipulation of BibTeX files

卸载我们不需要的叶子结点

我们通过

# pkg_cutleaves -lxg
来生成一个文件:/usr/local/etc/pkg_leaves.exclude,这个文件记录了所有叶子结点的文件名,不包含版本信息。我们可以 编辑修改这个文件,去掉我们不需要的叶子结点。接着,我们可以放心地清除我们不需要的build依存包,一个简单的命令就搞定:
# pkg_cutleaves -Rxg

系统会交互地询问我们是否删除某某某,保证文件/usr/local/etc/pkg_leaves.exclude所记录的就是软件依存图的所有叶子结点。概括而言,pkg_cutleaves清除软件包安装过程中产生的冗余的包,为我们的系统瘦身。

阅读(1427) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~