系统管理工具包: 测试系统的有效性
|
清单 6 显示了将文件路径、校验和与其他数据写入标准输出的脚本,并使用冒号将信息的每个字 段隔开。对于校验和,不仅对文件内容执行校验和,而且还将其他信息添加到校验和数据,这样仅通过比 较校验和,就可以确定是否存在差异。 清单 6. 将文件路径、校验和与其他数据写入标准输出
#!/usr/local/bin/perl
use Digest::MD5;
use IO::File;
use strict;
use File::Find ();
my $chksumfile = 'chksums.dat';
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
File::Find::find({wanted => &wanted}, $ARGV[0]);
sub wanted {
next unless (-f $name);
my $fileinfo = genchksuminfo($name);
printf ("%sn",$fileinfo);
}
sub genchksuminfo
{
my ($file) = @_;
my $chk = Digest::MD5->new();
my (@statinfo) = stat($file);
$chk->add(@statinfo[0,1,2,3,4,5,7,9,10]);
$chk->addfile(IO::File->new($file));
return sprintf("%s:%s:%s",
$file,$chk->hexdigest,
join(':',@statinfo[0,1,2,3,4,5,9,10]));
}
该脚本使用 Perl 中的 File::Find 模块,该模块可以遍历目录并从基本点发现每个文件和目录。对 于每个文件,都会调用 wanted() 函数,并且在针对每个文件的该函数中,都会调用 genchksuminfo() 函数。该函数获取 stat() 的信息,并在一行中创建文件路径、校验和与其他信息,然后返回该信息。在 此脚本中,该信息仅输出到标准输出。 该命令接受要扫描的目录,因此可以生成校验和信息。对 于 /etc,将使用清单 7 中显示的命令。 清单 7. 扫描 /etc
此流程的最后一个阶段是存储信息,并提 供将当前信息与存储的信息进行比较的方法。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
