是否有一个 UNIX 命令可以列出系统中最近删除的所有文件

是否有一个 UNIX 命令可以列出系统中最近删除的所有文件

意外地,rm -rf命令被启动到我的根目录而不是当前目录。我停止按Ctrl+删除文件C,但有些文件已被删除。是否有一个 LINUX 命令可以列出最近从系统中删除的所有文件以获取受影响的应用程序?

操作系统:CentOS 6.3

答案1

*nix 系统通常locate安装了一个实用程序。它有一个数据库,通常每晚更新,其中包含系统上(几乎)所有文件的名称。赶紧跑:

locate /path/to/dir/of/interest

您应该会看到截至上次数据库更新时该目录中的文件列表。您可以将其与当前列表进行比较。

因为它会被新版本自动覆盖,所以您现在可以创建该数据库的备份副本。在受 Debian 影响的系统上,它存储在/var/lib/mlocate/mlocate.db.

如何显示丢失的文件

  1. 备份旧数据库:

    cp /var/lib/mlocate/mlocate.db ~/old.db
    
  2. 更新数据库。执行此操作的命令可能会有所不同。在类似 Debian 的系统上,尝试:

    sudo /etc/cron.daily/mlocate
    
  3. 获取目录的新旧文件列表:

    locate -d ~/old.db /your/dir | sort >~/old.list
    locate /your/dir | sort >~/new.list
    
  4. 获取所有新文件和丢失文件的列表:

    diff ~/old.list ~/new.list
    

补充笔记

  • 并非所有文件都列在locate 的数据库中。配置文件通常/etc/updatedb.conf决定排除哪些文件和目录。

  • 过去我使用过locate它的某个版本,默认情况下,只会列出仍然存在的文件。如果您的 是这种情况locate,您将需要关闭该功能。

答案2

对于 arch,我担心我不小心删除了很多带有坏鳍的文件...... | xargs rm -rf 命令格式。 John1024 谢谢你的建议。

为了简化一切(对于我的 web 目录 /srv/http),我将其全部运行在一行中:

sudo cp /var/lib/mlocate/mlocate.db ~/old.db; sudo updatedb; sudo locate -d ~/old.db /srv/http | sort >~/old.list; sudo locate /srv/http | sort >~/new.list; sudo diff ~/old.list ~/new.list;

确保将 /srv/http 替换为您关注的目录。

这将显示已更改的文件。再次感谢!

相关内容