是否有任何包含已删除文件的 rm 日志?

是否有任何包含已删除文件的 rm 日志?

有什么方法可以检查最近用rm命令删除了什么?

答案1

一些不同的解决方案

没有日志,但是如果你想要......

查看已删除的条目和日志

您可以使用inotify以下库递归监视器模式:

inotifywait -e delete --timefmt %c --format '%T %_e %w %f' -r -m / >/path/logfile
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
Fri Jul 19 11:57:39 2013 DELETE /tmp/ testfiletodelete
Fri Jul 19 11:57:46 2013 DELETE /home/user/ testfiletodelete

这是一个系统管理员方法:所有用户、所有目录和挂载点...

警告这可能有点过度杀伤仔细阅读手册页并添加一些选项,例如--exclude

修补 rm命令

你可以添加一些东西到你的.bashrc...

变换rm删除移到废纸篓命令

mkdir -p $HOME/.Trashcan
rm() {
    local destdir=$(mktemp -d $HOME/.Trashcan/trash-XXXXXXXXX);
    mkdir $destdir/files
    echo $0 $@ >$destdir/command
    set >$destdir/environ
    mv -t $destdir/files $@
} 

因此,每次您rm在 bash 中点击时,文件都会被移动到一个目录,命令和环境也会被保存。

由于每个rm都会创建一个正确日期的新目录,因此无需使用date

向命令添加日志步骤rm

但如果你只是想记录你的操作,在用户层面:

rm() {
   date >>$HOME/.rm.log +"%a %d %b %Y %T: rm $@"
   /bin/rm $@
}

可以完成这项工作。

注 1

正如 @slhck 所说:重新定义常用命令可能会给新用户带来不良习惯,因此如果您修改此类标准命令,则必须别忘了当您在另一个系统上工作时!

注释 2

此修补程序仅rm由交互式用户 shell 运行的命令。您可以编辑/etc/bashrc以使它们适用于所有用户,但无论如何,只有狂欢工具可能会受到影响。

unlink如果文件被示例删除perl,则不会记录此信息。

或者即使调用kshdash或者其他而不是 bash...也没有日志。

注释 3

要访问原始命令,而不是alias个人命令function,您必须提供精确的完整路径: /bin/rm myfile将删除myfile但绕过rm功能,不会记录任何内容。

答案2

如果是你不小心删除了文件,并且你的 shell 支持历史记录,那么你可以像这样列出历史记录:

history | grep rm

当然,你需要对历史进行深入研究才能知道在哪里您删除了该文件。

如果是另一个用户,也许他/她~/.bash_history或类似的文件(无论用户使用哪个 shell)可能有该信息,如果他们没有从那里删除它。

但实际上,正如其他答案所指出的,没有日志。只是扫描表面以查找尚未覆盖的已删除文件。

顺便说一句,使用写时复制文件系统,例如 ZFS 或 btrfs,您可以及时跟踪驱动器“状态”之间已删除的文件,称为快照。

您可以运行具有所需时间粒度的 cron 任务,以确保有足够新的快照,然后比较快照和当前状态之间的差异。

还有另一种方法。你可以编译自己的 rm 二进制文件,它保存其所做事情的痕迹。

答案3

没有。很遗憾,没有这样的日志。不过,有几种工具可以恢复已删除的文件。

答案4

不,没有这样的日志。删除的就是删除。

如果您有备份,那么您可以将备份中的文件与计算机上当前的文件进行比较。这将为您提供备份和现在之间时间范围内删除的文件列表。

相关内容