comando binario e modalità testo md5sum


13

Il md5sumcomando GNU ha due modalità: modalità binaria e modalità testo . Immagino che la differenza sia solo su come vengono gestiti i personaggi newline? Ho ragione?

Su GNU / Linux, le due modalità producono sempre lo stesso risultato, quindi l'unico uso di -be delle -topzioni è quello di indicare il flag ( *o ) usato prima del nome del file?

In quali circostanze le modalità possono produrre risultati diversi? Su sistemi Windows / MacOS? (Versioni per queste piattaforme disponibili?)

Risposte:


11

Su GNU / Linux, le due modalità producono sempre lo stesso risultato

Sì, esplicitamente. Da man md5sum:

Nota: non esiste alcuna differenza tra l'opzione binaria e la modalità di testo sul sistema [sic] GNU.

Questo deriva dall'implementazione md5sumfornita con GNU coreutils 8.21; Ho notato che una versione precedente (8.12) non ha questo avviso ma presumo che lo stesso sarebbe vero comunque.

Sebbene AFAICT md5sumnon sia ufficialmente standardizzato (ad es. Da POSIX), è disponibile su varie piattaforme in varie implementazioni e c'è ovviamente qualche sforzo per renderle conformi tra loro per facilità d'uso su tutti i sistemi.

In relazione a ciò, lo standard ISO / ANSI C include funzioni di flusso di alto livello per l'accesso ai file. Come parte dello standard, sono disponibili su qualsiasi sistema operativo che implementa ISO C tramite una libreria condivisa o un compilatore. Poiché praticamente tutti i sistemi operativi hanno questo disponibile (e sono essi stessi scritti più spesso in C), è una sorta di linguaggio universale utilizzato per implementare software potenzialmente molto portatile.

Considerando ciò che fa, sarebbe assolutamente fattibile scrivere un file md5sumche potesse essere compilato e funzionante su qualsiasi sistema operativo. Non sto affermando che ciò sia vero per la versione GNU coreutils, ma una delle funzioni di flusso di file di alto livello menzionate in precedenza è fopen(), che è richiesta da ISO C per includere un binterruttore utilizzato nell'apertura di un file per indicare che viene aperto "come binario file". Ciò che può significare o richiedere il sistema non è stabilito dallo standard, è solo necessario che esista in modo che possa essere utilizzato sul sistema in cui potrebbe esserci qualche ( qualsiasi ) ragione per questo.

Non esiste una tale ragione sui sistemi operativi in ​​stile linux / POSIX / * nix, quindi lo switch non fa nulla. Dalle specifiche POSIX (un superset di ISO C) per fopen () :

Il carattere "b" non ha alcun effetto, ma è consentito per la conformità allo standard ISO C.

Pertanto, md5sumun'implementazione completamente portatile potrebbe utilizzare le funzioni di flusso di file ISO di alto livello, dal momento che non esistono altri metodi per accedere ai file in ISO C (la maggior parte delle piattaforme, comprese quelle con reclamo POSIX, ha anche i propri metodi di livello inferiore, ma l'utilizzo di questi non essere portatile perché non sono in ISO C) e dovrebbe anche implementare i flag -be -tper aggiungere o non aggiungere l' bopzione a fopen()quando legge il file. Su sistemi in cui ciò non ha senso, non farà alcuna differenza.

Ancora una volta, non sto dicendo che md5sum di GNU sia scritto in un modo completamente portatile o derivato da uno che è, ma ovviamente sta cercando di conformarsi, nella sua operabilità, a uno che lo è. Nota che avere una bandiera che non fa nulla non è la stessa cosa che non avere la bandiera - nel primo caso, si specifica che va bene ma non fa nulla, mentre nel caso successivo l'utilizzo potrebbe essere un errore o portare a un comportamento indefinito .


1
Perché queste opzioni vengono aggiunte se sono inutili?
fiamma congelata,

1
Ho aggiunto alcuni paragrafi sopra su questo (TL; DR -> per fare lamentele con le versioni degli utenti md5sum che potrebbero avere familiarità con altri sistemi operativi, e codice batch, ecc. Scritto per tali).
Riccioli d'oro,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.