我们应该手动删除 /tmp 的内容吗?

我们应该手动删除 /tmp 的内容吗?

我以为“旧”文件/tmp会定期被删除。然而,在我看来,这些/tmp文件会一直增长,直到它想要增长,什么也不会被删除。有些人说最好不要管它/tmp,只有当磁盘满了的时候才删除它的内容。

我的问题是,/tmp设计真的不需要照顾自己吗?最佳实践是什么?

答案1

回答以下问题:

  • 应该/tmp自动清空:是的
  • /tmp我们是否应该定期手动删除文件:你的系统将会处理它们。

如果你可以问自己:

  • /tmp我可以因任何原因(需要空间、想要删除痕迹等)删除文件吗:这取决于继续阅读

文件系统层次标准 (FHS)状态

必须为需要临时文件的程序提供 /tmp 目录。

程序不能假设 /tmp 中的任何文件或目录在程序调用之间都会被保留。

/var/tmp/有一个类似目的, 但一定不重启时将被删除。

这是不保证或定期清理。这可能取决于您的发行版和设置,尽管大多数系统会不时进行一些清理。请/tmp/参阅/var/tmp/评论经过mike

如果你需要删除/tmp,首先查看文件是否正在使用。您可以使用以下方法轻松完成此操作:

lsof /tmp/file_to_delete

如果您有权限,这将显示持有该文件句柄的进程,如进程名称、PID 和文件类型。要显示所有进程,请在前面添加sudo或以用户身份运行

lsof +D /tmp

将显示当前打开的/tmp( ) 中和其下的目录下的所有文件+D。当然,您不应删除这些文件。

事实上,当您删除一个仍处于打开状态的文件时(如果您有权限这样做),它将无法从文件系统命名空间访问,但对于具有打开的文件句柄的进程来说,它仍然存在。关闭该句柄后,该文件将不再可供该进程访问,如果没有进程再打开该文件,则该文件最终将被删除。进程不应该假设该文件在后续open调用之间仍然存在,但程序员很马虎,你永远不知道。因此,它不是那聪明删除某些程序仍在使用的文件。

答案2

我认为这取决于操作系统的变体。我猜想 /tmp 通常在重新启动时被清除,而且系统在会话中途自行清理确实不安全,因为它不知道哪些文件处于活动状态。

如果你够大胆,你可能想在 crontab 中放入一个命令,删除超过一定时间的文件,但如果删除仍在使用的文件,这可能会导致一些问题。你可以尝试一个命令(我还没有尝试过),比如

查找/tmp -type f -ctime +10 -exec rm {} +

理论上这将删除 /tmp 下所有超过 10 天的文件。

答案3

在 CentOS 中有一个/etc/cron.daily名为 的作业tmpwatch,它将递归地删除给定时间内未访问的文件。通常,它用于清理用于临时保存空间的目录,例如 /tmp。

这是/etc/cron.daily/tmpwatch脚本

/bin/sh #!/bin/sh
标志=-umc
/usr/sbin/tmpwatch“$flags”-x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X'/tmp/hsperfdata_*' 10d /tmp
/usr/sbin/tmpwatch“$flags” 30d /var/tmp
对于 /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?} 中的 d;执行
    如果 [ -d "$d" ]; 那么
        /usr/sbin/tmpwatch“$flags”-f 30d“$d”
完毕

/tmp仅当系统重启时目录内容才会被删除,因为正在运行的进程可能正在访问该目录中的文件。

答案4

/tmp 和 /var/tmp 目录会按正常计划进行清理。这可能取决于您的发行版。在我的 CentOS 系统(RedHat 的克隆版)上,有一个计划运行的 cron 作业tmpwatch,一个 tmp 目录清理器,在日程安排。/var/tmp 中的文件可以保留的时间比 /tmp/ 中的文件长一点。我还看到过在重新启动时删除 /tmp(但明确不删除 /var/tmp)的脚本,因为它们知道由于所有进程都是新的,所以不会有任何东西使该文件保持打开状态。

所以,是的,/tmp 需要通过基本脚本进行维护。在维护时间之外,它仍然会填满。如果您选择手动清理,系统管理员的最佳做法是小心谨慎。系统管理员传说谈到了 /tmp 中的符号链接,这些符号链接指向当新手系统管理员运行简单脚本时被删除的必要系统文件find

相关内容