Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 误删除系统日志文件(/var/log/syslog 或 messages)恢复实战

編輯:關於 Linux

误用 rm 删除日志文件而非清空内容(> /var/log/syslog),文件实体仍在磁盘,只要日志守护进程(rsyslogd/syslogd)仍持有文件描述符,即可通过 /proc/PID/fd/ 恢复。本文以 Ubuntu 为例演示恢复全过程。

一、查找持有日志文件的进程

sudo lsof | grep /var/log/syslog
# 或
sudo lsof | grep messages
# 输出示例:
# rsyslogd  544  root  7w   REG  8,1  214641  134422 /var/log/messages
# PID=544, FD=7

二、通过 /proc 恢复文件内容

# 确认 /proc/544/fd/7 指向被删文件
ls -l /proc/544/fd/7
# 输出:lrwx------ 1 root root 64 ... 7 -> /var/log/messages (deleted)

# 复制恢复
sudo cp /proc/544/fd/7 /var/log/messages
# 或重定向
sudo cat /proc/544/fd/7 > /var/log/messages

三、重启日志服务使新日志正常写入

# 查看服务名
service --status-all | grep -E 'syslog|rsyslog'

# 重启
sudo service rsyslog restart
# 或
sudo systemctl restart rsyslog

四、正确清空日志文件的方法(避免误删)

# 截断文件大小为 0,保留 inode 与文件描述符
sudo truncate -s 0 /var/log/syslog
# 或
sudo sh -c ': > /var/log/syslog'
# 或
sudo dd if=/dev/null of=/var/log/syslog

五、原理说明

  • Linux 文件删除(unlink)仅移除目录项,引用计数归零且无打开文件描述符时才真正释放磁盘块。
  • rsyslogd 启动时以 O_APPEND 打开日志文件,持有描述符直到重启或收到重载信号。
  • /proc/PID/fd/N 是内核暴露的文件描述符符号链接,读取即可获取文件当前内容。

lsof 查找日志进程示意图

误删日志文件后,只要守护进程未重启,即可通过 /proc/PID/fd/ 完美恢复,随后重启服务即可继续正常记录。养成用 truncate 或重定向清空日志的习惯,避免此类事故。

Copyright © Windows教程網 All Rights Reserved