我通过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
,即使它在某些发行版中是空的也不会被删除。