本文介绍在Linux操作系统上删除在给定时间内未访问的文件,要达到这个目的,可以安装和使用Tmpwatch/Tmpreaper,这是一个命令行实用程序,用于递归删除在给定时间内未访问过的文件,不仅仅是文件,tmpwatch也会删除空目录。默认情况下,Tmpwatch将根据其atime(访问时间)决定应删除哪些文件/目录,当然,你也可以通过使用ctime(inode更改时间),mtime(修改时间)值来更改此行为,通常,Tmpwatch可用于删除/tmp目录和其他未使用的东西(如旧日志文件)的内容。
一个重要的警告 在开始使用此工具之前,你必须知道Tmpwatch将根据给定的条件递归删除文件和目录,不要在/(根目录)中运行tmpwatch,此目录包含保持Linux系统运行所需的重要文件,如果你不小心,tmpwatch将删除与整个根目录中的给定条件匹配的重要系统文件和目录,Tmpwatch工具中没有内置的安全保护机制,可以防止你在根目录下运行它,因此,无法撤消操作。
安装Tmpwatch Tmpwatch可在大多数Linux发行版的默认存储库中使用。 在Fedora上,你可以使用以下命令安装它: $ sudo dnf install tmpwatch 参考:dnf命令_Linux dnf命令使用详解:新一代的RPM软件包管理器。 在CentOS上: $ sudo yum install tmpwatch 在openSUSE上: $ sudo zypper install tmpwatch 在Debian及其衍生产品(如Ubuntu)上,Tmpwatch有不同的名称,即Tmpreaper,Tmpreaper主要基于Redhat的Erik Troan的“tmpwatch-1.2/1.4”,现在,Paul Slootman正在为Debian维护tmpreaper。 要在Debian、Ubuntu,Linux Mint上安装tmpreaper,请运行: $ sudo apt install tmpreaper
使用Tmpwatch/Tmpreaper删除在给定时间内未访问的文件 Tmpwatch和Tmpreaper的用法几乎相同,如果你使用的是基于Debian的系统,请在以下示例中将“Tmpwatch”替换为“Tmpreaper”。 1、删除超过X天未访问的文件 要删除超过10天的文件,请运行: tmpwatch 10d /var/log/ 上面的命令将删除/var/log/文件夹中未访问超过10天的所有文件和空目录。 2、删除未修改超过X天的文件 就像我已经说过的,Tmpwatch将根据访问时间删除文件,你还可以根据修改时间(mtime)删除文件,例如,以下命令将删除在给定路径中未修改10天的文件: tmpwatch -m 10d /var/log/ 这里,-m表示修改时间,d是<time_spec>参数,<time_spec>参数定义删除文件的年龄阈值,你可以使用以下time_spec参数来删除文件: 1]、d:天。 2]、h:几个小时。 3]、m:分钟。 4]、s:秒。 注:Hours是默认值。 例如,要删除过去10小时内未修改的文件,只需运行: tmpwatch -m 10 /var/log/ 3、删除符号链接 如果要删除符号链接,而不仅仅是常规文件和目录,请使用-s选项: tmpwatch -s 10 /var/log/ 4、删除所有文件 要删除所有文件类型,而不仅仅是常规文件,符号链接和目录,请使用-a选项: tmpwatch -a 10 /var/log/ 上面的命令将删除/var/log/文件夹中的所有类型的文件,包括常规文件,符号链接和目录。 5、从删除中排除目录 有时,你可能希望删除文件,但不删除目录,如果是这样,命令将是: tmpwatch -am 10 --nodirs /var/log/ 上述命令将删除除过去10小时未修改的目录之外的所有文件。 6、执行测试运行而不实际删除任何内容 有时,你可能希望查看实际将要删除的文件,在重要目录上运行Tmpwatch时,这将非常有用,如果是这样,请在测试模式下使用-t选项运行Tmpwatch: tmpwatch -t 30 /var/log/ CentOS 7服务器的示例输出: removing file /var/log/wtmp removing directory /var/log/ppp if empty removing directory /var/log/tuned if empty removing directory /var/log/anaconda if empty removing file /var/log/dmesg.old removing file /var/log/boot.log removing file /var/log/dnf.librepo.log 在基于Debian的系统上,你将看到如下输出: $ tmpreaper -t 30 /var/log/ (PID 1803) Pretending to clean up directory `/var/log/'. (PID 1804) Pretending to clean up directory `apache2'. Pretending to remove file `apache2/error.log'. Pretending to remove file `apache2/access.log'. Pretending to remove file `apache2/other_vhosts_access.log'. (PID 1804) Back from recursing down `apache2'. (PID 1804) Pretending to clean up directory `dbconfig-common'. Pretending to remove file `dbconfig-common/dbc.log'. (PID 1804) Back from recursing down `dbconfig-common'. (PID 1804) Pretending to clean up directory `dist-upgrade'. (PID 1804) Back from recursing down `dist-upgrade'. (PID 1804) Pretending to clean up directory `lxd'. (PID 1804) Back from recursing down `lxd'. Pretending to remove file `/var/log//cloud-init.log'. (PID 1804) Pretending to clean up directory `landscape'. Pretending to remove file `landscape/sysinfo.log'. (PID 1804) Back from recursing down `landscape'. 这只会模拟操作,但实际上不会删除任何内容,Tmpwatch将执行干运行并显示将在输出中删除哪些文件。 7、强制文件删除 如果要强制删除文件,请使用-f选项: tmpwatch -f 10h /var/log/ 通常,不删除当前用户拥有的文件,没有写访问权限,-f选项也会删除它们。 再次,请在使用Tmpwatch/Tmpreaper命令时小心,在运行之前仔细检查路径以避免数据丢失。
帮助使用的命令 有关更多详细信息,请参阅手册页,运行以下命令: $ man tmpwatch 或者: $ man tmpreaper
相关主题 |