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

发布时间: 2026-07-18
作者: DP
浏览数: 1 次
分类: 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`。
关联内容
相关推荐
MySQL字符串拼接权威指南:告别'+',拥抱CONCAT()和CONCAT_WS()
00:00 | 116次

在MySQL中拼接字符串时误用'+'号是一个常见错误。本文将深入解析为什么'+'在MySQL中用于数...

CSS揭秘:如何优雅地为暗黑模式下的<select>下拉框自定义箭头
00:00 | 116次

在实现暗黑模式时,自定义<select>下拉框的箭头样式是一个常见的挑战。直接在SVG中硬编码颜色虽...

正则表达式新手终极指南:从零到一掌握文本匹配利器
00:00 | 102次

还在为复杂的文本匹配和数据提取而烦恼吗?本文是专为新手设计的正则表达式(Regex)终极指南。我们将...

图标大师课:如何为您的内容和分类选择完美的 Bootstrap 图标
00:00 | 103次

在 Web 和应用开发中,选择正确的图标对于构建直观、易于导航的用户界面至关重要。本文深入探讨了 B...