sha256sumがファイルエンド信号と入力エンド信号を異なる方法で処理するのはなぜですか?

sha256sumがファイルエンド信号と入力エンド信号を異なる方法で処理するのはなぜですか?

単純な文字列、つまり「abc」のsha256を計算しようとしています。私は使用して発見しましたシャー256島次のユーティリティ:

sha256sum file_with_string

次の結果を提供します。

sha256sum # enter, to read input from stdin
abc
^D

今すぐ:

edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb

終了信号が入力される前に、別の改行文字が標準入力に提供されることに注意してください。


最初に私を悩ませたのは、オンラインチェックサム電卓を使用してこれを確認することにしたときに結果が違っていたということです。

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

私の考えでは、これは私がstdinに入力した2番目の改行文字に関連しているようです。だから今回は^Dを2回挿入してみました(改行文字の代わりに)。結果は次のとおりです。

abcba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

もちろん、フォーマットが間違っていますが(改行がないため)、それ以外は上記と一致します。

後で、私はシェルの入力解析について明らかに理解していないことに気づきました。慎重に確認してみると、追加事項はありません新しいチームもともと指定したファイルにありますが、なぜこのような問題が発生しますか?

ベストアンサー1

違いは改行文字です。まず、abcsha256sumsの合計を収集しますabc\n

$ printf 'abc\n' | sha256sum 
edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb  -
$ printf 'abc' | sha256sum 
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  -

したがって、ba...ad合計は文字列のもので、abc1ed..cbはのものですabc\n。これで、ファイルに出力が表示されると、ed..cbファイルに改行文字があることを意味します。そして「テキストファイル」を考えると必要末尾の改行、新しいファイルを作成すると、ほとんどの編集者がファイルを追加します。

改行なしでファイルを取得するには、printf上記の方法を使用してください。fileファイルに改行文字がない場合は、警告が表示される方法を確認してください。

$ printf 'abc' > file
$ file file
file: ASCII text, with no line terminators

そして

$ printf 'abc\n' > file2
$ file file2
file2: ASCII text

今:

$ sha256sum file file2
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad  file
edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb  file2

おすすめ記事