An md5sum "Errorlevel" via Perl?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting An md5sum "Errorlevel" via Perl?
# 1  
Old 05-21-2014
An md5sum "Errorlevel" via Perl?

Greetings!

Consider the following snippet:
Code:
my $sumInfo = `md5sum test.txt --quiet -c checkFile`

This works well enough provided that "checkFile" exists; and that it's formatted in accord with md5sum's conventions.

However, I'm wanting to run md5sum to do some automated file verification work, and need to glean any errors which might be thrown along the way when:
  • "checkFile"doesn't exist
  • "checkFile"is not properly formatted
Surprisingly, md5sum seems to exit with an "OK" code whether or not the above criteria are met; despite its passing an error message to the terminal. In other words, all looks as though the check was performed successfully on "test.txt" even if "checkFile"is damaged or missing. This causes any downstream detection logic to be a good bit less than robust.

Any ideas?


Thanks! Smilie
# 2  
Old 05-22-2014
You can test the files in perl, for example
Code:
my $testfile = "test.txt";
my $checkfile = "checkFile";
die unless -f $testfile && -f $checkfile;
my $sumInfo = `md5sum $testfile --quiet -c $checkfile`;

But you can hardly check if the checkFile format is okay.
Maybe there is an update for your broken md5sum available?
This User Gave Thanks to MadeInGermany For This Post:
# 3  
Old 05-23-2014
Quote:
Originally Posted by LinQ
[...]

Consider the following snippet:
Code:
my $sumInfo = `md5sum test.txt --quiet -c checkFile`

When I consider the snippet I don't understand it.
I know the following:
Code:
md5sum test.txt

That creates a hash and output it to the stdout

Code:
md5sum -c checkFile

That checks the signature for every hash/file in checkFile

--quiet is just a flag to suppress some verbosity

But what does md5sum test.txt --quiet -c checkFile do.

Creates a hash for test.txt and check the integrity of what every hash mentioned is in checkFile? I think not.

---------- Post updated at 06:41 PM ---------- Previous update was at 06:31 PM ----------

Never mind. I see what it is doing.
It takes test.txt and checkFile as hash-files because of the -c regardless of the position of the flag

---------- Post updated at 10:54 PM ---------- Previous update was at 06:41 PM ----------

Perhaps you might benefit of implementing your own md5checks using native perl instead of making a system call.

Here's a tiny example of how to check the sums of some files in test.md5
You need to have the module Digest::MD5
This can easily be modified to your needs; to make it quiet or to give you a true or false return

Code:
#!/usr/bin/perl

# Author: Aia
# Date: 5-22-2014
# check_md5.pl
# reads a md5 hash file pair formatted file and checks its sum

use strict;
use warnings;
use Digest::MD5 qw(md5_hex);

my $md5_file = "test.md5";
my %groups;  


open my $fh_in, '<', $md5_file or die "Can't open $md5_file: $!\n";
while (my $line = <$fh_in>) {
    chomp $line;
    my ($key, $value) = split(" ", $line);
    $groups{$key} = $value;
}

close ($fh_in);

for my $key (keys %groups) {
    open my $fh, '<', $groups{$key} or die "Can't open $groups{$key}: $!\n";
    binmode ($fh);
    my $md5 = Digest::MD5->new;
    $md5->addfile($fh);
    close ($fh);
    if (  $key eq $md5->hexdigest ) {
        print "$groups{$key}: OK\n";
    }
    else {
        print "$groups{$key}: FAILED\n";
    }
}

This User Gave Thanks to Aia For This Post:
# 4  
Old 05-23-2014
@MadeInGermany:

Thanks for the input! Sometimes you just need a little bit to get things moving along Smilie

It is still queer that md5sum doesn't return some particular values for different errors...

@Aia:

Wow. Thanks again for your thoughtful help. Hope to have a grip on Perl like this someday.

In the meantime, this could work well on many points. We'll dig in now and see Smilie


Thanks a bunch, everyone; and have a great weekend --
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Shell Programming and Scripting

Perl failure with "main::$fn" used only once:" in error logs

Hi all, Can anyone guess why this is happening? I am new to Perl, so please help me to fix this error: - I have a static html file which calls the cgi-perl script. HTML Code: <html> <head> <title> Hey Dude! </title> </head> <body> <form method="POST"... (3 Replies)
Discussion started by: bashily
3 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

8. Shell Programming and Scripting

perl folder list with "..", without ".".

Hi Everyone, if my folder "foldera" inside has one file. so if i do if ($df =~ /^\./) { next; } then i will get ### filea ### if i want to have ### .. filea ### means also display the parent .., how should i modify the perl ~// in my code? Thanks ---------- Post updated... (6 Replies)
Discussion started by: jimmy_y
6 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question