shell编程tmpwatch

         作为系统管理员,很多时候需要定期清理一定规则的文件,比如过期的日志,过期的归档,已备份的文件等等。

        如果使用一定的匹配规则,找出这些文件,然后再传递给rm命令,其实是有点麻烦的,这时候可以试试tmpwatch。

        tmpwatch

作用:

       删除一定时间没有被访问的文件。

参数:

     -u  按照文件的最后access时间,即最后访问时间为参考。可通过ls -lu查看。

     -m  按照文件的最后modified时间,即最后修改时间为参考。可通过ls -l查看。

      -c   按照文件的-ctime时间做参考,ctime更新的条件为写入、更改属主、权限。可通过ls -lc查看。

      -x  /PATH  排除特定目录,即不删除该子目录里的文件。

      -U  user_name  排除属于特定用户的文件,即不删除该用户的文件。

      -v  显示删除过程。默认是不显示删除了什么文件,直接删除的。

      --t   用于测试,并不真正删除文件,能显示出要删除文件的过程。

      -d  不删除文件里的子目录,但是子目录里面的文件还是会被删除。

      -f   强制删除那些root没有写权限的文件。比如root的readonly文件

      参数后加时间,默认是hours。有些文章说可以使用20d表示20天,这个我也见过,但在rhel5.8中,只支持hours。应该需要看版本。

      时间后是要检查的目录。可以多个目录用空格分开。


     了解参数命令后,举一个典型的例子

        tmpwatch -m -x /tmp/ceshi1 -U oracle -v -t  2  /tmp

      以上这个命令删除/tmp目录下超过两个小时没有被更改过且不属于oracle用户的文件,排除/tmp/test1子目录下的文件。显示整个删除过程,只做测试,不整整删除。


linux系统会使用这个命令来定时清理/tmp目录。

下面看下rhel5.8里的/etc/cron.daily/tmpwatch文件。

[root@localhost tmp]# cat /etc/cron.daily/tmpwatch 
flags=-umc
/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
        -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
        -X '/tmp/hsperfdata_*' 240 /tmp
/usr/sbin/tmpwatch "$flags" 720 /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
        /usr/sbin/tmpwatch "$flags" -f 720 "$d"
    fi
done
[root@localhost tmp]# 

这就是清理规则。懂语法了可以自己学习下。

### 如何重新安装或配置 `tmpwatch` 系统服务 #### 卸载现有版本 为了确保干净的重装过程,建议先卸载现有的 `tmpwatch` 安装包: ```bash yum remove tmpwatch ``` 此命令会移除当前系统上的 `tmpwatch` 及其依赖项。 #### 更新软件源并重新安装 保持系统的软件仓库处于最新状态非常重要。可以通过以下命令完成更新操作: ```bash yum update -y ``` 接着,通过 YUM 包管理器再次安装 `tmpwatch`: ```bash yum install tmpwatch -y ``` 上述命令将会下载最新的稳定版 `tmpwatch` 并将其部署到操作系统中[^1]。 #### 配置 `tmpwatch` 默认情况下,`tmpwatch` 的行为由 `/etc/cron.daily/tmpwatch` 脚本定义。可以根据需求编辑该文件调整清理策略。例如设置不同路径下文件的老化周期,像 `/tmp` 中保留最近 10 天内有活动的文件而 `/var` 则放宽至 30 天[^2]。 对于更复杂的场景,则可能需要创建自定义配置文件来精确控制哪些位置应该被监控以及具体的时间阈值是多少。通常这些额外参数会被传递给实际调用 `tmpwatch` 的命令行里。 #### 设置定时任务 为了让 `tmpwatch` 自动运行,可考虑把它加入到计划任务列表当中去。打开 crontab 编辑界面: ```bash crontab -e ``` 向其中添加一行用于每天凌晨两点执行一次临时文件夹整理工作: ```bash 0 2 * * * /usr/sbin/tmpwatch -am 720 /tmp ; /usr/sbin/tmpwatch -am 8640 /var ``` 这里 `-a` 参数表示同时检查访问时间和更改时间;`-m` 表示仅当文件既未被读也未写入时才予以删除;后面跟着的是小时数形式的最大闲置期限制,分别对应于上面提到的不同目录下的有效期。 #### 启用开机启动 (如果适用) 某些发行版可能会提供专门的服务单元文件以便让 `tmpwatch` 在每次重启之后都能正常运作。如果是这种情况的话,记得启用相应的 service unit 来保证这一点: ```bash systemctl enable tmpwatch.service ``` 不过请注意,并不是所有的 Linux 发行版都会预设这样的机制,因此这一步骤取决于具体的环境配置情况[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值