防止删除/ tmp中的目录


10

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

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

有什么办法吗?也许具有权限或特殊配置?


1
解决方法是,您可以根据需要将一些代码放入Shell的登录文件中,以“ test&mkdir”。
Jeff Schaller

3
/tmp可能是一个tmpfs文件系统。这些文件并没有真正删除。它们只是存储在RAM中,并在重新启动后丢失。这就是为什么您得到的答案归结为“在启动或登录时重新创建”的
原因-MSalters

Answers:


4

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

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

将此添加到您的crontab crontab -e中将使它在计算机启动时执行。

或者,使用

mkdir -p "/tmp/$USER"

在Shell的启动文件中。

无论哪种情况,您都可能要使用

TMPDIR=/tmp/$USER
export TMPDIR

如果要使用该目录作为默认临时目录,请在外壳程序的启动文件中输入。


这是否会a)为所有用户创建目录,并且b)也会从“冷”启动中触发?
Linux4win

1
@ Linux4win此答案满足单个用户的需求,因为这是您对问题的措辞。机器的启动方式(热,冷或温热)无关紧要,但是从休眠状态恢复时它不会触发(因为它没有启动)。
Kusalananda

由于某种原因,添加@reboot mkdir -p "/tmp/$USER"到crontab的末尾不会执行任何操作,而在运行时mkdir -p "/tmp/$USER"实际上会创建目录。顺便说一句,第二个命令对我不起作用,因为我需要/tmp通过其他程序访问我的命令,并且每次启动外壳都有点烦人……
Linux4win

@ Linux4win @rebootcron作业没有创建目录吗?您是否收到cron守护程序发送的任何电子邮件以及任何错误消息?
Kusalananda

好吧,不...也许是因为我没有配置mail?还是不需要?
Linux4win

14

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

session optional pam_tmpdir.so

适当的PAM服务;在基于Debian的系统上,安装libpam-tmpdir软件包将为您完成此操作,或者您可以将行添加到/etc/pam.d/common-session。下一次登录时,你会发现下一个目录/tmp/user与您的用户ID,并TMPTMPDIR适当设置。


7
您能解释一下什么是合适的PAM服务,以及如何将线路添加到它们中吗?应该编辑哪些文件?
terdon

2

如果您没有在使用systemd的系统上运行,而是使用systemd-tmpfiles来管理清理,那么您应该使用该系统配置目录。

这是完整的文档。您可以通过创建/etc/tmpfiles.d/something.conf类似以下内容来实现所需的目标:

d     /tmp/your_username   0750 your_user your_group  - -

1

如注释中所指出的,/tmp是针对临时文件,如果删除它们将不会丢失。如果您正中间,并且计算机重新启动,则在那里写的所有内容都会消失,而您必须重新开始,这意味着那些文件可能毕竟不是那么临时。

从数GB的巨大空间开始,我就在我的主目录中维护了一个临时目录多年,并发现它需要定期整理才能清除已旧又笨拙的文件。在此过程之后,大部分时间我剩下的时间不到几周,所以我现在使用每天运行一次的Cron作业来清理它:

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

我半临时下载或创建的所有内容都会被清除,系统会清理掉我留下的所有内容。需要永久性住所的任何物品都将在cron工作摆脱它之前很长一段时间。


mkdir a a/b; touch a/b/c。现在等到30天到期。删除时,c它会更新b,这意味着它必须再等待30天。与a删除时一样b。其次,如果您在30天之内b未创建文件,但aa目录将被打中rm -rf并清除下的最新文件b
roaima

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/null为我工作
roaima
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.