Il checksum viene utilizzato per verificare l'integrità dei dati. Supponiamo che un file venga copiato su una rete o su un sistema e, a causa di qualche evento come la perdita della connessione di rete o il riavvio improvviso della macchina, i dati non siano stati copiati completamente.
Ora, come verificheresti l'integrità dei dati? Bene, è attraverso il meccanismo di checksum CRC l'integrità dei dati può essere verificata. Esistono vari meccanismi attraverso i quali è possibile calcolare un checksum CRC. Ad esempio, in uno dei nostri articoli (checksum dell'intestazione IP) abbiamo discusso di come trovare il checksum di un'intestazione IP. In questo articolo ci concentreremo sul comando Linux 'cksum' che viene utilizzato per calcolare la somma di controllo dei file o dei dati forniti sullo standard input.
Cos'è CRC?
CRC sta per Cyclic Redundancy Check.
Il checksum può essere calcolato applicando il meccanismo di controllo di ridondanza ciclico (CRC) sui dati che vengono comunicati. Ad ogni blocco di dati che percorre il canale di comunicazione è associato un codice CRC o checksum e quando il blocco di dati raggiunge la destinazione, questo controllo viene applicato nuovamente per generare un valore di checksum. Se il checksum generato a destinazione e il valore del checksum nel blocco dati sono gli stessi, si ritiene che i dati non siano danneggiati e possono essere utilizzati ulteriormente, ma se i due valori del checksum non sono uguali, in tal caso si dice che i dati sono danneggiati o infetto.
Il nome CRC è perché:
- Questo meccanismo si basa sui fondamenti dei codici ciclici (quindi ciclici ).
- Il codice allegato ai dati come checksum è ridondante, ovvero non aggiunge alcun valore ai dati trasferiti (quindi ridondanza ).
- È un assegno (quindi assegno )
Il comando cksum
Il comando cksum viene utilizzato per calcolare il controllo di ridondanza ciclico (CRC) per ogni file fornito come argomento. CRC diventa importante in situazioni in cui l'integrità dei dati deve essere verificata. Usando il comando cksum, è possibile confrontare il checksum del file di destinazione con quello del file di origine per concludere se il trasferimento dei dati è andato a buon fine o meno.
Oltre a fornire il valore CRC, questo comando produce anche la dimensione del file e il nome del file nell'output. Il comando esce con lo stato zero in caso di successo e qualsiasi altro valore di stato indica un errore.
È possibile ottenere informazioni dettagliate su questo comando digitando quanto segue sul prompt dei comandi:
$ info coreutils 'cksum invocation'
Esempi di comandi cksum
1. Un esempio di base
A un livello molto semplice, il comando cksum può essere utilizzato per visualizzare il checksum per un file.
$ cksum testfile.txt 3000792507 3 testfile.txt
Il primo valore (numero grande) nell'output sopra è il checksum per il file, poi abbiamo la dimensione del file e infine il nome del file.
2. Modifiche al checksum con modifiche ai contenuti
Il file di prova 'testfile.txt' ha i seguenti contenuti:
$ cat testfile.txt Hi
Per calcolare il checksum del file di test, passalo come argomento al comando cksum :
$ cksum testfile.txt 3000792507 3 testfile.txt
Ora, Modifica il contenuto del file:
$ cat testfile.txt Hi everybody.
Passa di nuovo il file di prova come argomento al comando cksum :
$ cksum testfile.txt 2559130041 14 testfile.txt
Quindi vediamo che con la modifica dei contenuti, il checksum cambia.
3. Cambiare i contenuti non significa sempre aumentare o diminuire le dimensioni
Bene, quanto sopra è vero fondamentalmente anche e anche per chksum. Vediamo cosa significa :
Controlla il contenuto del file di prova 'testfile.txt' :
$ cat testfile.txt Hi everybody
Nota il checksum :
$ cksum testfile.txt 2559130041 14 testfile.txt
Ora, modifica il contenuto non aggiungendo o eliminando qualcosa, ma sostituendo un carattere con un altro in modo che le dimensioni del file rimangano le stesse.
$ cat testfile.txt Hi everybudy.
Quindi, come puoi vedere, ho sostituito "o" con "u".
Confronta ora il checksum:
$ cksum testfile.txt 3252191934 14 testfile.txt
Quindi vediamo che il checksum è cambiato anche se la modifica era di un carattere sostituito da un altro.
4. Una copia interrotta
Supponiamo che tu stia copiando una cartella compressa contenente varie sottocartelle e file da una posizione all'altra e per qualsiasi motivo il processo di copia è stato interrotto, quindi come controlleresti se tutto è stato copiato correttamente o meno? Bene, cksum lo rende possibile poiché ora sappiamo che in caso di copia parziale, il checksum complessivo della destinazione sarebbe diverso da quello della cartella di origine.
Puoi simulare questo scenario nel modo seguente:
Ho creato Linux.tar.gz e Linux_1.tar.gz dalla stessa cartella "Linux". La differenza è che Linux_1.tar.gz è stato creato quando la cartella "Linux" conteneva un file di testo aggiuntivo.
Quindi lo scenario sopra simula quando Linux_1.tar.gz veniva copiato ma veniva interrotto quando veniva lasciato un solo file di testo da copiare nel Linux.tar.gz di destinazione
Ora, quando confronto il checksum di entrambi questi file, vedo
$ cksum Linux.tar.gz 756656601 1037079 Linux.tar.gz $ cksum Linux_1.tar.gz 2598429125 1037184 Linux_1.tar.gz
Quindi l'output sopra mostra diversi valori di checksum che suggeriscono una copia errata del file.
5. Checksum dell'output standard
Questo comando fornisce una funzionalità in cui l'utente può digitare solo "cksum" o "cksum-" e scrivere su stdin e quindi premere Ctrl + D un paio di volte. In questo modo cksum fornisce il checksum dei dati inseriti in ingresso.
$ cksum Lets check the checksum1135634677 23
Nell'esempio sopra, abbiamo effettivamente calcolato il checksum della stringa "Controlliamo il checksum".