2009-08-19 12 views
6

Cualquiera sabe por qué el programa BSD MD5 produce una salida de hash en este formato ...BSD md5 vs GNU md5sum formato de salida?

MD5 (checksum.md5) = 9eb7a54d24dbf6a2eb9f7ce7a1853cd0 

... mientras md5sum GNU produce mucho más sensato formato como este?

9eb7a54d24dbf6a2eb9f7ce7a1853cd0 checksum.md5 

Por lo que yo puedo decir, el formato md5sum es mucho más fácil de analizar y tiene más sentido. ¿Cómo se hace md5sum -check con md5? ¿Y qué significan las opciones -p, -q, -r, -t, -x? man md5 no dice nada sobre esas opciones! : |

+0

podría ir en poweruseruser/serverfault pero realmente no pertenece aquí. – spender

+3

... ¿o es superusuario? Nunca recuerdo – spender

+0

'md5 -r' producirá algo notablemente similar a' md5sum' (suma de comprobación, luego nombre de archivo). Por ejemplo, 'encontrar. -type f -print0 | xargs -0 md5 -r' lista las sumas de comprobación md5 para todos sus archivos. – Dave

Respuesta

4

Razones históricas, supongo. Mientras tanto, -q suprime "MD5 (...) =" de salida, entonces md5 -q checksum.md5 da

9eb7a54d24dbf6a2eb9f7ce7a1853cd0

Esto está implícito si md5 no recibe ningún argumento y se lee de stdin. Desafortunadamente md5sum en este caso deja "-" detrás de la suma de comprobación ("9eb7a54d24dbf6a2eb9f7ce7a1853cd0 -"), así que si estás en busca de alguna función genérica para devolver la suma de comprobación, esto es lo que podría ayudar:

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

página del manual de FreeBSD dice acerca de los argumentos

 -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

Uno puede usar la GNU md5sum -c checksum.md5 que buscará checksum archivo y comprobar contra el contenido checksum.md5 archivo.

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

ejemplo dentro de una llamada al sistema de Ruby para comprobar contra un BSD con formato md5 archivo:

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

Esto devolverá verdadero o falso.

2

Me doy cuenta de que esta es una página antigua, pero estaba haciendo sumas de comprobación en FreeBSD y revisándolas en Linux y encontré esta página también. Esta página no ayuda a resolver el problema, por lo que se le ocurrió esta pequeña sed script para crear las sumas de comprobación en FreeBSD que responden a la salida Linux md5sum:

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

Esto utilizará el comando de FreeBSD md5 y reorganizar la salida para parecerse a GNU md5sum.

Entonces en Linux que sólo puede utilizar md5sum --check md5sums.txt

También puede utilizar el script sed anterior con un archivo existente producido por el comando de FreeBSD md5.

También puse este alias en mi archivo .cshrc FreeBSD:

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

ahora en FreeBSD sólo puedo decir md5sum file1 file2 file3 ... y simplemente funciona.

+0

el script sed me dio un espacio menos que el md5sum de GNU en centos6. NBD, pero "diff" no funcionó sin masajearlo ligeramente. –

3

En los sistemas OS X BSD actuales puede especificar el comando md5 -r para obtener el resultado esperado.

[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 

Adición de la MD5 -r interruptor de hecho el aspecto de salida más como yo esperaba, y más fácil de diff con las sumas MD5 Linux que se produjeron desde una máquina 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 

Este fue el método más sencillo para mí hacer es fácil de diff de salida generada por el md5sum comando en una máquina Linux.