脚本功能
脚本使用Perl编写,计算文件的MD5值
脚本用途
服务器在安装完操作系统后,计算PATH变量里面所有的二进制文件的MD5、计算单个文件MD5值、计算某个目录(包括子目录)下所有的文件的MD5值记录到文件,等日后再生成一份,然后2份文件进行对比,即可知道这些文件是否又被改动过.
脚本用法(5种用法)
- 脚本名 -p [ > 输出的文件名] ← 该功能是计算PATH变量里面所有文件的MD5值
- 脚本名 文件1 文件2 文件3 ... [ > 输出的文件名] ← 该功能是计算指定文件的MD5值
- 脚本名 目录1 目录2 目录3 ... [ > 输出的文件名] ← 该功能是计算指定目录下所有文件的MD5值
- 脚本名 -c MD5文件1 MD5文件2 [ > 输出的文件名] ← 该功能是比较同一个目录下所有文件生成的2次MD5文件中有哪些MD5值不一致
- 脚本名 目录 -f MD5文件 [ > 输出的文件名] ← 该功能是跟上面的功能类似,只是这个不生成文件直接比对
注意事项
不能对/proc目录进行计算
不能对/(根)进行计算,因为/里面包含/proc
不能对挂载在Linux上Windows的共享目录进行计算
脚本内容
- #!/usr/bin/perl
- use Digest::MD5;
- use File::Find;
- # 2012-11-24 22:41 Leo chanyipiaomiao@163.com
- # Blog:http://linux5588.blog.51cto.com
- #用法提示
- $usage = "Usage: scriptname -p | Directory1 ... | File1 ... | -c MD5File1 MD5File2 | Directory -f MD5File [ > OUTFILE]";
- $usagecompare = "Usage: scriptname -c MD5File1 MD5File2 [ > OUTFILE]";
- $usagepath = "Usage: scriptname -p [ > OUTFILE]";
- #判断命令行参数是否为空,为空 则直接计算PATH路径里面所有的二进制文件的MD5值,不为空
- #如果第一个参数是目录,那么调用getDirectoryAllFileMD5 计算目录里面所有文件的MD5值
- #如果第一个参数是文件,那么调用getSingleFileMD5 计算命令行参数里面所有文件的MD5值
- if (@ARGV) {
- my $arg = $ARGV[0];
- if (-d $arg ) {
- if ($ARGV[1] eq '-f' && -T $ARGV[2]){
- &compareWithLastMD5File($arg);
- } else {
- &getDirectoryAllFileMD5(@ARGV);
- }
- } elsif ( -f $arg ) {
- &getSingleFileMD5(@ARGV);
- } elsif ($arg eq '-c' && @ARGV == 3 ) {
- die