【问题标题】:Linux - How does mkstemp64 create a hidden file, and how can I see it in the file systemLinux - mkstemp64 如何创建隐藏文件,如何在文件系统中看到它
【发布时间】:2017-08-18 16:14:20
【问题描述】:

背景:

在 CentOS 7 x86_64 上。我正在使用applydeltarpm,并且在从增量创建新 RPM 时磁盘空间不足。我在应用过程中看到/ 磁盘空间使用率增加到 100%,但使用ls -l /tmpfind /tmp -mmin -1 -type f 在卷上找不到工作/临时文件。

我将applydeltarpm 源代码更改为使用/var/tmp 而不是/tmp,并重建了RPM。现在 apply 可以使用修改后的applydeltarpm,因为/var/tmp 有更多的磁盘空间。但是我仍然找不到使用mkstemp64 创建的临时文件。

问题:

mkstemp64 创建的临时文件似乎“不存在”,但仍然作为创建者的文件描述符存在,并且当applydeltarpm 创建大 RPM(1 小时申请在慢速磁盘上)。 mkstemp64 文档说创建了一个实际文件。源代码显示模板文件名为/tmp/deltarpmpageXXXXXX。但是不存在具有该模板名称的文件。

如何在系统上创建这个临时文件,而不用通常的目录列表lsfind 找到。以及如何在系统中找到这些“不存在”的文件?

(我很好奇,因为我也在监控系统安全)

参考资料:

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 标志的情况下打开的。

【问题讨论】:

  • 它在创建后立即unlinks 文件。

标签: linux rpm delta mkstemp


【解决方案1】:

如果不再需要通过文件系统访问临时文件,通常的做法是在创建后立即取消链接。如果进程崩溃或稍后忘记取消链接,这可以避免悬挂临时文件。

unlink() 不会删除文件,它只会从文件系统中删除文件的链接。文件系统中文件的每个链接都会将文件的链接计数增加一(同一个文件可以有多个链接)。此外,每个调用open()mmap() 来打开文件的进程都会增加文件计数,直到它关闭描述符 - 然后链接计数会减少。只要至少有一个链接,文件就存在。当链接计数为零时,文件实际上被删除了。

mkstemp() 也在后台调用open() 打开临时文件并返回其描述符。

要查看已打开但文件系统中不再存在的文件,您可以使用lsof 并搜索文件名后面有“(已删除)”的行。

lsof | grep '(deleted)'

这些文件使用的(磁盘)空间将在它们附加到的进程完成或自行关闭文件描述符时被释放。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多