2009-08-19 8 views
6

Qualsiasi sa perché programma BSD MD5 hash produce in uscita in questo formato ...BSD md5 vs GNU md5sum formato di uscita?

MD5 (checksum.md5) = 9eb7a54d24dbf6a2eb9f7ce7a1853cd0 

... mentre GNU md5sum produce molto formato più sensato come questo?

9eb7a54d24dbf6a2eb9f7ce7a1853cd0 checksum.md5 

Per quanto posso dire, il formato md5sum è molto più facile da analizzare e ha più senso. Come si fa md5sum -check con md5? E cosa significano le opzioni -p, -q, -r, -t, -x? man md5 non dice nulla su quelle opzioni! : |

+0

potrebbe andare su poweruser/serverfault ma in realtà non appartiene a questo. – spender

+3

... o è un superutente? Non ricordo mai – spender

+0

'md5 -r' produrrà qualcosa di molto simile a' md5sum' (checksum, then filename). Ad esempio, 'find. -tipo f -print0 | xargs -0 md5 -r' elenca i checksum md5 per tutti i tuoi file. – Dave

risposta

4

Ragioni storiche, credo. Nel frattempo, -q sopprimere "MD5 (...) =" uscita, in modo md5 -q checksum.md5 dà

9eb7a54d24dbf6a2eb9f7ce7a1853cd0

Questo è implicito se md5 non è dato alcun argomento e si legge da stdin. Purtroppo md5sum in questo caso lascia "-" dietro il checksum ("9eb7a54d24dbf6a2eb9f7ce7a1853cd0 -"), quindi se siete alla ricerca di qualche funzione generica per restituire la somma di controllo, ecco quello che potrebbe aiutare:

 
checksum() { 
     (md5sum <"$1"; test $? = 127 && md5 <"$1") | cut -d' ' -f1 
} 
checksum /etc/hosts 

pagina man di FreeBSD dice sugli argomenti

 -p  Echo stdin to stdout and append the checksum to stdout.

-q  Quiet mode ‐ only the checksum is printed out. Overrides the -r 
     option. 

-r  Reverses the format of the output. This helps with visual diffs. 
     Does nothing when combined with the -ptx options. 

-t  Run a built‐in time trial. 

-x  Run a built‐in test script. 

0

si può usare la GNU md5sum -c checksum.md5 che cercherà checksum di file e verificare contro il contenuto checksum.md5 file.

md5sum -c checksum.md5 | grep "checksum: OK" -

esempio all'interno di una chiamata di sistema di Ruby per controllare contro una BSD formattato .md5 di file:

system("md5sum -c checksum.md5 | grep \"checksum: OK\" -")

Ciò restituirà vero o falso.

2

Mi rendo conto che questa è una vecchia pagina, ma stavo facendo i checksum su FreeBSD e li ho controllati su Linux e ho trovato anche questa pagina. Questa pagina non ha aiutato a risolvere il problema, così mi si avvicinò con questo piccolo sed script per creare le checksum su FreeBSD che corrispondono all'uscita Linux md5sum:

md5 file [file ...] | sed -e 's#^MD5 [(]\(.*\)[)] = \(.*\)$#\2 \1#' > md5sums.txt 

Questo userà il comando di FreeBSD md5 e riorganizzare la l'output è simile a GNU md5sum.

Poi su Linux posso solo usare md5sum --check md5sums.txt

È anche possibile utilizzare quanto sopra sed script con un file esistente prodotto dal comando di FreeBSD md5.

Ho anche messo questo alias nel mio file .cshrc FreeBSD:

alias md5sum "md5 \!* | sed -e '"'s#MD5 [(]\(.*\)[)] = \(.*\)$#\2 \1#'"'" 

ora su FreeBSD posso solo dire md5sum file1 file2 file3 ... e funziona solo.

+0

lo script sed mi ha dato uno spazio in meno rispetto a GNU md5sum su centos6. NBD, ma "diff" non ha funzionato senza massaggiare leggermente. –

3

Sugli attuali sistemi OS X BSD è possibile specificare il comando md5 -r per ottenere l'output previsto.

[email protected]:/vms/DevOps-v3.4$ md5 vmware* 
MD5 (vmware-0.log) = 61ba1d68a144023111539abee08f4044 
MD5 (vmware-1.log) = 97bc6f22b25833c3eca2b2cc40b83ecf 
MD5 (vmware-2.log) = f92a281102710c4528d4ceb88aa0ac9b 
MD5 (vmware.log) = 1f7858d361929d4bc5739931a075c0ad 

Aggiunta del md5 -r interruttore ha reso l'aspetto di uscita più come mi aspettavo, e più facile da diff con le somme MD5 linux che sono state prodotte da una macchina Linux.

[email protected]:/vms/DevOps-v3.4$ md5 -r vmware* 
61ba1d68a144023111539abee08f4044 vmware-0.log 
97bc6f22b25833c3eca2b2cc40b83ecf vmware-1.log 
f92a281102710c4528d4ceb88aa0ac9b vmware-2.log 
1f7858d361929d4bc5739931a075c0ad vmware.log 

Questo è stato l'approccio più semplice per me fare è facile da diff da output generato dal comando dimd5sum su una macchina Linux.