FreeBSD 使用手册
上一页 | 第24章 　更新与升级 FreeBSD | 下一页

# 24.8 删除过时的文件、 目录和函数库

Based on notes provided by Anton Shterenlikht.

在 FreeBSD 的开发过程中， 随时可能会出现一些文件或其内容过时的情况。 这种情况有可能是由于其功能在其它地方实现了， 函数库的版本号增加， 或完全从基本系统中删去， 等等。 一般的联编和更新过程并不会删去这些旧的文件、 函数库或目录， 在更新系统之后， 应及时予以清理。 清理的好处是这些文件不会再继续占用存储 (以及备份) 空间， 另外， 如果旧的函数库或文件中存在安全或可靠性问题， 您也应更新到新的函数库， 以避免安全隐患或崩溃情形的发生。 过时的文件、 目录和函数库会列在 `/usr/src/ObsoleteFiles.inc` 中。 接下来将介绍在系统更新过程中如何删去这些过时的文件。

我们假定您已经按照 第 24.7.1 节 介绍的步骤完成了更新操作。 在 `make `installworld`` 和 `mergemaster` 命令完成之后， 您应使用下面的命令检查系统中是否存在过时的文件或库：

    # cd /usr/src
    # make check-old

如果有过时的文件， 则可以用下面的命令来删除：

    # make delete-old

> 提示: 参阅 `/usr/src/Makefile` 可以了解其他 target 的功用。

在删除文件时， 系统会针对每个文件都给出提示。 您可以跳过这些提示， 并让系统自动完成删除操作， 方法是使用 make 变量 `BATCH_DELETE_OLD_FILES`， 具体做法如下：

    # make -DBATCH_DELETE_OLD_FILES delete-old

您也可以用 `yes` 命令和管道来达到类似的目的：

    # yes|make delete-old

> 警告: 删去过时的文件， 有可能会破坏现有的依赖这些文件的应用程序。 对于旧的函数库来说， 这种问题出现的可能性更大。 绝大多数情况下， 您应重新联编使用旧库的所有的程序、 port 或函数库之后再执行 `make `delete-old-libs``。

在 Ports Collection 中提供了一些检测动态连接库依赖关系的工具， 例如 `sysutils/libchk` 和 `sysutils/bsdadminscripts`。

过时的动态连接库可能会与新库冲突， 导致类似这样的警告消息：

    /usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5
    /usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5

要解决这样的问题， 需要确认安装这个库的 port：

    # pkg_info -W  /usr/local/lib/libtiff.so
    /usr/local/lib/libtiff.so was installed by package tiff-3.9.4
    # pkg_info -W /usr/local/lib/libXext.so
    /usr/local/lib/libXext.so was installed by package libXext-1.1.1,1

接着卸载、 重新联编并安装 port。 您可以使用 `ports-mgmt/portmaster` 或 `ports-mgmt/portupgrade` 工具来自动完成这些操作。 在确认所有的 port 都重新联编， 并且不再使用旧库以后， 您就可以用下面的命令来删除它们了：

    # make delete-old-libs

上一页 | 起始页 | 下一页
重新编译 “world” | 上一级 | 跟踪多台机器

本文档和其它文档可从这里下载：ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读文档，如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.