命令结构
tail -c 100 filename | xxd
这个命令由三部分组成,通过管道 | 连接:
1. tail -c 100 filename
tail: 显示文件末尾内容的命令-c 100: 指定以字节为单位,显示最后 100 个字节-c表示 "character",但在二进制上下文中就是字节100是要显示的字节数(可以是任意数字)
filename: 要操作的目标文件
作用: 读取文件的最后 100 个字节,并将这些字节输出到标准输出(stdout)。
2. 管道符 |
- 作用 : 将前一个命令(
tail)的输出,作为后一个命令(xxd)的输入 - 机制 : 创建一个数据传输通道,将
tail的标准输出重定向到xxd的标准输入
3. xxd
- 功能: 十六进制转储工具(hexdump 的替代/增强版)
- 特点 :
- 默认以分组形式显示十六进制(每 2 字节一组,如
4b6f) - 同时显示对应的 ASCII 字符
- 显示偏移地址(文件位置)
- 默认以分组形式显示十六进制(每 2 字节一组,如
整体工作流程:
tail定位到文件末尾,读取最后 100 个字节- 这 100 个字节通过管道传递给
xxd xxd将这些字节转换为十六进制格式并显示
示例输出解释:
bash
$ tail -c 32 test.txt | xxd
# 输出可能如下:
00000000: 6c69 6e65 2033 0a6c 696e 6520 340a 6c69 ne 3.line 4.li
00000010: 6e65 2035 0a6c 696e 6520 360a 0a0a ne 5.line 6...
字段解释:
00000000:行首的偏移地址(十六进制)6c69 6e65 2033 0a6c 696e 6520 340a 6c69: 十六进制表示的字节- 每 2 个十六进制数字 = 1 个字节
- 每组(如
6c69)= 2 个字节(4 个十六进制数字)
ne 3.line 4.li: ASCII 字符表示6c= 'l',69= 'i',6e= 'n',65= 'e', 等等- 不可打印字符显示为
.
变体和对比:
不同显示格式:
bash
# 1. 紧凑格式(一行显示更多)
tail -c 100 file | xxd -c 32 # 每行显示32字节
# 2. 单字节分组(更清晰)
tail -c 100 file | xxd -g 1 # 每字节一组显示
# 3. 纯十六进制(无ASCII侧边栏)
tail -c 100 file | xxd -ps # 连续十六进制字符串
# 4. 显示原始偏移量
tail -c 100 file | xxd -s 0x1000 # 假设你希望偏移从0x1000开始
与 hexdump -C 对比:
bash
# 功能相似,但格式不同
tail -c 100 file | hexdump -C
# hexdump -C 输出格式:
# 00000000 6c 69 6e 65 20 33 0a 6c 69 6e 65 20 34 0a 6c 69 |line 3.line 4.li|
# 更传统的格式,单字节显示
实际应用场景:
- 查看文件尾部的魔数/签名:
bash
tail -c 8 image.jpg | xxd # 查看JPEG的结束标记
- 检查日志文件最后的二进制数据:
bash
tail -c 256 app.log | xxd -g 1
- 快速查看文件格式:
bash
# 查看文件最后部分,判断是否有特殊结构
tail -c 64 database.db | xxd
这个组合命令特别适合需要查看文件尾部十六进制格式的场景,结合了 tail 的截取能力和 xxd 的格式化显示能力。
当然可以!有几种快速查看文件最后几个字节的方法:
1. 最常用的方法 - tail 命令
bash
# 查看最后 100 个字节(以文本形式)
tail -c 100 filename
# 查看最后 50 个字节
tail -c 50 filename
2. 使用 hexdump 查看最后字节的十六进制
bash
# 查看最后 100 个字节的十六进制
tail -c 100 filename | hexdump -C
# 或者直接让 hexdump 显示最后部分
hexdump -C filename | tail -n 10
3. 更专业的十六进制查看工具
bash
# 使用 xxd 查看最后 100 个字节
tail -c 100 filename | xxd
# 查看最后 64 个字节并显示偏移量
tail -c 64 filename | xxd -g 1
4. 使用 od(八进制/十六进制转储)
bash
# 查看最后 50 个字节的十六进制
tail -c 50 filename | od -Ax -tx1
# 以十六进制和 ASCII 格式查看
tail -c 100 filename | od -Ax -tx1z
5. 最简洁的实时查看
bash
# 只查看最后几个字节(例如最后32字节)
tail -c 32 filename | cat -A
# 如果需要连续监控文件尾部变化
tail -c 100 -f filename # 会持续显示新增内容
示例对比:
bash
# 查看文件最后 64 字节的不同方式:
# 1. 纯文本查看
tail -c 64 file.bin
# 2. 十六进制 + ASCII(最常用)
tail -c 64 file.bin | hexdump -C
# 3. 紧凑的十六进制
tail -c 64 file.bin | xxd -ps -c 16
# 4. 带行号的十六进制
tail -c 64 file.bin | xxd -g 1
推荐用法:
- 快速查看文本文件末尾 :
tail -c N - 查看二进制文件末尾十六进制 :
tail -c N | hexdump -C - 需要精确的字节偏移 :
tail -c N | xxd -g 1
其中 hexdump -C 是最常用的格式,因为它同时显示:
- 偏移地址
- 十六进制字节
- ASCII 字符表示
- 每行 16 字节的标准格式