背景:
在 CentOS 7 x86_64 上。我正在使用applydeltarpm
,并且在从增量创建新 RPM 时磁盘空间不足。我在应用过程中观察到/
磁盘空间使用率增加到 100%,但无法使用ls -l /tmp
或找到卷上的工作/临时文件find /tmp -mmin -1 -type f
。
我将applydeltarpm
源代码更改为使用/var/tmp
而不是/tmp
,并重建了 RPM。现在 apply 与 modified 一起工作applydeltarpm
,因为/var/tmp
有更多的磁盘空间。但我仍然找不到使用创建的临时文件mkstemp64
。
问题:
创建的临时文件mkstemp64
似乎“不存在”,但仍然作为创建者的文件描述符存在,并且在applydeltarpm
创建大型 RPM 时使用了相当大的磁盘空间(在慢速磁盘上应用 1 小时)。文档说创建了mkstemp64
一个实际文件。并且源代码显示模板文件名为/tmp/deltarpmpageXXXXXX
. 但是不存在具有该模板名称的文件。
这个临时文件如何能够在系统上创建而不用通常的目录列表找到ls
,或者find
. 我怎样才能在系统中找到这些“不存在”的文件?
(我很好奇,因为我也在监控系统安全)
参考:
https://github.com/rpm-software-management/deltarpm/blob/master/applydeltarpm.c
# line 198
if (pagefd < 0)
{
char tmpname[80];
sprintf(tmpname, "/tmp/deltarpmpageXXXXXX");
#ifdef DELTARPM_64BIT
pagefd = mkstemp64(tmpname);
#else
pagefd = mkstemp(tmpname);
#endif
if (pagefd < 0)
{
fprintf(stderr, "could not create page area\n");
exit(1);
}
unlink(tmpname);
}
https://www.mkssoftware.com/docs/man3/mkstemp.3.asp
mktemp() 函数根据模板参数返回一个唯一的文件名。在生成它时,当前目录中没有文件具有该名称。实际上没有创建文件,因此其他应用程序可能会创建具有此名称的文件。
mkstemp() 函数与 mktemp() 类似,它基于模板创建一个唯一的文件名;然而, mkstemp() 实际上创建文件并返回它的文件描述符。创建的文件的名称存储在模板中。
mkstemp64() 函数与 mkstemp() 函数相同,只是打开文件时设置了 O_LARGEFILE 标志。