ddコマンド、まだまだ続きます。
今回はキーボードからの入力をddコマンドに与えて、ファイルを作ってみます。
試しにddコマンドに何もオプションを指定せずに実行。
takk@deb9:~/tmp$ dd > test.bin hello
コマンドが戻ってきません。ずっと入力待ちになっているようです。
次は、文字を入力後、Ctrl+Cを押して止めてみます。
takk@deb9:~/tmp$ dd > test.bin hello ^C0+1 レコード入力 0+0 レコード出力 0 bytes copied, 33.3524 s, 0.0 kB/s takk@deb9:~/tmp$
0 Byteをコピー、つまり中身が空のファイルが生成されました。
一応内容とサイズを確認してみます。
takk@deb9:~/tmp$ hd test.bin takk@deb9:~/tmp$ wc -c test.bin 0 test.bin takk@deb9:~/tmp$
ddコマンドでbs等のオプションを指定しないとデフォルトの512 Byteが蓄積されるまでコピーしないので、このように空ファイルになります。
次は、オプションで3Byteを指定してみます。入力する文字列として”abc”。
takk@deb9:~/tmp$ dd bs=1 count=3 > test.bin abc 3+0 レコード入力 3+0 レコード出力 3 bytes copied, 6.47145 s, 0.0 kB/s takk@deb9:~/tmp$
abcを入力後に、Enterを押せばコピーされます。
中身を見てみます。
takk@deb9:~/tmp$ hd test.bin 00000000 61 62 63 |abc| 00000003 takk@deb9:~/tmp$
abcの文字コードになってますね。
さて、指定したサイズよりも長い文字列を入力して、Enterを押すとどうなるでしょうか。
takk@deb9:~/tmp$ dd bs=1 count=3 > test.bin 123456 3+0 レコード入力 3+0 レコード出力 3 bytes copied, 2.88702 s, 0.0 kB/s takk@deb9:~/tmp$ 456 bash: 456: コマンドが見つかりません takk@deb9:~/tmp$
“123”までがファイルに格納されて、”456″はddコマンド終了後に、別コマンドとみなされて、実行されてしまいました。
“123”は正しく格納されています。
takk@deb9:~/tmp$ hd test.bin 00000000 31 32 33 |123| 00000003 takk@deb9:~/tmp$
キー入力ですが、文字しか入力できないわけではないです。
数値を入力してみます。
数値を入力するには、CTRL+Vの入力後に続けて該当するキーを押せばよいです。
次の例では、CTRL+V、Aを入力し、数値の1を指定しています。
takk@deb9:~/tmp$ dd bs=1 count=1 > test.bin ^A 1+0 レコード入力 1+0 レコード出力 1 byte copied, 6.14248 s, 0.0 kB/s takk@deb9:~/tmp$ takk@deb9:~/tmp$ hd test.bin 00000000 01 |.| 00000001 takk@deb9:~/tmp$
数値は、それぞれ以下のアルファベットが割り当てられています。
takk@deb9:~/tmp$ echo {A..Z} | tr ' ' "\n" | cat -n | pr -t5l1 | expand -t1 1 A 2 B 3 C 4 D 5 E 6 F 7 G 8 H 9 I 10 J 11 K 12 L 13 M 14 N 15 O 16 P 17 Q 18 R 19 S 20 T 21 U 22 V 23 W 24 X 25 Y 26 Z takk@deb9:~/tmp$
上の表から、数値26をファイルに保存したいなら、CTRL+V、Zとなります。
takk@deb9:~/tmp$ dd bs=1 count=1 > test.bin ^Z 1+0 レコード入力 1+0 レコード出力 1 byte copied, 7.67125 s, 0.0 kB/s takk@deb9:~/tmp$ takk@deb9:~/tmp$ hd test.bin 00000000 1a |.| 00000001 takk@deb9:~/tmp$
0x1a=26です。
0と27以降の入力方法はこの通り。
CTRL+[ 27
CTRL+\ 28
CTRL+] 29
CTRL+^ 30
CTRL+_ 31
CTRL+@ 0
32(0x20)からは、以下の通り。まあ、ASCIIコードですね。
takk@deb9:~/tmp$ seq 32 127 | perl -ne 'print chr' | od -tx1 -c -Ax 000000 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f ! " # $ % & ' ( ) * + , - . / 000010 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 000020 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f @ A B C D E F G H I J K L M N O 000030 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f P Q R S T U V W X Y Z [ \ ] ^ _ 000040 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f ` a b c d e f g h i j k l m n o 000050 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f p q r s t u v w x y z { | } ~ 177 000060 takk@deb9:~/tmp$
バイナリエディタがないときに、ファイルの一か所だけ修正、とかに使えるでしょうか。
コメント