linux查询指定日期的文件并删除
1.需求按时间删除 kafka 产生的日志2.查看 /tmp/kafka-logs目录cd /tmp/kafka-logsls3.使用find命令按时间筛选find 参数说明-amin -n: 最后一次访问发生在 n分钟 之内-amin n:最后一次访问发生在距离当前时间 n分钟 至 (n+1)分钟-amin +n: 最后一次访问发生在 (n+1)分钟 之外-atime -n: 最后一次访问发生在
·
1.需求
按时间删除 kafka 产生的日志
2.查看 /tmp/kafka-logs目录
cd /tmp/kafka-logs
ls
3.使用find命令按时间筛选
find 参数说明
-amin -n: 最后一次访问发生在 n分钟 之内
-amin n: 最后一次访问发生在距离当前时间 n分钟 至 (n+1)分钟
-amin +n: 最后一次访问发生在 (n+1)分钟 之外
-atime -n: 最后一次访问发生在 n天 之内
-atime n: 最后一次访问发生在 n天 至 (n+1)天
-atime +n: 最后一次访问发生在 (n+1)天 之外
-cmin -n: 最后一次文件状态修改发生在 n分钟 之内
-cmin n: 最后一次文件状态修改发生在 n分钟 至 (n+1)分钟
-cmin +n: 最后一次文件状态修改发生在 (n+1)分钟 之外
-ctime -n: 最后一次文件状态修改发生在 n天 之内
-ctime n: 最后一次文件状态修改发生在 n天 至 (n+1) 天
-ctime +n: 最后一次文件状态修改发生在 (n+1)天 之外
-mmin -n: 最后一次文件内容修改发生在 n分钟 之内
-mmin n: 最后一次文件内容修改发生在 n分钟 至 (n+1)分钟
-mmin +n: 最后一次文件内容修改发生在 (n+1)分钟 之外
-mtime -n: 最后一次文件内容修改发生在 n天 之内
-mtime n: 最后一次文件内容修改发生在 n天 至 (n+1)天
-mtime +n: 最后一次文件内容修改发生在 (n+1)天 之外
#查找文件内容修改发生在2天之内的文件
find /tmp/kafka-logs -name "*" -mtime -2
4.执行删除
#删除5天前的文件
# -exec参数,如果查找有返回,可在exec参数后加上需要操作的命令,查找结果用{}来代替
find /tmp/kafka-logs -name "*" -mtime +5 -exec rm -rfv {} ;
5.释放磁盘空间
rm只是将文件链接解除,如果此时有进程打开文件,系统是不会回收文件。说白就是,你删除的文件被放入了“回收站”,但是你看不这个“回收站”,但文件还占用着磁盘空间。此时,在删除文件的目录下,执行ls命令已经看不到被删除的文件了,用du -sh命令也发现磁盘容量很少,但是执行df -h会发现磁盘使用率并没有变化
- 解决思路:
一般情况下,有下面两种方案:
①重启电脑,系统就会回收磁盘空间。
②kill掉打开文件的进程。
③之后如果想永久删除文件,应该这样执行rm命令,/bin/rm -f catalina.out.xxx,其效果等同于windows下shift+delete 永久删除
- 方案可执行性
作为线上生产环境的服务器,重启肯定不行。所以第一条直接pass,线上服务器也千万别随随便便重启,影响很大。
第三条,是之后删除文件可以用到的,对于目前的情况不适用,所以pass。
- 采用办法
1、通过命令lsof|grep deleted可以看到日志文件处于deleted状态
2、通过 kill -9 pid 杀死进程即可
综上命令可用 lsof -n |grep deleted|awk '{print $2}'|xargs kill -9 对已删除文件进程进行批量杀死
- 推荐使用方法清空文件
a)# echo " " > /home/whoops.log
b)# cat /dev/null > /home/whoops.log
c)# > /home/whoops.log
更多推荐
已为社区贡献5条内容
所有评论(0)