私はUnixに初めて触れており、いくつかのコマンドの機能を理解できません。たとえば、xxd
ppmファイル(たとえば)xxd image.ppm
に使用すると、次の出力が表示されます。
00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55 P6.111 132.255.U
00000010: 6137 5966 3958 6939 566a 3953 6739 5464 a7Yf9Xi9Vj9Sg9Td
00000020: 3b57 643a 5763 3654 6335 5161 334e 5c30 ;Wd:Wc6Tc5Qa3N\0
00000030: 4f5a 3250 5d35 5361 3556 6334 5561 3352 OZ2P]5Sa5Vc4Ua3R
00000040: 5e32 515d 3256 6035 5b64 3856 6136 4a55 ^2Q]2V`5[d8Va6JU
...
...
誰かがこの出力が何を表すかを説明できますか?
ベストアンサー1
3つの部分は、16進数データと文字データ(印刷可能な場合)で表される入力の先頭のオフセットです。行は良い整数で、画面によく合うので16バイトです。
これらの表示は、バイナリデータとテキストデータの両方が重要な状況でよく使用されます。たとえば、tcpdump -X
このようなものを使用します。
最初の行に:
00000000: 5036 0a31 3131 2031 3332 0a32 3535 0a55 P6.111 132.255.U
オフセット00000000
は0です。なぜならそれが始まりだからです。50
、36
および改行文字など0a
の文字コードです。印刷できない文字は、右側の列にドットで印刷されます。P
6
いくつかのバリエーションでは、中間セクションのバイトが各グループ内で「反転」されてもよい。これは、プログラムが入力をリンクされた個々のバイトではなくリトルエンディアン数として解釈して表示する場合に発生する可能性があります。
xxd -e
それがまさにそれがすることです。考慮する:
$ printf "ABCD" | xxd -e -g2
00000000: 4241 4443 ABCD
41
forA
と42
for B
、残りの 2 つは逆順で表示されます。od
GNU coreutils もグループ内でバイトを逆に置き換えます。疑わしい場合は、もう一度確認するか、1対1のグループ化を試してください。 (例od -x
とod -tx1
ここを比較してください。)
もちろん、データ自体の意味はppm形式の文書でも参照できます。私のシステムにはマニュアルページがありますppm(5)
。 (オンラインdie.netバージョンフォーマットが破損しています。 )
最初の行では、サンプルあたり8ビットの111 x 132ピクセルサイズのRGB画像であることがわかります。