有什么方法可以检查最近用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
,则不会记录此信息。
或者即使调用ksh
,dash
或者其他而不是 bash...也没有日志。
注释 3
要访问原始命令,而不是alias
个人命令function
,您必须提供精确的完整路径: /bin/rm myfile
将删除myfile
但绕过rm
功能,不会记录任何内容。
答案2
如果是你不小心删除了文件,并且你的 shell 支持历史记录,那么你可以像这样列出历史记录:
history | grep rm
当然,你需要对历史进行深入研究才能知道在哪里您删除了该文件。
如果是另一个用户,也许他/她~/.bash_history
或类似的文件(无论用户使用哪个 shell)可能有该信息,如果他们没有从那里删除它。
但实际上,正如其他答案所指出的,没有日志。只是扫描表面以查找尚未覆盖的已删除文件。
顺便说一句,使用写时复制文件系统,例如 ZFS 或 btrfs,您可以及时跟踪驱动器“状态”之间已删除的文件,称为快照。
您可以运行具有所需时间粒度的 cron 任务,以确保有足够新的快照,然后比较快照和当前状态之间的差异。
还有另一种方法。你可以编译自己的 rm 二进制文件,它做保存其所做事情的痕迹。
答案3
没有。很遗憾,没有这样的日志。不过,有几种工具可以恢复已删除的文件。
答案4
不,没有这样的日志。删除的就是删除。
如果您有备份,那么您可以将备份中的文件与计算机上当前的文件进行比较。这将为您提供备份和现在之间时间范围内删除的文件列表。