如何清理/ tmp?


73
rizhas@rizhas-laptop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda7        67G   58G  5,2G  92% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
udev            1,5G   12K  1,5G   1% /dev
tmpfs           303M  1,2M  302M   1% /run
none            5,0M     0  5,0M   0% /run/lock
none            1,5G  348K  1,5G   1% /run/shm
none            100M   80K  100M   1% /run/user
overflow        1,0M  1,0M     0 100% /tmp
overflow        1,0M  1,0M     0 100% /tmp

如何清理/tmp


1
可能在Unix和Linux上得到了回答。不确定是否使这个问题重复。
drc

不,@ drc,但是很好找到。我使用那里的链接来更新我的答案。
Rinzwind


Answers:


115

/ tmp应该在重新启动时清理,但是如果不重新启动(这对于服务器是正常的),则不会进行清理

find /tmp -ctime +10 -exec rm -rf {} +

将删除所有超过10天的文件和文件夹。您可能需要将其添加到每日计划。


更新

在下面的注释中,@ sfussenegger建议该命令的格式略有不同,该格式可能更适合您的需求以及所运行的系统。

sudo find /tmp -type f -atime +10 -delete

在这里,该命令sudo用于确保所有内容均已删除(或者您可以以root用户身份运行),对超过10天未访问文件进行操作,并且仅删除文件,而不删除文件夹。它还-delete用于避免执行rm命令


2
而不是创建时间(-ctime),您可能希望使用访问时间(-atime)代替-当然,仅在文件系统保留此信息时(检查/ etc / fstab中的noatime)
sfussenegger

7
好的,请忍受我,但是还有一件事:您只想搜索文件(-type f)。否则,您可能会发现目录树的父目录已经有一段时间没有被访问,并删除其所有可能仍在使用的内容。所以我建议的最终命令是sudo find /tmp -type f -atime +10 -delete
sfussenegger

2
@sfussenegger,也许您可​​以将您的评论提升为答案?我认为这比“隐藏”评论更好。
乔纳森

34

您可以假设可以删除tmp目录(/ tmp / / usr / tmp等)中的所有内容。在开始删除之前,请停止正在使用的所有程序和服务,因为/ tmp /可以被程序用来临时存储该会话的信息。所以,做一个sudo service mysql stopsudo service apache2 stop你有一个MySQL和/或运行Apache。大多数时候,/ tmp /目录中的文件名提供了它们所属程序的线索。

所以从命令行...

cd /tmp/
pwd
sudo rm -r *

将清空/ tmp /目录并删除所有文件和子目录。请小心正确输入。其中的命令pwd不是必需的,但应显示/tmp

如果您希望以交互方式进行操作(因此需要确认删除):

cd /tmp/
sudo rm -ri *

同样值得注意的是,重新启动后也会清除/ tmp,如下所示:/ tmp目录如何清理?因此,如果/ tmp /在重新启动后已充满文件,则需要调查这些文件的来源。

我还想指出/ tmp的1 Mb空间不多。您正在使用MySQL吗?有关如何解决此问题的信息,请参阅https://unix.stackexchange.com/a/76058/10017(感谢@drc)


2
对于上次重新启动之前的文件,“无任何损害”是正确的。否则,它可能会被当前程序使用,并且(对于该程序)可能会导致问题……例如,我有一些脚本会在/ tmp中创建文件,然后重新读取它们以进行下一步处理。在两者之间删除/截断它们将破坏程序的操作(甚至可能导致危险的结果,具体取决于这些文件的用途)
Olivier Dulac 2013年

...因此,使用who –b(最后一次引导的日期),然后创建一个日期为引导时间(touch ....... /boottime)的文件/ boottime ,将使用户可以安全地执行操作find /tmp -type f \( ! -newer /boottime \) -delete \;,仅删除早于最后一次引导的文件
Olivier Dulac

我可以使用这些评论来扩大答案吗?请注意:这里的/ tmp可能来自mysql。
Rinzwind

4
作为mktemp经常在我的脚本中使用的人,我非常不同意“没有任何伤害”的说法。
hytromo

2
如果/tmp包含比上次重新启动更早的内容,则启动脚本尚未完成其工作。
西蒙·里希特

10

tmpreaper程序可用于定期清理/ tmp。该程序将删除在给定时间内(通常是两周)未访问的所有内容。为了使其正常工作,其所在的文件系统应atimes启用该选项。如果您使用的是tmpfs,那么看起来应该很好。

当然,重新启动也会清除/ tmp,但这会很无聊。


令我惊讶的是,这不是Ubuntu和Debian中的标准选项。对于我来说,碰到相对没有特权的用户进程来填充/ tmp是相当普遍的。
圣人

1
是的,但这是系统管理员需要设置的策略。如果您有长期运行的服务,希望保留其数据,则任何默认值但“不清除”都将很危险。
西蒙·里希特

7

该目录/tmp是临时的。

该目录存储临时数据。您无需从其中删除任何内容,其中包含的数据在每次重新启动后都会自动删除。

仍然,如果您要删除其中存在的数据,请使用

sudo rm -r /tmp/*

从其中删除不会造成任何问题,因为它们是临时文件。


9
他们在这个意义上,他们没有重新启动后,需要暂时的,但这并不意味着他们没有必要现在或者他们将不再需要在5分钟
丹尼尔塞罗迪奥

5
这“不会造成任何问题”是不正确的。在了解得更多之前,我做过一次,基本上用软管把机器弄干净了。
凯尔·斯特兰德


4

在运行类似的命令之前要小心rm -r ./*。一旦运行它,将很难或不可能恢复任何数据。

所有将被删除。确保要删除的目录正确。

有一种更安全的处理方式。

# sudo rm -r /tmp/*

这样,当您不小心从shell内部运行此命令时history,它不会删除错误的文件(除非您将它们保留在中/tmp)。



1

如果您在Linux文件系统上安装的“ / tmp”安装为溢出(通常大小为1MB),则可能是由于您未将“ / tmp”指定为其自己的分区,并且您的根文件系统已满,并且“ / tmp”已被重新安装作为后备。要在清除空间后解决此问题,只需卸载后备,它应该在原始位置重新安装:

sudo umount overflow

如果设备忙于使用

sudo umount -l overflow
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.