这个问题是关于我的开发人员笔记本电脑上的 Ubuntu 14.10。
我有一个文件夹,/tmp
应用程序用它来存放临时文件。此应用程序通常会在我的主目录中创建一个临时文件夹,然后将其删除。由于某种原因,当主目录加密时,这种方法不起作用。因此,我创建了一个指向/tmp/foo
主目录内部的符号链接。我的应用程序可以在那里写入并创建它的临时子文件夹。
/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
我想要添加一个条件,使其删除 里面的所有内容/tmp/foo
,但不删除/tmp/foo
其本身。我该怎么做?
答案1
/etc/init/mounted-tmp.conf
是软件包的一部分mountall
,因此该软件包上的任何更新和建议的更改都将被恢复。
$ sudo dpkg -S /etc/init/mounted-tmp.conf
mountall: /etc/init/mounted-tmp.conf
相反,根据文件系统层次标准 (FHS);
关于/tmp:
程序不能假设 /tmp 中的任何文件或目录在程序调用之间都会被保留。
关于/var/tmp:
/var/tmp 目录可供需要在系统重启之间保留的临时文件或目录的程序使用。因此,存储在 /var/tmp 中的数据比存储在 /tmp 中的数据更持久。
因此您应该将符号链接改为使用/var/tmp
而不是/tmp
。
答案2
严格来说,这不是对你问题的回答,但你可能会发现/var/tmp
这是一个更合适的位置,因为它不会在重启后被清理。它是为临时文件设计的,这些文件不应在短时间后自动丢弃。
不过,我经常做的是在 /opt 下创建一个文件夹,用于存储我不想放在家里的随机物品。这是一个适合放置主操作系统无法控制的东西的地方。
答案3
就像这样:
EXCEPT='! -name .
...
! ( -path "./foo" )'
# Remove all old files, then all empty directories
...
find /tmp/foo/* -depth -xdev $TEXPR -delete
例子:
$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$
我确实同意用户 aap 的观点:您要么在使用的软件中处理这个问题,如果它们是 tmp 文件则重新创建目录,要么使用另一个目录(如果它们不是未被清除的 tmp 文件)。
答案4
运行这个:
echo "if [ ! -e /etc/foo/ ]; then mkdir /etc/foo/; fi; rm -rf /etc/foo/*" > /bin/foodel; sudo chmod 755 /bin/foodel
然后将其添加到/etc/inittab中,请参见:inittab 文件在哪里?:
foo:2345:boot:/bin/foodel
如果 /etc/foo 不存在,它将在启动时创建它,然后清空它。
这将在 bash 登录时执行相同的操作:
echo "/bin/foodel" >> ~/.bashrc