GNU/Linux >> Linux Esercitazione >  >> Linux

Md5sum comando binario e modalità testo?

Il md5sum di GNU comando ha due modalità:binario modalità e testo modalità. Immagino che la differenza sia solo su come vengono gestiti i caratteri di nuova riga? Ho ragione?

Su GNU/Linux, le due modalità producono sempre lo stesso risultato, quindi il solo uso di -b e -t opzioni è indicare il flag (* o ) utilizzato prima del nome del file?

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

Risposta accettata:

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

Sì, in modo esplicito. Da man md5sum :

Nota: Non c'è differenza tra l'opzione della modalità binaria e di testo sul sistema GNU [sic].

Questo è dal md5sum implementazione fornita con GNU coreutils 8.21; Ho notato che una versione precedente (8.12) non ha questo avviso, ma presumo che lo stesso sarebbe comunque vero.

Sebbene AFAICT md5sum non è ufficialmente standardizzato (ad es. da POSIX), è disponibile su varie piattaforme in varie implementazioni e c'è ovviamente uno sforzo per renderle compatibili 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, questi sono disponibili su qualsiasi sistema operativo che implementa ISO C tramite una libreria condivisa o un compilatore. Dal momento che praticamente tutti i sistemi operativi lo hanno disponibile (e sono loro stessi scritti più spesso in C), è una sorta di linguaggio universale utilizzato per implementare software potenzialmente molto portabile.

Considerando quello che fa, sarebbe del tutto fattibile scrivere un md5sum che compilerebbe e funzionerebbe 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 è incaricato da ISO C di includere un b interruttore utilizzato nell'apertura di un file per indicare che viene aperto "come file binario". Ciò che ciò potrebbe significare o richiedere al sistema non lo è previsto dallo standard, deve solo esistere in modo che possa essere utilizzato su sistemi in cui potrebbero essercene alcuni (qualsiasi ) motivo.

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 deve avere alcun effetto, ma è consentito per la conformità allo standard ISO C.

Quindi, un md5sum completamente portatile l'implementazione potrebbe utilizzare le funzioni di flusso di file ISO di alto livello, poiché non ci sono altri metodi per accedere ai file in ISO C (la maggior parte delle piattaforme, comprese quelle di reclamo POSIX, ha anche i propri metodi di livello inferiore, ma l'utilizzo di questi non sarebbe portabile perché non sono in ISO C), e dovrebbe anche implementare il -b e -t flag per aggiungere o non aggiungere il b opzione per fopen() quando legge il file. Su sistemi in cui ciò non ha senso, non farà alcuna differenza.

Correlati:ulimit PICKLE:"Operazione non consentita" e "Comando non trovato"?

Ancora una volta, non sto dicendo che md5sum di GNU sia scritto in un modo così completamente portatile o derivato da uno che lo è, ma ovviamente sta cercando di conformarsi, nella sua operabilità, a quello che è. Si noti che avere un flag che non fa nulla non è lo stesso che non avere il flag:nel primo caso, è specificato che va bene ma non fa nulla, mentre nel caso successivo l'utilizzo potrebbe essere un errore o portare a un comportamento indefinito.


Linux
  1. Awk one-liner e script per aiutarti a ordinare i file di testo

  2. Utilizzo dei comandi Sed,ex e perl per trovare e sostituire un testo in Linux

  3. Meno comandi e evidenziazione della sintassi?

  4. Tutorial vim con esempi di comandi

  5. Bash - Comando data e spazio

fd – Un'alternativa semplice e veloce per trovare il comando

Trova comando in Linux (Trova file e directory)

Grep Command in Linux (Trova testo nei file)

Comando di uscita Bash e codici di uscita

Copiare e incollare testo sul terminale Linux

Come trovare e sostituire il testo in Vim