Linux下恢複被誤刪除的syslog—/var/log/messages 軟體開發日常工作中,出於方便定位問題的需要,我們常常會去清空記錄檔。但是,Linux新手容易犯的一個錯誤是把記錄檔給直接刪除,而不是刪除記錄檔的內容。直接刪除記錄檔往往導致新產生的日誌記錄無法被寫入到記錄檔中(因為它已經被刪除了),而僅僅重新建立(touch)同樣名字的檔案是解決不了問題的。下面以Unbutu系統為例,說明如何恢複被誤刪除的syslog: www.2cto.com 首先,在以root使用者執行如下lsof命令,查詢開啟/var/log/messages檔案的進程的進程ID(PID)。 Shell代碼 root@viscent:/var/log# lsof | grep messages rsyslogd 544 syslog 7w REG 8,1 214641 134422 /var/log/messages 從上面命令輸出可以看到,這個開啟/var/log/messages檔案的進程的PID是544,檔案/var/log/messages的檔案描述符(FD)號是7。 根據上述的PID和FD,可以在/proc找到對應的檔案: Shell代碼 root@viscent:/var/log#ls -al /proc/544/fd/7 l-wx------ 1 root root 64 2012-07-14 14:48 7 -> /var/log/messages www.2cto.com 將檔案/proc/544/fd/7拷貝到/var/log/messages Shell代碼 cp /proc/544/fd/7 /var/log/messages 然後重新啟動syslog服務即可恢複被誤刪除的記錄檔,並且新的日誌記錄能夠繼續被寫入記錄檔。 以root使用者運行service命令。其中,service命令的第2個參數可能是syslog、也可能是rsyslog。 具體可以使用通過命令查詢得知。 www.2cto.com Shell代碼 root@viscent:/proc/544/fd# service --status-all [ ? ] ... [ ? ] rc.local [ ? ] rsyslog [ ? ] screen-cleanup [ ? ] ... Shell代碼 root@viscent:/proc/544/fd# service rsyslog restart rsyslog start/running, process 2673 BTW,真正用來清空記錄檔的命令應該是: Shell代碼 cat /dev/null>/var/log/messages
來源 http://viscent.iteye.com/