按特定daterecursion查找所有文件

我的网站受到FTP恶意攻击,破解者在我的主目录中修改/创build了一些文件。

假设恶意创build/修改的date是2011-4-5 21:38:09。 我怎样才能find其他文件在public_html被修改/创build的那个时间?

试图通过谷歌search,但没有有用的发现。 你能给我举一些例子吗? 像LS还是find? 谢谢!

touch -m -t 201104052138.08 /tmp/timestamp find /dir --newer /tmp/timestamp 

最初的触摸创build一个文件,在你需要的时间戳之前有一秒钟的时间,然后查找然后使用它来查找在那段时间之后被修改的文件(就内容而言)。

您还需要检查权限和组的所有权。 你不能使用上述技术来做到这一点,因为touch只能改变atime和mtime。 所以,你最好决定什么是正确的权限,并重新设置它们。 例如,如果您的Web文件通常由组名为www-pub的root拥有,并且对于目录拥有0755的权限,对于文件拥有0644的权限,则可以使用

 find /dir \! -user root 

find不属于root的文件和目录

 find /dir \! -group www-pub 

find不属于www-pub的文件和目录

find的-perm标志也可以用来查找基于权限的文件,但是最好把它们设置成它们应该是的。

 find /dir -exec chown root:www-pub {} \; find /dir -type f -exec chmod 0644 {} \; find /dir -type d -exec chmod 0755 {} \; 

使用find

 # find /home -ctime -2 

这意味着“find/最近48小时更改的文件”。 2乘以24小时,所以如果你需要72小时你使用3,依此类推。 如果您需要查找超过X天更改的文件,请使用+而不是 – 。

你可能想列出这些文件:

 # find /home -ctime -2 -exec ls -l {} \; 

请记住, ctime包含在过去X小时内创build或更改的文件。

 find /dir -newerma "2011-xx-xx" 

或者你可以看看这里

要查找特定date/周围的文件(而不是特定date之后),您需要编写一个自定义脚本。 有两个select:

  • 查找文件的脚本
  • testing可以embedded到find命令中的单个文件的脚本

第一个肯定是更有效率的。 一个非常粗糙的Perl例子是:

 #!/usr/bin/perl use strict; use warnings; use POSIX(); use File::Find(); sub usage() { die "usage: finddate yyyy-mm-ddThh:mm:ss marginsecs dirs..." } my( $mindate, $maxdate ); sub checkdate() { my @data = stat($_); foreach my $idx ( 9, 10 ) # mtime and ctime { if( $data[$idx] >= $mindate && $data[$idx] <= $maxdate ) { print "$File::Find::name\n"; last; } } } # Main Program { my $dtxt = shift(@ARGV); my $margin = shift(@ARGV); my $date; if( $dtxt =~ /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)$/ ) { $date = POSIX::mktime( $6, $5, $4, $3, $2-1, $1-1900 ); } else { usage(); } $mindate = $date - $margin; $maxdate = $date + $margin; File::Find::find( \&checkdate, @ARGV ); } 

示例用法:

 finddate.pl 2011-03-02T01:40:00 600 . 

单个文件testing几乎是相同的东西,除了:

  • 它只需要一个文件而不是一个目录参数列表
  • checkdate函数使用文件名参数而不是使用$ _
  • 如果检查通过,checkdate函数将返回1,否则返回0
  • 最后一行是exit( !checkdate(@ARGV) );

然后你可以在一个普通的查找命令中使用这个

 find dir -exec finddate.pl 2011-03-02T01:40:00 600 {} \; -print 

您可以使用交换机mtime来完成此任务。