linux下如何读写文件、数据以16进制形式显示
shell下读取文件可以使用dd指令,以16进制显示数据可以使用hexdump指令,一个例子:
#读取数据
#从MTD0设备中0地址开始读取256K数据,blocksize是65536byte,
dd if=/dev/mtd0 of=/tmp/a bs=65536 skip=0 count=4
#以16进制形式展示文件
hexdump -Cv /tmp/a
#写入数据
#从MTD0设备中0x2600000地址开始写入1M数据,blocksize是262144 byte,
dd if=/tmp/a of=/dev/mtd0 bs=262144 seek=152 count=4
有两点需要注意:
1、 MTD设备挂载的写函数一般没有擦除操作,写之前需要手动进行擦除,可以直接挂接带有擦除动作的写接口。
2、MTD设备可能存在没有写权限的情况,可以使用chattr -i /dev/mtd0增加权限。
hexdump
hexdump用于以16进制、10进制、8进制、ascii码形式打印文件内容,也可以是标准输入的内容。
用法
hexdump [选项] 文件 …
|
|
|
|
|
|
|
选项 | 说明 |
---|---|
-b | 单字节8进制格式显示 |
-e | 指定格式化输出表达式 |
– | – |
-f | 指定格式输出表达式文件 |
-n | 长度 |
– | – |
-s | 偏移 |
常见用法:
- 字节方式显示且不要省略
hexdump -Cv /tmp/a
2.显示某一段
hexdump -Cv /tmp/a -s 65536 -n 1024
dd指令
Linux dd命令用于读取、转换并输出数据。
dd可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。
参数说明:
· if=文件名:输入文件名,默认为标准输入。即指定源文件。
· of=文件名:输出文件名,默认为标准输出。即指定目的文件。
· ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。 obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。 bs=bytes:同时设置读入/输出的块大小为bytes个字节。
· cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
· skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
· seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
· count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
· conv=<关键字>,关键字可以有以下11种:
conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternate ebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swab:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。
· --help:显示帮助信息
· --version:显示版本信息