0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

清理老日志这种需求太常见了

阿铭linux 来源:阿铭linux 作者:阿铭linux 2022-11-02 11:51 次阅读

在我做运维的职业生涯里,有超过3成的故障都是因为磁盘被写满导致,而导致磁盘被写满的原因就是日志没有做清理。

ce42c6d8-5a60-11ed-a3b6-dac502259ad0.png

今天这个脚本需求很简单,就是找到/data/logs/目录下所有以log作为后缀的文件,删除掉60天以前的,并且对一天以前的使用gzip进行压缩(每一个都要压缩)。

其实,这个需求大家不要想复杂了,核心命令就是find,先给大家讲几个find的常见用法。

1)找到一个目录下,所有"*.txt",这里需要考虑到不仅仅该目录下,还要包括该目录的子目录下的*.txt,所以,你要直接 ls /dir/*.txt肯定就不合适了,如何找指定名字的文件?使用这个命令:

find  /dir/  -name "*.log" 

2)找到/data/下10天以前的所有文件,注意只是文件,不包括目录哦

find/data/-type f -mtime+10

3)基于目录层级来查找,比如查找当前目录下最多两层目录下的所有文件

find  . -maxdepth 2 -type f

4)有时候,查找出文件来,还需要针对这些文件做一些操作,比如备份所有.conf文件

find . -type f -name "*.conf" --exec cp {} {}.bak ;

这个--exec选项类似于一个循环,循环对象就是前面的find出来的*.conf,每次循环,对象用{}代替,最后面的; 需要使用脱义,目的就是为了实现循环。

除了 --exec之外,还可以使用xargs实现,比如:

find . -type f -name "*.conf"  |xargs -i cp {} {}.bak

xargs 的-i选项,是为了遍历循环,它同样使用 {}来代替循环对象,有时候,xargs可以不加-i,比如:

find  . -name "*.txt"  |xargs rm

这是因为rm支持批量操作,比如 rm 1.txt 2.txt 3.txt ,而 mv 不支持,只能一个一个来。

再来看脚本需求,如何找到60天以前的,使用-mtime +60,除了mtime外,还有ctime和atime。我们先来看看mtime、ctime、atime是什么意思 ?

ce93ce02-5a60-11ed-a3b6-dac502259ad0.png

大家看上下两次结果对比,上面是中文,下面是英文,最近访问时间 就是atime,最近更改时间就是mtime,指的是更改了文件内容,最近改动时间就是ctime,指的是更改了文件属性。

啥是文件属性呢,就是文件的大小啊、权限啊等信息。比如改了文件的读写执行权限,那么ctime会改,再比如改了文件的所有者,ctime也会变。这里有一个规律,那就是改了文件内容,mtime一定会变,从而ctime也一定会变。但反过来,你改了ctime,并不一定会改mtime。

找到60天以前的文件,指的是要找到mtime为60天以前的文件,find 就这样用

find  -mtime +60 

+60表示60天以前, 而-60则表示60天以内。同理,找到一天以前的,那就是find -mtime +1。

根据脚本需求,还需要找到1天以前的日志进行压缩,要注意的是,我们不能先找到1天以前的进行压缩,然后再去删除60天以前的,这个顺序不合适。因为你一旦gzip压缩了,之前的 *.log文件就没有了,你再这样"find -type f -name "*.log" -mtime +60"就找不到文件啦!

这里还有一个知识点需要给大家说一下,就是gzip压缩后,源文件没有了,生成了.gz文件,这个.gz的文件mtime跟源文件一样,大家看一下

ce9ef214-5a60-11ed-a3b6-dac502259ad0.png

但是ctime会变,这是因为文件大小变啦。

最终的脚本是这样的:

#!/bin/bash
find /data/logs/ -name "*.log" -mtime +60 |xargs rm
find /data/logs/ -name "*.log"  -mtime +1 |xargs gzip

原来,竟如此简单!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 磁盘
    +关注

    关注

    1

    文章

    339

    浏览量

    24885
  • 日志
    +关注

    关注

    0

    文章

    126

    浏览量

    10526
  • 脚本
    +关注

    关注

    1

    文章

    372

    浏览量

    14637

原文标题:清理老日志这种需求太常见了

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    工作中这种检测脚本太常见了

    写一个检测脚本,用来检测本机所有磁盘分区读写是否都正常。
    发表于 11-07 09:42 250次阅读

    黑客在入侵后,是如何完美清理日志的?

    一:开始 - 程序 - 管理工具 - 计算机管理 - 系统工具 -事件查看器,然后清除日志。    二: Windows2000的日志文件通常有应用程序日志,安全日志
    发表于 09-16 10:06

    Linux应用--日志定时清理

    上篇文章写到了在工作中遇到的一个因为磁盘空间占满导致的问题,因应用每天都要写日志,所以如果不定时对部署应用的服务器进行清理的话会经常遇到这样的问题。为避免相似的问题发生,今天总结一个Linux日志
    发表于 07-09 08:12

    怎样去打造一款智能日志模块

    日志外,可以对日志分等级显示不同的颜色,支持按日期切割,支持控制文件大小及定时清理若干天的记录文件。更重要的是,一种远程诊断的方案。公司开辟一公共外网ftp服务器,这不费不少钱吧,也放心这服务器...
    发表于 12-20 07:17

    怎么清理工程?有没有类似DOS命令的?

    怎么清理工程有没有类似DOS命令的每次都得打开IDE去清理麻烦求大神解答
    发表于 08-19 11:21

    reboot命令都不见了为什么会出现这种情况?

    不正常。警告在drv_common.c里面,说的是reboot函数没使用。下载程序看看效果好了,reboot命令都不见了请教了一堆大佬,结果发现drv_common.c文件并没有更新到最新版本的,沿用
    发表于 09-21 11:15

    如何制作一个清理计算机的批处理脚本

    这种可指示的方式,我们将编写一个脚本来清理计算机上的大多数垃圾文件,例如.temp文件,日志文件,临时帮助文件,磁盘检查文件,临时备份文件等等。除此之外,我们将为程序创建一个界面,以便用户可以控制它。 (并且看起来很棒)。
    的头像 发表于 10-22 14:56 1832次阅读

    详解MySQL三大日志的作用

    MySQL日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重
    的头像 发表于 07-22 14:44 988次阅读

    vivo大数据日志采集Agent设计实践

    通常,日志采集服务可以分为几个部分(业界常见的架构如下图所示):日志采集Agent组件(常见的开源采集Agent组件有Flume、Logstash、Scribe等)、采集传输与存储组件
    的头像 发表于 11-29 15:39 720次阅读

    三步教你清理NAS上无用docker文件

    今天登录ssh后查看文件发现其中一个文件夹占用很大,已经到了60%,于是乎我这边查询了一下发现全是docker残留文件与日志。每次测试docker容器后虽然会进行卸载,但是中间产生的日志和空文件夹系统并不会帮你进行清理,于是乎就
    的头像 发表于 02-24 11:29 1409次阅读
    三步教你<b class='flag-5'>清理</b>NAS上无用docker文件

    log4j日志框架分析

    og4j是Apache下的一款开源的日志框架,能够满足我们在项目中对于日志记录的需求。log4j提供了简单的API调用,强大的日志格式定义以及灵活的扩展性。使用者可以自己定义Appen
    的头像 发表于 02-28 14:32 688次阅读
    log4j<b class='flag-5'>日志</b>框架分析

    Spring Boot的日志框架使用

    目前市面上常见日志框架有:slf4j(Simple Logging Facade for Java)、logback、log4j、log4j2、commons-logging(Spring默认日志框架)、JUL(java.ut
    的头像 发表于 06-02 10:59 693次阅读
    Spring Boot的<b class='flag-5'>日志</b>框架使用

    工业智能网关日志有哪些?如何输出和导出网关日志查看呢?

    工业智能网关有很多功能,日志功能是必不可少的,日志有很多类型,以物通博联工业智能网关为例,日志主要有采集日志、云接入日志、系统
    的头像 发表于 10-26 17:33 456次阅读
    工业智能网关<b class='flag-5'>日志</b>有哪些?如何输出和导出网关<b class='flag-5'>日志</b>查看呢?

    分享一个适合单片机的轻量级日志

    单片机项目在很多时候都需要调试,通过日志诊断bug是常见的一种调试方法。
    的头像 发表于 09-06 09:23 602次阅读
    分享一个适合单片机的轻量级<b class='flag-5'>日志</b>库

    日志设计开发过程中的常见问题

    日志是系统中熵增最快的一个模块,它承载了业务野蛮生长过程中的所有副产品。本文介绍了一个日志治理案例,围绕降本和提效两大主题,取得一定成效,分享给所有渴望造物乐趣的同学。
    的头像 发表于 10-19 17:01 275次阅读
    <b class='flag-5'>日志</b>设计开发过程中的<b class='flag-5'>常见</b>问题