チェックサムは、データの整合性を検証するために使用されます。いくつかのファイルがネットワークまたはシステムを介してコピーされていて、ネットワーク接続の切断やマシンの突然の再起動などの何らかのイベントのために、データが完全にコピーされなかったとします。
では、データの整合性をどのように検証しますか?まあ、そのCRCチェックサムメカニズムを通じて、データの整合性を検証できます. CRC チェックサムを計算できるさまざまなメカニズムがあります。たとえば、記事の 1 つ (IP ヘッダーのチェックサム) で、IP ヘッダーのチェックサムを見つける方法について説明しました。この記事では、ファイルまたは標準入力で提供されるデータのチェックサムを計算するために使用される Linux の「cksum」コマンドに焦点を当てます。
CRCとは?
CRC は巡回冗長検査の略です。
チェックサムは、通信中のデータに巡回冗長検査 (CRC) メカニズムを適用することで計算できます。通信チャネルを移動するデータの各ブロックには CRC コードまたはチェックサムが添付され、データ ブロックが宛先に到達すると、このチェックが再度適用されてチェックサム値が生成されます。宛先で生成されたチェックサムとデータ ブロックのチェックサム値が同じ場合、データは破損していないと考えられ、さらに使用できますが、2 つのチェックサム値が同じでない場合、その場合、データが破損していると見なされます
CRC という名前の理由:
- このメカニズムは巡回コードの基礎に基づいています (したがって、巡回 ).
- チェックサムとしてデータに添付されたコードは冗長です。つまり、転送されるデータに価値を追加しません (したがって、冗長 ).
- 小切手です (したがって、小切手 )
cksum コマンド
cksum コマンドは、引数として指定された各ファイルの巡回冗長検査 (CRC) を計算するために使用されます。 CRC は、データの整合性を検証する必要がある状況で重要になります。 cksum コマンドを使用すると、転送先ファイルのチェックサムと転送元ファイルのチェックサムを比較して、データ転送が成功したかどうかを判断できます。
このコマンドは、CRC 値を提供するだけでなく、出力にファイル サイズとファイル名も生成します。成功した場合、コマンドはステータス 0 で終了し、その他のステータス値は失敗を示します。
コマンド プロンプトで次のように入力すると、このコマンドの詳細情報を取得できます。
$ info coreutils 'cksum invocation'
cksum コマンドの例
1.基本的な例
非常に基本的なレベルでは、cksum コマンドを使用してファイルのチェックサムを表示できます。
$ cksum testfile.txt 3000792507 3 testfile.txt
上記の出力の最初の値 (大きな数字) はファイルのチェックサムで、次にファイルのサイズ、最後にファイルの名前があります。
2.コンテンツの変更に伴うチェックサムの変更
テスト ファイル「testfile.txt」の内容は次のとおりです:
$ cat testfile.txt Hi
テスト ファイルのチェックサムを計算するには、それを引数として cksum コマンドに渡します:
$ cksum testfile.txt 3000792507 3 testfile.txt
次に、ファイルの内容を変更します:
$ cat testfile.txt Hi everybody.
再度、テスト ファイルを引数として cksum コマンドに渡します:
$ cksum testfile.txt 2559130041 14 testfile.txt
したがって、内容が変更されると、チェックサムが変更されることがわかります。
3.コンテンツの変更は、必ずしもサイズの増減を意味するわけではありません
上記は基本的にも当てはまり、chksumにも当てはまります。意味を見てみましょう:
テストファイル「testfile.txt」の内容を確認してください:
$ cat testfile.txt Hi everybody
チェックサムに注意してください:
$ cksum testfile.txt 2559130041 14 testfile.txt
ここで、実際に何かを追加または削除するのではなく、ファイルのサイズが同じになるように、1 つの文字を別の文字に置き換えることによってコンテンツを変更します。
$ cat testfile.txt Hi everybudy.
ご覧のとおり、「o」を「u」に置き換えました。
今すぐチェックサムを比較してください:
$ cksum testfile.txt 3252191934 14 testfile.txt
そのため、ある文字が別の文字に置き換えられた場合でも、チェックサムが変更されていることがわかります。
4.中断されたコピー
さまざまなサブフォルダーとファイルを含む zip フォルダーをある場所から別の場所にコピーしていて、なんらかの理由でコピー プロセスが中断された場合、すべてが正常にコピーされたかどうかをどのように確認しますか?部分的なコピーの場合、宛先の全体的なチェックサムがソース フォルダーのチェックサムと異なることがわかっているため、cksum によって可能になります。
このシナリオは次の方法でシミュレートできます:
Linux.tar.gz と Linux_1.tar.gz を同じ「Linux」フォルダーから作成しました。違いは、Linux_1.tar.gz が「Linux」フォルダーに余分なテキスト ファイルが含まれているときに作成されたことです。
したがって、上記のシナリオは、Linux_1.tar.gz がコピーされていたが、ターゲットの Linux.tar.gz にコピーするテキスト ファイルが 1 つだけ残っているために中断された場合をシミュレートします。
これら両方のファイルのチェックサムを比較すると、
$ cksum Linux.tar.gz 756656601 1037079 Linux.tar.gz $ cksum Linux_1.tar.gz 2598429125 1037184 Linux_1.tar.gz
したがって、上記の出力は、ファイルのコピーが正しくないことを示唆するさまざまなチェックサム値を示しています。
5.標準出力のチェックサム
このコマンドは、ユーザーが「cksum」または「cksum-」と入力して stdin に書き込み、Ctrl+D を数回押す機能を提供します。このようにして、cksum は入力時に入力されたデータのチェックサムを返します。
$ cksum Lets check the checksum1135634677 23
上記の例では、文字列「チェックサムをチェックしましょう」のチェックサムを実際に計算しました。