我经常使用/tmp
Linux 机器上的目录来存储临时文件(例如,来自希望我先下载的网站的 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
一种解决方案是使用@reboot
cron 作业:
@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 作业将其清除之前就得到了一个。