别再用 rm 删除日志了!Linux 下秒清 log 文件的 5 种高阶姿势

发布时间: 2026-07-18
作者: DP
浏览数: 40 次
分类: Linux
内容
在日常的 Linux 服务器运维中(例如维护 wiki.lib00.com 的 Web 服务),我们经常会遇到日志文件(Log)占用过多磁盘空间的问题。很多新手的本能反应是直接使用 `rm` 命令删除日志文件,然后再用 `touch` 重新创建一个。 ## 为什么不能直接 rm 删除日志文件? 如果直接删除正在被应用程序(如 Nginx、MySQL 或你部署在 lib00 上的应用)写入的日志文件,由于应用程序仍然持有该文件的文件句柄(File Descriptor),磁盘空间并不会立刻释放,且服务将无法继续向新创建的同名文件中写入日志,除非重启服务。 因此,最优雅的做法是**清空文件内容**,而不改变文件的 inode 和句柄。以下是 DP 总结的 5 种快速清空 Linux 日志文件的专业方法: --- ## 1. 使用 Shell 重定向(最推荐,最快) 这是最简洁、最快的方法,适用于大多数主流 Shell(如 Bash, Zsh 等)。 ```bash > wiki.lib00.log ``` --- ## 2. 使用 `:` 或 `true` 空命令 `:` 是 Shell 的内置空命令,执行后不产生任何输出,效果等同于 `true`。配合重定向符号同样可以清空文件。 ```bash : > wiki.lib00.log # 或者 true > wiki.lib00.log ``` --- ## 3. 使用 `cat /dev/null` 这是老一代 Linux 玩家常用的传统做法,将系统黑洞设备 `/dev/null` 的空内容覆盖到目标文件。 ```bash cat /dev/null > wiki.lib00.log ``` --- ## 4. 使用 `truncate` 命令 从语义上来说,这种方法最为明确。`truncate` 专门用于将文件大小缩减或扩展到指定尺寸。`-s 0` 表示将文件大小调整为 0 字节。 ```bash truncate -s 0 wiki.lib00.log ``` --- ## 5. 权限受限时的 Sudo 方案 如果你当前的用户没有该日志文件的写权限,直接使用 `sudo > wiki.lib00.log` 会报错 `Permission denied`。这是因为重定向操作是由当前的 Shell 执行的,而不是 `sudo`。此时可以采用以下替代方案: ```bash # 方案 A:使用 tee 命令(推荐) true | sudo tee wiki.lib00.log > /dev/null # 方案 B:使用 truncate 命令 sudo truncate -s 0 wiki.lib00.log # 方案 C:调用 sh 执行整个命令 sudo sh -c "> wiki.lib00.log" ``` --- ## DP@lib00 的总结建议 * **日常手动排查:** 直接使用 `> filename`,简单高效。 * **编写自动化脚本:** 推荐使用 `truncate -s 0 filename`,语义更清晰,易于维护。 * **遇到权限限制:** 首选 `sudo truncate -s 0 filename`。
关联内容
相关推荐
URL重构实战:从参数地狱到SEO天堂
00:00 | 131次

在项目中期如何优雅地重构URL,以实现RESTful风格和SEO优化?本文以一个PHP项目为例,深入...

终极指南:在 VS Code 中如何将 Markdown 完美导出为 PDF
00:00 | 39次

在 VS Code 中编写 Markdown 文档后,如何将其高效导出为 PDF?本文将介绍两种最常...

Markdown 妙用:如何优雅地引用或链接外部文件内容?
00:00 | 188次

在编写 Markdown 文档时,如何清晰地表示某部分内容来源于另一个文件?本文探讨了三种专业方法:...

解锁 IDE 神力:PHP PHPDoc 终极指南,从入门到精通
00:00 | 134次

本文深入探讨了 PHPDoc 在现代 PHP 开发中的核心作用,特别是如何利用 `@var` 和 `...