防止删除 /tmp 中的目录

防止删除 /tmp 中的目录

我经常使用/tmpLinux 机器上的目录来存储临时文件(例如,来自希望我先下载的网站的 PDF 等),并且我经常使用我的用户名创建一个目录。但每次启动时它(包括所有文件)都会被删除。现在我知道我可以将其放入 中/var/tmp,但我希望删除其所有内容,但保留目录本身。所以:

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

有什么办法可以做到这一点吗?也许有权限或有特殊配置?

答案1

我用pam-tmpdir为此:它在登录时创建一个用户私有的临时目录。要进行设置,请添加

session optional pam_tmpdir.so

到适当的 PAM 服务;在基于 Debian 的系统上,安装libpam-tmpdir软件包将为您执行此操作,或者您可以将该行添加到/etc/pam.d/common-session.下次登录时,您将在下面找到一个/tmp/user包含您的用户 ID 的目录,并TMP进行TMPDIR适当的设置。

答案2

一种解决方案是使用@rebootcron 作业:

@reboot mkdir -p "/tmp/$USER"

将其添加到您的 crontab 中将crontab -e使其在机器启动时执行。

或者,使用

mkdir -p "/tmp/$USER"

在 shell 的启动文件中。

无论哪种情况,您可能还想使用

TMPDIR=/tmp/$USER
export TMPDIR

如果您想使用该目录作为默认临时目录,请在 shell 的启动文件中添加该目录。

答案3

如果您没有运行带有 systemd 的系统,并且它使用 systemd-tmpfiles 来管理清理,那么您应该使用该系统配置目录。

这是一个完整的文档。您可以通过/etc/tmpfiles.d/something.conf使用以下内容进行创建来实现您想要的目标:

d     /tmp/your_username   0750 your_user your_group  - -

答案4

正如评论中指出的,/tmp适用于暂时性的文件,如果删除它们也不会丢失。如果你正在做某事并且机器重新启动,你在那里写入的任何内容都会消失,你将不得不重新开始,这意味着这些文件可能毕竟不是那么临时。

多年来,我在我的主目录中维护了一个临时目录,当时一千兆字节已经是很大的空间了,我发现它需要定期清理来删除已经变得陈旧和粗糙的文件。大多数时候,该过程之后剩下的内容不到几周,所以我现在使用每天运行一次的 cron 作业来清理它:

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

我下载或创建的任何半临时内容都会到达那里,系统会清理我留下的任何内容。任何需要永久居所的东西早在 cron 作业将其清除之前就得到了一个。

相关内容