是否有删除文件的 rm 日志?

pat*_*eza 2 administration logging rm

有什么方法可以检查最近用rm命令删除的内容吗?

F. *_*uri 5

一些不同的解决方案

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

监视已删除的条目和日志

您可以在递归监视模式下使用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
Run Code Online (Sandbox Code Playgroud)

这是一种系统管理员方法:所有用户、所有目录和安装点...

警告这可能有点矫枉过正,请仔细阅读手册页并添加一些选项,例如--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 $@
} 
Run Code Online (Sandbox Code Playgroud)

因此,每次您输入rmbash 时,文件都会被移动到一个目录,命令和环境也会被保存。

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

向命令添加日志步骤rm

但如果您只想在用户级别记录您的操作:

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

可以完成这项工作。

注释1

正如 @slhck 正确所说:重新定义常用命令可能会给新用户带来不好的习惯,因此,如果您修改此类标准命令,当您在另一个系统上工作时,一定不要忘记这一点!

诺塔2

此补丁仅rm由交互式用户 shell 运行的命令。您可以编辑/etc/bashrc以使它们适用于所有用户,但只有bash工具才会受到影响。

unlink如果示例中删除了文件perl,则不会对此进行记录。

或者即使调用ksh, dashor else 而不是 bash...也没有日志。

诺塔3

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

  • 重新定义像“rm”这样的内置函数是不好的做法,因为你会习惯安全,而实际上并不安全——想象一下在另一个没有此功能的系统上工作。最好从这些错误中吸取教训,并在不确定时输入“rm -i”或类似的内容,或者在删除之前列出文件,然后用“rm”替换“ls”。 (2认同)