我通过 RPM 交付应用程序。
此应用程序提供各种目录和文件。
例如,/opt/internal/com
正在复制文件结构。
我原本以为rpm -e
所有交付的文件结构都/opt/internal/com
将被删除。
但事实并非如此。
文件结构中有一些目录不为空。
这是原因吗?但是这些(非空)目录是由 RPM 安装创建的。所以我希望它们归 RPM 所有并被自动删除。
这有错吗?我应该手动删除它们吗?
答案1
RPM 不会删除任何它不知道的文件,因此如果在目录中创建了不属于软件包的新文件,RPM 不会删除它们或目录。
如果目录为空并且它知道这些目录,它将删除这些目录。这取决于 spec 文件的编写方式。
答案2
詹姆斯·奥戈曼的回答完全正确。
还有一个我最近遇到的需要添加的场景,就是您需要在 %files 部分中用一行“%dir /dir/path”来告诉 RPM 包所拥有的目录,这样它在安装时就会记住 RPM 数据库中的所有文件和目录,并且可以在 RPM 擦除期间将其删除(除非该目录的内容不属于该包)。
在指定所属目录时应更加小心,因为在不同的发行版上处理 RPM 擦除的方法不同。
例如,如果你的软件包包含以下文件和目录:
**DIR:** /opt/dir1/empty_dir
**FILE:** /opt/dir1/file1
**FILE:** /opt/dir1/dir2/file2
那么你的 %files 部分应该看起来像
%files
%dir /opt/dir1
%dir /opt/dir1/empty_dir
%dir /opt/dir1/dir2
/opt/dir1/file1
/opt/dir1/dir2/file2
棘手的部分是,您可能会错过%dir /opt/dir1
,即使它在某些发行版上是空的,它也不会被删除。