25.8. 删除过时的文件、 目录和函数库

Based on notes provided by Anton Shterenlikht.

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

我们假定您已经按照 第 25.7.1 节 “更新系统的规范方法” 介绍的步骤完成了更新操作。 在 make installworldmergemaster 命令完成之后, 您应使用下面的命令检查系统中是否存在过时的文件或库:

# 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/libchksysutils/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/portmasterports-mgmt/portupgrade 工具来自动完成这些操作。 在确认所有的 port 都重新联编, 并且不再使用旧库以后, 您就可以用下面的命令来删除它们了:

# make delete-old-libs

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

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.