用BASH產生NUL byte, byte 1, byte2的資料
用BASH產生NUL,1,2的檔案
會有這個需求主要是需要在資料前端,尾端加入一些padding,tailing bytes,產生這些資料之後可以用cat將他們與產生的檔案做結合,達成完全以BASH處理的效果。
雖然看起來很簡單,不過有一些小陷阱
前置
因為是產生byte資料,所以會需要可以印出byte資料的指令hexdump來協助,後面都會用hexdump來協助印出byte的16進位資料,我先前的筆記在這裡
首要想法
最先想到的處理這個需求的方法就是echo ,不過馬上就被打臉,右方顯示ASCII,直接呼叫echo會給一般的字串而不是跳脫過的結果。
$ echo "\01" > 1.txt
$ hexdump -C 1.txt
00000000 5c 30 31 0a |\01.|
00000004
應該要是byte資料
查了下echo用法是用-e來套用跳脫字元的規則,我們可以看到確實就是有變成01,但是後面來個0a是怎麼回事?
$ echo -e "\01" > 1.txt
$ hexdump -C 1.txt
00000000 01 0a
處理掉0a
再查一下0a是什麼字元,看ASCII字元的wiki 得知是換行鍵Line feed
二進位 16進位 縮寫 名稱
0000 1010 0A LF 換行鍵
看來就是echo預設會多加換行的機制導致,再查一下man就是要再加-n要他別印LF
$ echo -en "\01" > 1.txt
$ hexdump -C 1.txt
00000000 01
結案
其他
另外,要產生NUL byte, byte 1, byte2的資料也可以透過printf處理
printf "\00" > 0.txt
printf "\01" > 1.txt
printf "\02" > 2.txt
而對於NUL還可以用/dev/zero來產生
dd bs=1 count=1 < /dev/zero > 0.txt
留言