Comando md5sum binario y modo texto

13

El md5sumcomando GNU tiene dos modos: modo binario y modo de texto . Supongo que la diferencia solo está en cómo se manejan los caracteres de nueva línea. Estoy en lo cierto?

En GNU / Linux, los dos modos siempre producen el mismo resultado, por lo que el único uso de -by -topciones es indicar la bandera ( *o ) utilizada antes del nombre del archivo.

¿En qué circunstancias pueden los modos producir resultados diferentes? ¿En sistemas Windows / MacOS? (¿Hay versiones disponibles para estas plataformas?)

llama congelada
fuente

Respuestas:

11

En GNU / Linux, los dos modos siempre producen el mismo resultado.

Si, explícitamente. De man md5sum:

Nota: No hay diferencia entre la opción de modo binario y de texto en el sistema [sic] GNU.

Esto es de la md5sumimplementación que se entrega con GNU coreutils 8.21; Noté que una versión anterior (8.12) no tiene este aviso, pero supongo que lo mismo sería cierto de todos modos.

Aunque AFAICT md5sumno está oficialmente estandarizado (p. Ej., POSIX), está disponible en varias plataformas en diversas implementaciones y obviamente hay un cierto esfuerzo para que sean compatibles entre sí para facilitar su uso en todos los sistemas.

En relación con esto, el estándar ISO / ANSI C incluye funciones de flujo de alto nivel para acceder a los archivos. Como parte del estándar, están disponibles en cualquier sistema operativo que implemente ISO C a través de una biblioteca compartida o un compilador. Como casi todos los sistemas operativos tienen esto disponible (y se escriben con mayor frecuencia en C), es una especie de lenguaje universal utilizado para implementar software potencialmente muy portátil.

Considerando lo que hace, sería totalmente factible escribir un documento md5sumque compilara y funcionara en cualquier sistema operativo. No estoy afirmando que esto sea cierto para la versión de GNU coreutils, pero una de las funciones de flujo de archivos de alto nivel mencionadas anteriormente es fopen(), que ISO C exige que incluya un binterruptor utilizado al abrir un archivo para indicar que se está abriendo "como binario expediente". Lo que eso puede significar o requerir del sistema no está estipulado por el estándar, solo se requiere que exista para que pueda usarse en el sistema donde pueda haber alguna ( cualquier ) razón para ello.

No existe tal razón en los sistemas operativos Linux / POSIX / * nix-style, por lo que el conmutador no hace nada. De la especificación POSIX (un superconjunto de ISO C) para fopen () :

El carácter 'b' no tendrá efecto, pero está permitido para la conformidad con la norma ISO C.

Por lo tanto, una md5sumimplementación completamente portátil podría usar las funciones de flujo de archivos ISO de alto nivel, ya que no hay otros métodos para acceder a los archivos en ISO C (la mayoría de las plataformas, incluidas las quejas POSIX, también tienen sus propios métodos de nivel inferior, pero usarlos no sea portátil porque no están en ISO C), y también debe implementar los indicadores -by -tpara agregar o no agregar la bopción fopen()cuando lea el archivo. En sistemas donde eso no tiene sentido, no hará ninguna diferencia.

Nuevamente, no estoy diciendo que el md5sum de GNU esté escrito de una manera tan completamente portátil o derivado de uno que es, pero obviamente está tratando de cumplir, en su operatividad, con uno que sea. Tenga en cuenta que tener una bandera que no hace nada no es lo mismo que no tener la bandera: en el primer caso, se especifica que está bien pero no hace nada, mientras que en el caso posterior su uso podría ser un error o conducir a un comportamiento indefinido .

encerrada dorada
fuente
1
¿Por qué se agregan estas opciones si son inútiles?
Llama congelada
1
He agregado algunos párrafos anteriores sobre esto (TL; DR -> para que se queje con las versiones de md5sum que los usuarios pueden estar familiarizados con otros sistemas operativos, y código de lote, etc. escrito para tal).
Ricitos