我的 FreeBSD 8.4 机器上运行着一个 nohup 进程。最初,我查看了 nohup 控制台消息通过
tail -f nohup.out
但是我不小心删除了 nohup.out 文件。我现在该如何访问控制台消息?
答案1
是的,尽管只要进程保持打开状态该文件就会仍然存在,但是由于它已被unlink
-ed,因此不再可访问。
如果您需要在消息生成时继续查看它们,您可以ktrace
在生成这些消息的进程上启用它们:
% ktrace -p PID
% kdump -l
上面将列出全部但是,进程所进行的系统调用不仅仅是写入stdout
和stderr
,因此可能会有点不知所措和/或需要额外的过滤才能获得您希望看到的内容。
如果你想要该文件的副本,你可以使用其中一个通用实用程序,tsk_recover
例如sysutils/sleuthkit端口。通常的做法是不写入包含意外删除的文件(您希望恢复)的文件系统,但这并不适用,因为您仍然有一个进程保持文件打开。
然而,复苏将创造复制已删除文件 - 稍后由同一进程写入该文件的任何内容都不会出现在副本中。
抱歉,我想不出其他方法了...在 Solaris 上,我曾经能够通过进入来恢复已删除的、仍由进程打开的文件/proc/PID/fd/...
,但 FreeBSD 上的 procfs 不提供此类功能...
根据这个答案,该/proc/PID/fd
方法也适用于 Linux,但 FreeBSD 的 linprocfs 也不提供该功能。真可惜……