Linux の od コマンドは、ファイルの内容をさまざまな形式で出力するために使用され、デフォルトは 8 進数形式です。
このコマンドは、不要な変更や文字について Linux スクリプトをデバッグする場合に特に役立ちます。
この記事では、od コマンドの使用方法を例を挙げて説明します。
このコマンドの基本的な構文は次のとおりです。
od [OPTION]... [FILE]...
1. -b オプションを使用して、ファイルの内容を 8 進形式で表示
以下は、この例で使用される入力ファイルです:
$ cat input 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
この入力ファイルに対して od コマンドを実行します。
$ od -b input 0000000 061 012 062 012 063 012 064 012 065 012 066 012 067 012 070 012 0000020 071 012 061 060 012 061 061 012 061 062 012 061 063 012 061 064 0000040 012 061 065 012 061 066 012 061 067 012 061 070 012 061 071 012 0000060 062 060 012 0000063
したがって、出力が 8 進数形式で生成されていることがわかります。 od の出力の最初の列は、ファイル内のバイト オフセットを表します。
2. -c オプションを使用してファイルの内容を文字形式で表示
同じ入力ファイルを使用する (上記の例 1 と同様)。
$ od -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 0000020 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 0000040 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 0000060 2 0 \n 0000063
したがって、出力が文字形式で生成されたことがわかります。
3. -A オプションを使用して、さまざまな形式でバイト オフセットを表示します
バイト オフセットは、次のいずれかの形式で表示できます:
- 16 進数 (-x と -A を併用)
- 8 進数 (-o と -A を併用)
- 10 進数 (-d と -A を併用)
以下は、さまざまな形式のオフセットの例です:
$ od -Ax -c input 000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 000010 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 000020 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 000030 2 0 \n 000033
$ od -Ad -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 0000016 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 0000032 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 0000048 2 0 \n 0000051
$ od -Ao -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 0000020 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 0000040 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 0000060 2 0 \n 0000063
したがって、-A オプションに指定された入力に従って、最初の列 (バイト オフセットを含む) がさまざまな形式で表示されることがわかります。
4. 「-An」オプションを使用してオフセット情報を表示しない
次の例を考えてみましょう:
$ od -An -c input 1 \n 2 \n 3 \n 4 \n 5 \n 6 \n 7 \n 8 \n 9 \n 1 0 \n 1 1 \n 1 2 \n 1 3 \n 1 4 \n 1 5 \n 1 6 \n 1 7 \n 1 8 \n 1 9 \n 2 0 \n
したがって、バイト オフセット関連の情報が表示されていないことがわかります。
5.いくつかのバイトをスキップした後に出力を表示
これは、-j オプションを使用して実現されます。以下に例を示します:
$ od -j9 -c input 0000011 \n 6 \n 7 \n 8 \n 9 \n 1 0 \n 1 1 \n 1 0000031 2 \n 1 3 \n 1 4 \n 1 5 \n 1 6 \n 1 7 0000051 \n 1 8 \n 1 9 \n 2 0 \n 0000063
上記の出力を例 2 の出力と比較すると、最初の 9 バイトが出力からスキップされていることがわかります。
6. -N オプションを使用して制限されたバイト数を出力に表示
これは、上記の例 5 で説明した -j オプションの反対です。以下に例を示します:
$ od -N9 -c input 0000000 1 \n 2 \n 3 \n 4 \n 5 0000011
したがって、出力には 9 バイトしか表示されていないことがわかります。
7. -i オプションを使用して出力を 10 進整数として表示
次の例を考えてみましょう:
$ od -i input 0000000 171051569 171182643 171313717 171444791 0000020 808520249 170995978 822751793 875629107 0000040 171258122 822752817 942737975 171520266 0000060 667698 0000063
-i と -b を組み合わせると、10 進整数の表示方法に関する詳細情報が得られます。以下に例を示します:
$ od -ib input 0000000 171051569 171182643 171313717 171444791 061 012 062 012 063 012 064 012 065 012 066 012 067 012 070 012 0000020 808520249 170995978 822751793 875629107 071 012 061 060 012 061 061 012 061 062 012 061 063 012 061 064 0000040 171258122 822752817 942737975 171520266 012 061 065 012 061 066 012 061 067 012 061 070 012 061 071 012 0000060 667698 062 060 012 0000063
したがって、上記の出力は、8 進出力が整数出力としてどのように表示されるかを示しています。
8. -x オプションを使用して出力を 16 進数の 2 バイト単位で表示
次の例を考えてみましょう:
$ od -x input 0000000 0a31 0a32 0a33 0a34 0a35 0a36 0a37 0a38 0000020 0a39 3031 310a 0a31 3231 310a 0a33 3431 0000040 310a 0a35 3631 310a 0a37 3831 310a 0a39 0000060 3032 000a 0000063
出力が 16 進数の 2 バイト単位で表示されていることがわかります。
9. -o オプションを使用して、内容を 2 バイトの 8 進単位で表示
次の例を考えてみましょう:
$ od -o input 0000000 005061 005062 005063 005064 005065 005066 005067 005070 0000020 005071 030061 030412 005061 031061 030412 005063 032061 0000040 030412 005065 033061 030412 005067 034061 030412 005071 0000060 030062 000012 0000063
オプションを指定せずに od コマンドを実行すると、同じ出力が表示されることに注意してください。以下に例を示します:
$ od input 0000000 005061 005062 005063 005064 005065 005066 005067 005070 0000020 005071 030061 030412 005061 031061 030412 005063 032061 0000040 030412 005065 033061 030412 005067 034061 030412 005071 0000060 030062 000012 0000063
10. -w オプションを使用して出力幅をカスタマイズ
次の例を考えてみましょう:
$ od -w1 -c -Ad input 0000000 1 0000001 \n 0000002 2 0000003 \n 0000004 3 0000005 \n 0000006 4 0000007 \n 0000008 5 0000009 \n 0000010 6 0000011 \n 0000012 7 0000013 \n 0000014 8 0000015 \n 0000016 9 0000017 \n 0000018 1 0000019 0 0000020 \n 0000021 1 * 0000023 \n 0000024 1 0000025 2 0000026 \n 0000027 1 0000028 3 0000029 \n 0000030 1 0000031 4 0000032 \n 0000033 1 0000034 5 0000035 \n 0000036 1 0000037 6 0000038 \n 0000039 1 0000040 7 0000041 \n 0000042 1 0000043 8 0000044 \n 0000045 1 0000046 9 0000047 \n 0000048 2 0000049 0 0000050 \n 0000051
上記の出力では、出力幅が 1 に縮小されていることがわかります。
11. -v オプションを使用して重複を出力
上記の例 10 の出力からわかるように、* が出力されています。これは、同じ行または重複する行の出力を抑制するために行われます。ただし、 -v オプションを使用すると、これらの行も出力できます。以下に例を示します:
$ od -w1 -v -c -Ad input 0000000 1 0000001 \n 0000002 2 0000003 \n 0000004 3 0000005 \n 0000006 4 0000007 \n 0000008 5 0000009 \n 0000010 6 0000011 \n 0000012 7 0000013 \n 0000014 8 0000015 \n 0000016 9 0000017 \n 0000018 1 0000019 0 0000020 \n 0000021 1 0000022 1 0000023 \n 0000024 1 0000025 2 0000026 \n 0000027 1 0000028 3 0000029 \n 0000030 1 0000031 4 0000032 \n 0000033 1 0000034 5 0000035 \n 0000036 1 0000037 6 0000038 \n 0000039 1 0000040 7 0000041 \n 0000042 1 0000043 8 0000044 \n 0000045 1 0000046 9 0000047 \n 0000048 2 0000049 0 0000050 \n 0000051
12. –
を使用してコマンド ラインからの入力を受け入れる次の例を考えてみましょう:
$ od -c - The Geek Stuff0000000 T h e G e e k S t u f f 0000016
したがって、最初に stdin を介して入力が与えられ、次に ctrl+d を数回押すと、od コマンドの出力が表示されたことがわかります。
13. od コマンドを使用して非表示の文字を表示
次の入力を検討してください:
The Geek ^MStuff
上記の文字列を含むファイルを cat コマンドを使用して出力すると、次の出力が表示されます:
$ cat input Stuffeek
しかし、ご覧のとおり、これは正確にはファイルの内容ではありません。
これで -c オプションを指定して od コマンドを使用できます:
$ od -c input 0000000 T h e G e e k \r S t u f f \n 0000020
そのため、od コマンドは、文字列の間に改行なしのキャリッジ リターンが挿入されたことを明確に表示します。これにより、cat コマンドによってめちゃくちゃな出力が表示されていました。