Skoro sam imao potrebu da proverim md5 hash-eve nekih fajlova na NetBSD. Poceh nesto da se igram sa awk-om i onako uzgred pocnem da citam man stranicu za cksum(1), i naravno naidjem na "-c" opciju koja proverava md5 hash iz fajla. Zapravo opcija je ubacena od NetBSD 4.0 izdanja. Citajuci po netu nadjem da md5 iz FreeBSD nema tu opciju (OpenBSD cksum podrzava "-c" opciju). Tek instaliranjem md5sum (iz sysutils/coreutils) ta opcija je dostupna. Da ne duzim, evo koda koji nekome moze biti od koristi:
#!/bin/sh
# awk implementacija za: cksum -c MD5
md5 "$1" | \
awk '
NR==FNR{
a[$2]=$4
next
}
($2 in a){
if(a[$2] == $4)
print "OK: " $2
else
print "ERROR: " $2
}' - "$2"
Primer; recimo da hocete da skinete FreeBSD iso fajl. U istom direktorijumu postoji i fajl CHECKSUM.MD5 koji sadrzi md5 hash-eve fajlova. Naravno kao pametan korisnik uvek proverite dali je fajl ispravan:
$ ftp ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.0/8.0-RELEASE-i386-disc1.iso
$ ftp ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.0/CHECKSUM.MD5
$ ls
8.0-RELEASE-i386-disc1.iso CHECKSUM.MD5 md5_check.sh
$ ./md5_check.sh 8.0-RELEASE-i386-disc1.iso CHECKSUM.MD5
OK: (8.0-RELEASE-i386-disc1.iso)
$
Korisnije je kada imate mnogo vise od jednog fajla, recimo FreeBSD source:
$ ftp -V ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/8.0-RELEASE/src/
Trying 87.51.34.132...
ftp> get CHECKSUM.MD5
ftp> mget *.a*
mget sbase.aa [anpqy?]? a
Prompting off for duration of mget.
^C
ftp>
ftp> quit
$ ll
total 16930
drwxrwxrwt 2 soxxx soxxx - 360 Jan 16 23:52 ./
drwxr-xr-x 21 soxxx soxxx - 512 Jan 15 15:54 ../
-rw-r--r-- 1 soxxx soxxx - 5758 Nov 21 17:07 CHECKSUM.MD5
-rwxrwxrwx 1 soxxx soxxx - 192 Jan 16 23:31 md5_hash.awk*
-rw-r--r-- 1 soxxx soxxx - 75919 Nov 21 17:07 sbase.aa
-rw-r--r-- 1 soxxx soxxx - 521808 Nov 21 17:07 sbin.aa
-rw-r--r-- 1 soxxx soxxx - 976127 Nov 21 17:07 scddl.aa
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.aa
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ab
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ac
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ad
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ae
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.af
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ag
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ah
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ai
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.aj
-rw-r--r-- 1 soxxx soxxx - 1425408 Nov 21 17:07 scontrib.ak
-rw-r--r-- 1 soxxx wheel - 0 Jan 16 23:51 scontrib.al
-rw-r--r-- 1 soxxx wheel - 55920 Jan 16 23:51 scontrib.am
$ ./md5_hash.awk "s*" CHECKSUM.MD5
OK: (sbase.aa)
OK: (sbin.aa)
OK: (scddl.aa)
OK: (scontrib.aa)
OK: (scontrib.ab)
OK: (scontrib.ac)
OK: (scontrib.ad)
OK: (scontrib.ae)
OK: (scontrib.af)
OK: (scontrib.ag)
OK: (scontrib.ah)
OK: (scontrib.ai)
OK: (scontrib.aj)
OK: (scontrib.ak)
ERROR: (scontrib.al)
ERROR: (scontrib.am)
$
|