comando md5sum modo binário e de texto

13

O md5sumcomando GNU possui dois modos: modo binário e modo de texto . Eu acho que a diferença está apenas em como os caracteres de nova linha são tratados? Estou certo?

No GNU / Linux, os dois modos sempre produzem o mesmo resultado; portanto, o único uso de -be -toptions é indicar o sinalizador ( *ou ) usado antes do nome do arquivo?

Em que circunstâncias os modos podem produzir resultados diferentes? Em sistemas Windows / MacOS? (Versões para essas plataformas disponíveis?)

chama congelada
fonte

Respostas:

11

No GNU / Linux, os dois modos sempre produzem o mesmo resultado

Sim, explicitamente. De man md5sum:

Nota: Não há diferença entre as opções de modo binário e de texto no sistema GNU [sic].

Isto é da md5sumimplementação que acompanha o GNU coreutils 8.21; Percebo que uma versão mais antiga (8.12) não possui esse aviso, mas presumo que o mesmo seria verdade de qualquer maneira.

Embora o AFAICT md5sumnão seja oficialmente padronizado (por exemplo, pelo POSIX), ele está disponível em várias plataformas em várias implementações e, obviamente, há algum esforço para torná-los compatíveis entre si para facilitar o uso nos sistemas.

Em relação a isso, o padrão ISO / ANSI C inclui funções de fluxo de alto nível para acessar arquivos. Como parte do padrão, eles estão disponíveis em qualquer sistema operacional que implemente o ISO C por meio de uma biblioteca compartilhada ou de um compilador. Como praticamente todos os sistemas operacionais têm esse recurso disponível (e são escritos com mais frequência em C), é um tipo de linguagem universal usada para implementar software potencialmente muito portátil.

Considerando o que faz, seria totalmente possível escrever um md5sumque compile e funcione em qualquer sistema operacional. Não estou afirmando que isso seja verdade na versão GNU coreutils, mas uma das funções de fluxo de arquivos de alto nível mencionadas anteriormente é a fopen()que é exigida pela ISO C para incluir uma bopção usada na abertura de um arquivo para indicar que ele está sendo aberto "como binário Arquivo". O que isso pode significar ou exigir do sistema não é estipulado pelo padrão, é apenas necessário que exista para que possa ser usado no sistema em que possa haver algum ( qualquer ) motivo para isso.

Não existe esse motivo nos sistemas operacionais linux / POSIX / * nix, portanto o switch não faz nada. Na especificação POSIX (um superconjunto de ISO C) para fopen () :

O caractere 'b' não terá efeito, mas é permitido para conformidade com o padrão ISO C.

Portanto, uma md5sumimplementação totalmente portátil pode usar as funções de fluxo de arquivos de alto nível ISO, uma vez que não há outros métodos para acessar arquivos no ISO C (a maioria das plataformas, incluindo as queixas com POSIX, também têm seus próprios métodos de nível inferior, mas usá-los não pode ser portável porque não está na ISO C) e também deve implementar os sinalizadores -be -tpara adicionar ou não a bopção ao fopen()ler o arquivo. Em sistemas onde isso não tem sentido, não fará diferença.

Novamente, não estou dizendo que o md5sum do GNU é escrito de uma maneira totalmente portátil ou derivado de um que é, mas obviamente ele está tentando cumprir, em sua operabilidade, um que seja. Observe que ter um sinalizador que não faz nada não é o mesmo que não ter o sinalizador - no primeiro caso, ele é especificado para ser bom, mas não faz nada, enquanto no caso posterior usá-lo pode ser um erro ou levar a um comportamento indefinido .

Cachinhos Dourados
fonte
1
Por que essas opções são adicionadas se são inúteis?
chama congelada
1
Eu adicionei alguns parágrafos acima sobre isso (TL; DR -> para torná-lo uma reclamação com versões de usuários do md5sum podem estar familiarizados com outros sistemas operacionais e código de lote, etc., escritos para tal).
goldilocks