Linux上删除给定时间内没有被访问的文件

时间:2020-03-21 11:43:20  来源:igfitidea点击:

"TMPPWATCH",命令行实用程序递归删除尚未访问过时的文件。
不仅仅是文件,TMPWATCT也将删除空目录。

默认情况下,TMPPTOPT将根据其ATIMe(访问时间)决定应删除哪些文件/目录。
当然,我们也可以通过使用CTIME(INODE CHANX TIME),MIFY(修改时间)值来更改此行为。
通常,TMPWatch可用于删除/TMP目录的内容和其他未使用/不需要的内容,如旧日志文件。

一个重要的警告!!

在开始使用此工具之前,我们必须知道TMPWatch将根据给定的标准递归递归删除文件和目录。
不要在/(根目录)中运行TMPPTOPT。
此目录包含要保留Linux系统运行所需的重要文件。
如果我们不够小心,TMPWatch将删除与整个根目录中给定条件匹配的重要系统文件和目录。
TMPWATCH工具中没有内置保护机制,以防止我们在根目录上运行它。
因此,无法撤消操作。

在Linux上安装tmpwatch

tmpwatch可在大多数Linux发行版的默认存储库中提供。

在Fedora上,我们可以使用命令安装它:

$sudo dnf install tmpwatch

在CentOS上:

$sudo yum install tmpwatch

OpenSUSE:

$sudo zypper install tmpwatch

在Debian及其衍生物等ubuntu等,Tmpwatch以不同的名称提供:Tmpreaper。
Tmpreaper主要基于Redhat的Erik Trois的"TMPWatch-1.2/1.4"。
现在,由Paul Slootman为Debian维护Tmpreaper。

要在Debian,Ubuntu,Linux Mint上安装Tmpreaper,请运行:

$sudo apt install tmpreaper

使用TMPWATCT/TMPREAPER删除未访问给定时间的文件

TMPPTAPT和TMPREAL的使用几乎是相同的。
如果我们在基于Debian的系统上,请在以下示例中替换"TMPTAPT"。

删除未访问的文件超过x天

要删除超过10天的文件,请运行:

tmpwatch 10d /var/log/

上面的命令将删除所有文件和空目录,从/var/log /文件夹中未访问超过10天。

删除未修改的文件超过x天

就像我已经说过,TMPWatch将根据他们的访问时间删除文件。
我们还可以使用-m选项根据其修改时间(mtime)删除文件。

例如,以下命令将删除/var/log /文件夹中10天未修改的文件。

tmpwatch -m 10d /var/log/

其中-m是指修改时间,d是<time_spec>参数。
<time_spec>参数定义删除文件的年龄阈值。
我们可以使用以下time_spec参数来删除文件。

  • D - 几天,
  • h - 几小时,
  • m - 分钟,
  • s - 秒。

几小时是默认值。

例如,要删除过去10小时内未修改的文件,只需运行:

tmpwatch -m 10 /var/log/

我们可能已经注意到,我在上面的命令中没有使用time_spec参数。
因为,h(几个小时)是默认参数,所以我们在删除尚未修改的文件时不必提及尚未修改的文件。

删除Symlinks.

如果要删除符号链接,而不仅仅是常规文件和目录,请使用下面使用-s选项。

tmpwatch -s 10 /var/log/

删除所有文件

要删除所有文件类型,而不仅仅是常规文件,符号链接和目录,请使用-a选项。

tmpwatch -a 10 /var/log/

上述命令将删除/var/log /文件夹中的所有类型的文件,包括常规文件,符号链接和目录。

排除删除的目录

有时,我们可能希望删除文件,但不是目录。
如果是这样,命令将是:

tmpwatch -am 10 --nodirs /var/log/

上面的命令将删除除了过去10小时内未修改的目录之外的所有文件。

执行测试运行,无实际删除任何内容

有时,我们可能需要查看实际删除哪些文件。
在一个重要目录上运行tmpwatch时,这将会有所帮助。
如果是这样,请使用-t选项运行TMPPT.

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将简单地执行干燥运行并显示输出中将删除哪些文件。

强制文件删除

如果要强制删除文件,请使用-f选项。

tmpwatch -f 10h /var/log/

通常,不删除由当前用户拥有的文件,没有写访问。
-f选项也将删除它们。

删除某些文件

Tmpreaper可以选择删除文件。
当我们希望保留某些类型的文件并删除其他所有文件时,这将是有用的。
如果是这样,请使用--Protect选项如下。

tmpreaper --protect '*.txt' -t 10h /var/log/

此命令将跳过从删除中具有.txt扩展的所有文件

示例输出:

(PID 2623) Pretending to clean up directory `/var/log/'.
(PID 2624) 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 2624) Back from recursing down `apache2'.
(PID 2624) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 2624) Back from recursing down `dbconfig-common'.
(PID 2624) Pretending to clean up directory `dist-upgrade'.
(PID 2624) Back from recursing down `dist-upgrade'.
Pretending to remove empty directory `dist-upgrade'.
Entry matching `--protect' pattern skipped. `theitroad.txt'
(PID 2624) Pretending to clean up directory `lxd'.

如我们所见,Tmpreaper删除* .txt文件。

顺便说一下,此选项不可用TMPP.

设置Cron作业以定期删除文件

我们可能不想一直在手动运行TMPWATCH/TMPREALER。
在这种情况下,我们可以设置CRON作业以自动化干净的过程。

安装tmpreaper时,它将创建每日Cron作业(/etc/cron.daily/tmpreaper)。
此作业将从/etc/timerealper.conf文件中读取选项并相应行动。
打开文件并根据要求更改值。
默认情况下,TMPREAPER将删除更旧的文件7天。
但是,我们可以通过在TMPREAPER.conf文件中修改值"tmpreaper_time = 7d"来更改此内容。

如果使用"tmpwatch",则需要手动创建Cron作业并将Cron条目放入其中。

# crontab -e

添加以下行:

0 1 * * * /usr/sbin/tmpwatch 30d /var/log/

根据上面的Cron作业,TMPWatch将在凌晨1点运行,并删除较旧的30天的文件。