Linux 运维日志删除的多种方式—东方仙盟

适用场景:服务器上日志目录越积越多,磁盘告警,需要批量清理旧日志文件。 本文以「电商系统日志目录」为例(路径已中文化,真实环境请替换为你自己的目录)。 实测数据:

  • 文件总数:18962 个
  • 子目录总数:1766 个
  • 总大小:481M(503867317 字节)

一、为什么不能直接 rm -rf *?

很多人第一反应是进目录敲 rm -rf *,这是最危险的操作。原因有三:

  1. * 会匹配一切:包括你想保留的子目录、配置文件、刚刚生成的新日志。
  2. 没有回收站 :Linux 的 rm 是物理删除,删错了基本找不回来。
  3. 路径敲错就是灾难:如果当前目录不是你以为的那个,删的就是别的目录。

所以正确的流程永远是:先进对目录 → 统计 → 预览 → 确认 → 再删。


二、第一步:进入目标日志目录

把下面的路径换成你自己的,本文用中文描述:

复制代码
cd /网站根目录/项目名称/站点域名/电商系统日志目录

进完之后,强烈建议先执行 pwd 确认一下当前路径:

复制代码
pwd

确认输出的就是你要清理的那个日志目录,再往下走。这一步能避免 90% 的误删事故。


三、第二步:统计目录里到底有多少东西

3.1 一条命令统计文件数、目录数、总大小

复制代码
sh -c 'f=$(find . -type f -print0 | tr -cd "\0" | wc -c);d=$(find . -type d ! -path . -print0 | tr -cd "\0" | wc -c);s=$(find . -type f -printf "%s\n" | awk "{sum+=\$1} END{print sum}");echo "文件总数: $f 个";echo "子目录总数: $d 个";echo "总字节: $s";echo "总大小: $(numfmt --to=iec $s)"'

输出:

复制代码
文件总数: 18962 个
子目录总数: 1766 个
总字节: 503867317
总大小: 481M

这条脚本干了三件事:

  • 数普通文件个数(-type f)
  • 数子目录个数(-type d,排除当前目录本身)
  • 累加所有文件的字节数,最后用 numfmt 转成人类可读的 M/G

3.2 用 du 看磁盘实际占用

复制代码
find . -type f -print0 | xargs -0 du -ch | tail -1

和上面那条的区别:

  • 上面那条算的是文件内容本身的字节总和
  • du 算的是磁盘块实际占用,因为文件按块存储,通常会比内容字节略大一点

两个数据对得上,说明目录结构正常,没有异常文件。


四、第三步:预览要删的文件(只看不删)

4.1 列出所有普通文件

复制代码
find . -type f
  • .:从当前目录开始递归查找
  • -type f:只列出普通文件,不列出目录

18962 个文件会刷屏,所以更实用的做法是抽样看几个:

复制代码
find . -type f | head -20
find . -type f | tail -20

确认一下:这些文件是不是都是日志?有没有混进配置文件、PHP 脚本、上传的图片?如果有,就不能用 "全删" 的方式。

4.2 只看某种后缀的文件

如果你只想删 .log 结尾的日志:

复制代码
find . -type f -name "*.log"

这样预览出来的全是日志文件,确认无误再删,安全得多。


五、第四步:两种删除方式对比

方式一:find . -type f -delete(推荐,只删文件保留目录)

复制代码
find . -type f -delete

特点:

  • 只删除普通文件
  • 所有子目录原样保留(1766 个文件夹一个都不会少)
  • 适合日志目录,因为程序会按日期创建子目录来写日志,目录删了程序会报错

执行前预览版(dry-run):

复制代码
find . -type f -print

确认输出的都是日志文件,再把 -print 换成 -delete。

方式二:rm *(不推荐,谨慎使用)

复制代码
rm *

特点:

  • 删除当前目录下第一层的所有文件和文件夹(不递归到子目录内部)
  • 不会递归删除子目录里面的内容
  • 会把当前目录下的子目录也一起删掉(如果目录不是空的,rm 会报错,加 -r 才强制删)

对比表:

表格

对比项 find . -type f -delete rm *
递归深度 递归所有子目录 只删当前目录第一层
子目录处理 保留所有子目录 会删掉第一层的子目录(空目录)
文件过滤 可以加 -name "*.log"、-mtime +30 没有过滤能力,全删
特殊文件名 -print0 可处理空格 / 中文 带空格的文件名会出错
安全性 高(可预览、可过滤) 低(粗暴)

什么时候用 rm * 可以接受?

  • 当前目录下全是临时文件,没有子目录

  • 你已经 ls 看过,确认没有重要东西

  • 而且最好用 rm -i *(逐个确认):

    rm -i *

每删一个文件都会问你 y/n,适合文件少、目录干净的场景。


六、生产环境推荐:只删 N 天前的日志(不一次性清空)

上面两种都是 "全删",实际生产环境更稳妥的做法是只删老日志,保留近期的。

6.1 预览 30 天前的日志

复制代码
find . -type f -mtime +30
  • -mtime +30:修改时间在 30 天以前的文件

6.2 确认后删除

复制代码
find . -type f -mtime +30 -delete

6.3 组合过滤:只删 30 天前的 .log 文件

复制代码
find . -type f -name "*.log" -mtime +30 -delete

这样既保留了目录结构,又不会删掉近期还在写的日志,也不会误删别的类型文件。


七、删除后验证

删完之后,重新跑一遍统计脚本,确认文件已经清空:

复制代码
sh -c 'f=$(find . -type f -print0 | tr -cd "\0" | wc -c);echo "剩余文件数: $f"'

如果剩余文件数接近 0,说明清理完成。


八、常见坑与注意事项

  1. 权限不足 :加 sudo,或者用网站运行用户(如 www)执行。

  2. 文件名带中文 / 空格 :必须用 -print0 + xargs -0 组合,否则会漏删或报错。

  3. 磁盘空间没释放:日志文件可能被进程占用着,删了之后空间不会立刻释放,需要重启对应服务(如 Nginx、PHP-FPM)。

  4. 不要在 /、/root、网站根目录执行 find . -type f -delete,那是毁灭性操作。

  5. 删除前先备份重要日志 :如果日志里有排障需要的信息,先打包再删:

    复制代码
    tar -czf /backup/logs_$(date +%Y%m%d).tar.gz .

九、标准操作流程总结(背下来)

复制代码
1. cd 进入日志目录
2. pwd 确认路径
3. find . -type f | head -20  抽样预览
4. find . -type f -print0 | xargs -0 du -ch | tail -1  统计大小
5. 确认无误
6. find . -type f -delete (或 -mtime +30 -delete)执行删除
7. 重新统计,验证清理结果

人人皆为创造者,共创方能共成长

每个人都是使用者,也是创造者;是数字世界的消费者,更是价值的生产者与分享者。在智能时代的浪潮里,单打独斗的发展模式早已落幕,唯有开放连接、创意共创、利益共享,才能让个体价值汇聚成生态合力,让技术与创意双向奔赴,实现平台与伙伴的快速成长、共赢致远。

原创永久分成,共赴星辰大海

原创创意共创、永久收益分成,是东方仙盟始终坚守的核心理念。我们坚信,每一份原创智慧都值得被尊重与回馈,以永久分成锚定共创初心,让创意者长期享有价值红利,携手万千伙伴向着科技星辰大海笃定前行,拥抱硅基 生命与数字智能交融的未来,共筑跨越时代的数字文明共同体。

东方仙盟:拥抱知识开源,共筑数字新生态

在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。

开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。

共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。

知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长

阿雪技术观

在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者 。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。

Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology

相关推荐
卓豪终端管理1 小时前
IT 运维视角下的终端数据安全:能力框架与落地清单
运维
小雉系统1 小时前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
thethefighter1 小时前
快速预览Word、WPS秒开,支持空格弹窗
linux·word·wps·快速预览·空格弹窗·nhdeepview
甜到心里的蛋糕1 小时前
从 QQ 机器人到 B 站 AI 运营:一套可复现的视频流水线踩坑实录
运维·人工智能·python·自动化·视频制作
QYR-分析2 小时前
26.2% 高增!场内及园区无人物流车,厂内短驳自动化的 L4 货运载体
运维·自动化
熊猫钓鱼>_>2 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
用户8351414049492 小时前
把日志和寄存器值喂给AI做故障定位,我的实际问法
linux·ubuntu
java_logo2 小时前
Docker 部署 DPanel:轻松搭建轻量容器管理平台
运维·docker·容器·podman·容器管理·dpanel·轩辕镜像
时间售卖铺2 小时前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle