Kontrolní součet se používá k ověření integrity dat. Předpokládejme, že se nějaký soubor kopíruje přes síť nebo přes systém a v důsledku nějaké události, jako je ztráta síťového připojení nebo náhlý restart počítače, se data nezkopírovala úplně.
Jak byste nyní ověřili integritu dat? No, jeho prostřednictvím mechanismu kontrolního součtu CRC lze ověřit integritu dat. Existují různé mechanismy, pomocí kterých lze vypočítat kontrolní součet CRC. Například v jednom z našich článků (kontrolní součet IP hlavičky) jsme diskutovali o tom, jak najít kontrolní součet IP hlavičky. V tomto článku se zaměříme na linuxový příkaz „cksum“, který se používá k výpočtu kontrolního součtu souborů nebo dat poskytovaných na standardním vstupu.
Co je CRC?
CRC znamená cyklickou kontrolu redundance.
Kontrolní součet lze vypočítat použitím mechanismu kontroly cyklické redundance (CRC) na data, která jsou sdělována. Každý blok dat, který prochází komunikačním kanálem, je připojen s CRC kódem nebo kontrolním součtem, a když datový blok dosáhne cíle, tato kontrola se znovu použije pro vygenerování hodnoty kontrolního součtu. Pokud jsou kontrolní součet vygenerovaný v cíli a hodnota kontrolního součtu v datovém bloku stejné, pak se předpokládá, že data nejsou poškozená a lze je dále použít, ale pokud tyto dvě hodnoty kontrolního součtu nejsou stejné, pak se v takovém případě data považují za poškozená nebo infikované.
Název CRC je, protože:
- Tento mechanismus je založen na základech cyklických kódů (proto cyklický ).
- Kód připojený k datům jako kontrolní součet je nadbytečný, tj. nepřidává žádnou hodnotu přenášeným datům (proto redundance ).
- Je to kontrola (proto kontrola )
Příkaz cksum
Příkaz cksum se používá pro výpočet cyklické kontroly redundance (CRC) pro každý soubor, který je mu poskytnut jako argument. CRC se stává důležitým v situacích, kdy je třeba ověřit integritu dat. Pomocí příkazu cksum lze porovnat kontrolní součet cílového souboru s kontrolním součtem zdrojového souboru a dojít k závěru, zda byl přenos dat úspěšný nebo ne.
Kromě zadání hodnoty CRC tento příkaz také vytváří velikost souboru a název souboru ve výstupu. Příkaz se v případě úspěchu ukončí se stavem nula a jakákoli jiná hodnota stavu indikuje selhání.
Podrobné informace o tomto příkazu lze získat zadáním následujícího příkazu do příkazového řádku:
$ info coreutils 'cksum invocation'
příklady příkazů cksum
1. Základní příklad
Na velmi základní úrovni lze příkaz cksum použít k zobrazení kontrolního součtu pro soubor.
$ cksum testfile.txt 3000792507 3 testfile.txt
První hodnota (velké číslo) ve výstupu výše je kontrolní součet pro soubor, pak máme velikost souboru a nakonec název souboru.
2. Kontrolní součet se mění se změnou obsahu
Testovací soubor „testfile.txt“ má následující obsah:
$ cat testfile.txt Hi
Chcete-li vypočítat kontrolní součet testovacího souboru, předejte jej jako argument příkazu cksum :
$ cksum testfile.txt 3000792507 3 testfile.txt
Nyní upravte obsah souboru:
$ cat testfile.txt Hi everybody.
Znovu předejte testovací soubor jako argument příkazu cksum :
$ cksum testfile.txt 2559130041 14 testfile.txt
Vidíme tedy, že se změnou obsahu se mění i kontrolní součet.
3. Změna obsahu nemusí vždy znamenat zvětšení nebo zmenšení velikosti
Výše uvedené platí v zásadě také a dokonce i pro chksum. Podívejme se, co to znamená:
Zkontrolujte obsah testovacího souboru ‘testfile.txt’ :
$ cat testfile.txt Hi everybody
Poznamenejte si kontrolní součet :
$ cksum testfile.txt 2559130041 14 testfile.txt
Nyní změňte obsah tak, že ve skutečnosti nebudete něco přidávat nebo mazat, ale nahrazením jednoho znaku jiným, aby velikost souboru zůstala stejná.
$ cat testfile.txt Hi everybudy.
Takže jak vidíte, nahradil jsem „o“ za „u“.
Nyní porovnejte kontrolní součet:
$ cksum testfile.txt 3252191934 14 testfile.txt
Vidíme tedy, že se kontrolní součet změnil, i když změna byla nahrazena jedním znakem jiným.
4. Přerušená kopie
Předpokládejme, že kopírujete zazipovanou složku obsahující různé podsložky a soubory z jednoho umístění do druhého a z jakéhokoli důvodu byl proces kopírování přerušen, tak jak byste zkontrolovali, zda bylo vše zkopírováno úspěšně nebo ne? No, cksum umožňuje, protože nyní víme, že v případě částečné kopie by se celkový kontrolní součet cílového umístění lišil od kontrolního součtu zdrojové složky.
Tento scénář můžete simulovat následujícím způsobem:
Vytvořil jsem Linux.tar.gz a Linux_1.tar.gz ze stejné složky ‚Linux‘. Rozdíl je v tom, že Linux_1.tar.gz byl vytvořen, když složka „Linux“ obsahovala další textový soubor.
Výše uvedený scénář tedy simuluje, když byl Linux_1.tar.gz kopírován, ale byl přerušen, když zbýval pouze jeden textový soubor ke zkopírování do cílového Linux.tar.gz
Když nyní porovnám kontrolní součet obou těchto souborů, vidím
$ cksum Linux.tar.gz 756656601 1037079 Linux.tar.gz $ cksum Linux_1.tar.gz 2598429125 1037184 Linux_1.tar.gz
Takže výše uvedený výstup ukazuje různé hodnoty kontrolního součtu, což naznačuje nesprávnou kopii souboru.
5. Kontrolní součet standardního výstupu
Tento příkaz poskytuje funkci, ve které může uživatel zadat pouze „cksum“ nebo „cksum-“ a psát na stdin a poté několikrát stisknout Ctrl+D. Tímto způsobem cksum dává kontrolní součet dat zadaných na vstupu.
$ cksum Lets check the checksum1135634677 23
Ve výše uvedeném příkladu jsme ve skutečnosti vypočítali kontrolní součet řetězce „Pojďme zkontrolovat kontrolní součet“.