cvs commit: src/etc/rc.d cleartmp

Yar Tikhiy yar at
Tue Oct 17 17:31:39 UTC 2006

On Mon, Oct 16, 2006 at 01:01:45PM +0000, Yar Tikhiy wrote:
> yar         2006-10-16 13:01:45 UTC
>   FreeBSD src repository
>   Modified files:
>     etc/rc.d             cleartmp 
>   Log:
>   Improve cleartmp in a number of aspects:
>   + Use rc.subr(8) features properly.
>   + Do the whole job of obliterating /tmp contents in find(1).
>   + Leave lost+found and quota.{user,group} in /tmp only if root-owned.
>   + Make the overall structure clearer by first removing the X dirs
>     (perhaps along with the rest of /tmp) and then re-creating them.
>   + Use "find -exec rm -rf {} +" for efficiency: each rm instance gets
>     a chance to kill as much files in /tmp as ARG_MAX permits.

I was asked a few times why "-prune -exec rm -rf" had been chosen
over "-delete".  My initial reason was that -delete would keep
bogus lost+found and quota.{user,group} entries found in subdirs
of /tmp.  Well, on second thought, the find command line can be
tweaked so that -delete works as wanted.  E.g.:

                cd /tmp && find -x . ! -name . \
                    ! \( -path ./lost+found -type d -user root \) \
                    ! \( \( -path ./quota.user -or -path ./ \) \
                        -type f -user root \) \

Note using -path in place of -name.

However, it has recently been found that our fts(3) implementation
is unable to handle very deep trees -- see PR bin/104458.  While
the bug hits both rm and find, rm has a better chance to recover
from it and gain the ability to remove virtually unlimited trees
while find is doomed to retain much more inherent limitations due
to its complex nature.  Therefore I'm inclined to keep "-prune
-exec rm -rf" as a more robust approach, at least potentially.
So find has only to skim over /tmp while descending to its deeps
is left to rm.

>   PR:             bin/104044
>   Submitted by:   Andrey Simonenko <see PR for email>
>   Hacked by:      yar
>   MFC after:      1 month
>   Revision  Changes    Path
>   1.18      +37 -36    src/etc/rc.d/cleartmp


More information about the cvs-src mailing list