RPM清除不会删除交付的目录并留下垃圾

我通过RPM提供应用程序。

这个应用程序提供各种目录和文件。
例如在/opt/internal/com
正在复制文件结构。

我期待在rpm -e所有在/opt/internal/com下提供的文件结构都将被删除。
但事实并非如此。
文件结构中有非空的目录。

这是原因吗? 但是这些(非空的)目录是由RPM安装创build的。 所以我期望他们将被RPM“拥有”,并自动删除。

这是错的吗? 我应该手动删除它们吗?

RPM不会删除任何不知道的文件,所以如果在不是包的一部分的目录中创build了新文件,RPM将不会删除它们或目录。

它将删除目录,如果它们是空的,它知道他们。 这取决于spec文件的写法。

James O'Gorman的回答绝对正确。

我最近遇到的另外一个场景是,你需要用“%dir / dir / path”这一行来告诉%files部分的RPM包所拥有的目录,以便它能记住RPM数据库中的所有文件和目录在RPM擦除期间可以被删除(除非该目录的内容不属于该包)。

在指定拥有的目录时应该小心,因为在不同的发行版上有不同的方法来处理RPM擦除。

例如,如果你的软件包包含以下文件和目录:

**DIR:** /opt/dir1/empty_dir **FILE:** /opt/dir1/file1 **FILE:** /opt/dir1/dir2/file2

那么你的%文件部分应该看起来像

 %files %dir /opt/dir1 %dir /opt/dir1/empty_dir %dir /opt/dir1/dir2 /opt/dir1/file1 /opt/dir1/dir2/file2 

棘手的部分是,你可能会错过%dir /opt/dir1 ,即使它在某些发行版中是空的也不会被删除。