Linux上删除给定时间内没有被访问的文件
"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天的文件。