GNU/Linux >> Linux Esercitazione >  >> Linux

Come calcolare il checksum CRC in Linux usando il comando Cksum

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".


Linux
  1. Come salvare l'output dei comandi in un file in Linux

  2. Come estrarre il file tar.gz in Linux utilizzando la riga di comando

  3. Come riavviare Linux utilizzando la riga di comando

  4. Come uccidere un processo su Linux usando il comando?

  5. Come creare file sparsi in Linux usando il comando 'dd'

Come creare un file in Linux usando Terminal

Come bloccare un file di testo in Linux usando il comando flock

Come mescolare le linee in un file in Linux

Come verificare il checksum SHA256 del file in Linux

Come usare il comando lsof in Linux

Come utilizzare il comando shred Linux