GNU/Linux >> Tutoriales Linux >  >> Linux

Comando Md5sum ¿Modo binario y de texto?

El GNU md5sum El comando tiene dos modos:binario modo y texto modo. Supongo que la diferencia está solo en cómo se manejan los caracteres de nueva línea. ¿Tengo razón?

En GNU/Linux, los dos modos siempre producen el mismo resultado, por lo que el único uso de -b y -t opciones es indicar la bandera (* o ) usado antes del nombre del archivo?

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

Respuesta aceptada:

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

Sí, explícitamente. De man md5sum :

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

Esto es del md5sum implementación que se envía 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 md5sum no está oficialmente estandarizado (p. ej., por POSIX), está disponible en varias plataformas en varias implementaciones y obviamente hay algún 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 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. Dado que casi todos los sistemas operativos tienen esto disponible (y generalmente están escritos en C), es una especie de lenguaje universal que se usa para implementar software potencialmente muy portátil.

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

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

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

Entonces, un md5sum completamente portátil La implementación podría usar las funciones de flujo de archivos de alto nivel ISO, ya que no hay otros métodos para acceder a los archivos en ISO C (la mayoría de las plataformas, incluidas las de quejas de POSIX, también tienen sus propios métodos de nivel inferior, pero usarlos no sería portátil porque no están en ISO C), y también debería implementar -b y -t banderas para agregar o no agregar el b opción a fopen() cuando lee el archivo. En los sistemas donde eso no tiene sentido, no hará ninguna diferencia.

Relacionado:ulimit PICKLE:¿"Operación no permitida" y "Comando no encontrado"?

Una vez más, no estoy diciendo que md5sum de GNU esté escrito de una manera tan completamente portátil o derivado de uno que lo sea, pero obviamente está tratando de cumplir, en su operatividad, con uno que lo 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 último caso su uso podría ser un error o conducir a un comportamiento indefinido.


Linux
  1. Awk one-liners y scripts para ayudarlo a ordenar archivos de texto

  2. Comando Cat de Linux:uso y ejemplos

  3. Comandos de Linux:descripción general y ejemplos

  4. Comandos de Linux:trabajos, bg y fg

  5. ¿Qué podría causar que el comando de archivo en Linux informe un archivo de texto como datos binarios?

fd:una alternativa simple y rápida para encontrar el comando

Buscar comando en Linux (Buscar archivos y directorios)

Comando Grep en Linux (Buscar texto en archivos)

Comando de salida de Bash y códigos de salida

Copiar y pegar texto en la terminal de Linux

Cómo encontrar y reemplazar texto en Vim