Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
TMPREAPER(8)		     System Manager's Manual		    TMPREAPER(8)

NAME
     tmpreaper - removes files which haven't been accessed for a period of time

SYNOPSIS
     tmpreaper	[-htvfmMsaT] [--help] [--test] [--verbose] [--force] [--delay=x]
     [--runtime=x] [--showdeleted]  [--ctime]  [--mtime]  [--mtime-dir]  [--sym-
     links] [--all] [[--protect '<shell_pattern>']...]	<time_spec> <dirs>...

DESCRIPTION
     tmpreaper	recursively searches for and removes files and empty directories
     which haven't been accessed for a given number of seconds.  Normally,  it's
     used  to  clean  up directories which are used for temporary holding space,
     such as "/tmp".  Please read the WARNINGS section of this manual.

     When changing directories, tmpreaper is very  sensitive  to  possible  race
     condition	security  exploits[1], and will exit with an error if one is de-
     tected.  It does not follow symbolic links in the directories it's cleaning
     (even if a  symbolic  link  is  given  as	its  argument),  never	performs
     chdir(".."),  will not switch file systems, and only removes empty directo-
     ries and regular files. Unless your machine is one with lots of  relatively
     untrusted	users,	such  as  an ISP or school, you don't need this program;
     `find ... -exec rm ...' works just as well when you don't have to	be  con-
     cerned about people trying to exploit the race condition on you.

     tmpreaper	will  stop  itself  after  almost one minute with an appropriate
     warning message, as attempts to keep it running long enough so that it runs
     in parallel with another instance of itself may also lead to possible  vul-
     nerabilities.  Normally, tmpreaper won't need that amount of time.  If your
     system is so slow that it does,  try  to  configure  things  so  that  this
     doesn't happen. As a last resort, the --runtime=x option can be used to set
     the  number  of seconds after which the timeout occurs; the default setting
     is 55 seconds.

     tmpreaper dates files by their atime, not their mtime,  unless  you  select
     the  --mtime option.  If files aren't being removed when ls -l implies they
     should be, use stat(1) or ls --time=access to examine the file's atime  and
     see if that helps to explain the problem.

     Additionally,  tmpreaper  can  be instructed to also check the ctime (inode
     change time, which is updated e.g. when the file is created or  permissions
     are  changed).  This is primarily useful when tmpreaper is used to clean up
     directories that are accessible as a Samba share;	DOS  (and  Windows)  PCs
     preserve the mtime and the atime when copying to a new file, so that it ap-
     pears that the newly created file is old.	tmpreaper will remove such files
     if  the  atime  is beyond the removal time, even though they were just cre-
     ated. This is avoided by using the --ctime option.

     As testing the contents of subdirectories will  update  those  directories'
     atime,  empty  directories won't be removed. To circumvent this problem you
     can use the --mtime-dir option, which will switch on mtime checking for di-
     rectories only. Using --mtime-dir in addition to --mtime  doesn't	do  any-
     thing useful.

     The  <time_spec> parameter defines the age threshold for removing files. If
     the file has not been accessed for <time_spec>, it becomes eligible for re-
     moval.  The <time_spec> should be a number, defaulting to hours, optionally
     suffixed by one character: `d' for days, `h' for hours, `m' for minutes, or
     `s' for seconds.  Following the time option, one or more  directories  must
     be given for tmpreaper to clean up.

     On linux ext2/ext3/ext4 filesystems, no errors will be given when trying to
     remove  files marked as immutable. A common situation for this was the ext3
     .journal file. However, there may of course be other files marked	as  such
     by the system administrator.

OPTIONS
     <noargs>, -h, --help
	    Print  a  brief  version,  copyright, and usage statement on stderr,
	    then exit with error status 1.

     -t, --test
	    Don't actually remove any files, but go through the motions,  check-
	    ing  through  the  directory,  then  pretend  to remove the eligible
	    files.

     -v, --verbose
	    Print a verbose display. Two levels of verbosity are available---use
	    this option twice to get the most verbose output.  The --test option
	    automaticly sets --verbose once.
	    Higher numbers mean more output (max. is 3).
	    To force normal verbosity after  --test,  use  "--verbose=0".   This
	    will  generally  only  show  error messages. Use "--test --verbose=0
	    --showdeleted" to give a shellscript-like list of actions that would
	    have been done (see the --showdeleted description below).

     --showdeleted
	    Show what files and directories are deleted. The output  is  in  the
	    form   of  shell  commands,  i.e.  "rm  /dir/dir2/file"  and  "rmdir
	    /dir/dir2".
	    When used together with --test, this option  will  still  cause  the
	    "shell  commands"  to  be  printed, although nothing is really done.
	    Note that this may show more than without --test, as problems remov-
	    ing the file won't be detected (e.g. immutable files).

     -f, --force
	    Remove files even if EUID doesn't have write access (akin to rm -f).
	    Normally, files owned by the current EUID, with no write bit set are
	    not removed.

     --delay=x
	    Delay execution at the start for a random time, up to x seconds;  if
	    no value is specified, the default maximum time to delay is 256 sec-
	    onds.   This  is an option useful in cron scripts to make the execu-
	    tion of tmpreaper less predictable,  thus  making  things  a  little
	    harder  for those who would attempt to use tmpreaper to thwart secu-
	    rity.

     -T x, --runtime=x
	    Execution of tmpreaper will aborted after x seconds; this is to pre-
	    vent attacks that create many, many files.	By default  the  timeout
	    is set to 55 seconds.  A value of 0 will disable this feature, which
	    is not advised as this feature prevents possible race-conditions be-
	    tween different instances of tmpreaper.

     -m, --mtime
	    Base the decision of whether to remove the file on its mtime, rather
	    than on its atime.

     -M, --mtime-dir
	    Base  the  decision of whether to remove the directory on its mtime,
	    rather than on its atime.

     -c, --ctime
	    Base the decision of whether to remove the file on its ctime, in ad-
	    dition to its atime.  Only applicable if the --mtime options is  not
	    given!

     -s, --symlinks
	    Remove symlinks too, not just regular files and directories.

     -a, --all
	    Remove  all file types, not just regular files, symlinks, and direc-
	    tories.

     --protect '<shell_pattern>'
	    Protect the files that  match  the	<shell_pattern>  from  deletion.
	    This option may be used more than once.  It has no one letter abbre-
	    viation, you must spell out the full word "protect".

	    If	you  do  not  enclose  the <shell_pattern> in single quotes, the
	    shell will perform the expansion before tmpreaper reads its argument
	    array.  The program does not support that syntax, so  you  must  use
	    single quotes around the glob pattern.

	    tmpreaper  will  chdir(2) into each of the directories you've speci-
	    fied for cleanup, and check for files matching  the  <shell_pattern>
	    there.  It then builds a list of them, and uses that to protect them
	    from removal.  For example:

	    tmpreaper --test --verbose --protect \
	     '.X*-{lock,unix,unix/*}' --protect '.ICE-{unix{/*,}}' \
	     5d /tmp  # 5 day grace period

TIPS
     As  long as there are files present inside a subdirectory, it won't get re-
     moved.  You can use a non-writable, self-owned file,  perhaps  named  ".tm-
     preaper", or, if you are su, a file that has the ext2fs immutable attribute
     set,  to keep a subdirectory from being deleted.  Of course, you could just
     as easily use use the --protect option to obtain the same result.

     Because the command  line	argument  processing  is  implemented  with  GNU
     getopt_long(3)[2], you may order the arguments thusly, if it pleases you:

     tmpreaper --test --verbose 5h \
      --protect './tmp/{blah?,dir{/blah4,}}' ./tmp \
      --protect '/tmp/.X*' /tmp

      ...  Note that if you use --all or --symlinks, it will have global effect.
     If you only want it turned on for one directory, you must use separate com-
     mands.

WARNINGS
     Please do not ever run tmpreaper on `/'!!! There are no safeguards  against
     this built into the program, because that would make it difficult to use in
     a chrooted environment.

SEE ALSO
     chattr(1)	chdir(2)  chroot(8) cron(1) getopt_long(3) ls(1) lsattr(1) rm(1)
     stat(1)

     [1]  http://seclists.org/lists/bugtraq/1996/May/0046.html or
	  http://www.security-express.com/archives/bugtraq/1996_2/0054.html

	  http://linuxgazette.net/18/tmp.html
	  (formerly http://www.linuxgazette.com/issue18/tmp.html)

	  http://linuxgazette.net/20/followup.html

     [2] info:(libc)Long Options

AUTHOR
	 Karl M. Hegbloom <karlheg@debian.org>

     Mostly based on `tmpwatch-1.2/1.4', by:
	 Erik Troan <ewt@redhat.com>

     Now being maintained for Debian by:
	 Paul Slootman <paul@debian.org>

4th Berkeley Distribution	 Sat Jan  5 2019		    TMPREAPER(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=tmpreaper&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help