如何防止 /tmp 中的文件夹被清理?

sim*_*que 13 bash find 14.10

这个问题是关于我的开发人员笔记本电脑上的 Ubuntu 14.10。

我有一个文件夹,/tmp应用程序使用该文件夹将临时内容放入其中。此应用程序通常在我的 homedir 中创建一个临时文件夹,然后将其删除。由于某种原因,当 homedir 被加密时这不起作用。因此,我/tmp/foo在 homedir 中创建了一个符号链接。我的应用程序可以在那里写入并使其成为临时子文件夹。

现在/tmp/foo每次我重新启动机器时都会被删除。到目前为止,我只是在重新启动后手动重新创建了该文件夹。现在我在/tmp 目录如何清理?有工作要做。

我已经看过了,/etc/init/mounted-tmp.conf但是我的 bashfu,尤其是我的 findfu 不足以做我想做的事。这是该文件的摘录:

   EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

   # Remove all old files, then all empty directories
   find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
   find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete
Run Code Online (Sandbox Code Playgroud)

我想要做的是添加一个条件,使其删除里面的所有内容/tmp/foo,而不是/tmp/foo它本身。我怎么做?

mgo*_*gor 20

/etc/init/mounted-tmp.confmountall包的一部分,因此该包的任何更新和建议的更改都将被还原。

$ sudo dpkg -S /etc/init/mounted-tmp.conf 
mountall: /etc/init/mounted-tmp.conf
Run Code Online (Sandbox Code Playgroud)

相反,根据文件系统层次结构标准(FHS)

关于/tmp

程序不得假定 /tmp 中的任何文件或目录在程序调用之间都保留了下来。

关于/var/tmp

/var/tmp 目录可用于需要在系统重新引导之间保留的临时文件或目录的程序。因此,存储在 /var/tmp 中的数据比 /tmp 中的数据更持久。

因此,您应该更改符号链接以使用/var/tmp而不是/tmp.

  • [当你只有一把锤子时......](https://en.wiktionary.org/wiki/if_all_you_have_is_a_hammer,_everything_looks_like_a_nail) - `如果一个人熟悉......某种特定的单一乐器,他们可能有一个确认偏见相信它是所有事情的答案/涉及所有事情。`我是说 OP 正在将 /tmp 用于它不应该用于的东西 - 使用 /tmp 作为他保留 tmp 问题的锤子-但不完全是 tmp 的东西。/var/tmp 意味着在重新启动之间保持,所以它是正确的答案。 (6认同)
  • 当你有锤子时,一切看起来都像钉子的经典例子。 (4认同)

And*_*ett 8

严格来说不是您问题的答案,但您可能会发现/var/tmp这是一个更合适的位置,因为它不会在重新启动后得到清理。它专为在短时间内不应自动丢弃的临时文件而设计。

然而,我经常做的是在 /opt 下为自己创建一个文件夹来存储我不想要在家中的随机东西。这是放置主操作系统控制之外的东西的合适位置。


Rin*_*ind 6

像这样:

EXCEPT='! -name .
            ...
            ! ( -path "./foo" )'

   # Remove all old files, then all empty directories
   ...
   find /tmp/foo/* -depth -xdev $TEXPR -delete
Run Code Online (Sandbox Code Playgroud)

例子:

$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$
Run Code Online (Sandbox Code Playgroud)

我确实同意用户 aap:如果它们是 tmp 文件,您应该在使用的软件中通过重新创建目录来解决这个问题,或者如果它们不是未清除的 tmp 文件,则使用另一个目录。