我正在寻找一种方法来检查 USB 设备的整个二进制内容是否纯为 0。
我正在尝试这个命令:
sudo xxd /dev/sdb | uniq
但它没有输出并且永远运行。
我考虑过 Sort 命令,但我的理解是它需要读取文件而不仅仅是标准终端输出。
更新:我意识到我可以检查sudo xxd -a /dev/sdb
,但我的问题仍然存在:有没有一种方法可以对终端的输出进行唯一排序,而无需先将其保存到文件中?
答案1
简单地使用od
orhexdump
应该没问题,因为这些程序避免输出重复的行(或xxd -a
如上所述使用)。例如:
$ truncate -s 1M test
$ hexdump test
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0100000
$ od test
0000000 000000 000000 000000 000000 000000 000000 000000 000000
*
4000000
如果驱动器归零,那么输出不会与此有太大不同,只是最终地址会大得多。如果您看到任何其他数据,您可以点击Crtl- C。
为了避免在找到非零数据并填满终端后继续,您可以执行以下操作(在 中bash
):
count=0
stdbuf -oL od /dev/sdb |
while read line; do
echo "$line"
(( ++count > 3 )) && break
done
这将打印最多 4 行输出,从中您可以判断驱动器是否已归零。
Top 已经用 sort 肮脏地完成了这件事,你也可以这样做sudo xxd /dev/sdb | sort -u
。添加-u
排序选项相当于执行sort | uniq
.
答案2
xxd
我觉得这不是适合这个螺丝的锤子。您可以运行tr
删除空字节并查看是否还剩下任何内容:
[ -n "$(</dev/sdb tr -dc '\0' | head -c 1)" ]
您还可以使用od
,它会折叠空填充的行:
[ "$(od -tx1 -An -w1 | head -n 2 | tr -d ' \n')" = "00*" ]
答案3
我认为这个命令可以为你解决问题
xxd /dev/sdb | grep -v '0000 0000 0000 0000 0000 0000 0000 0000'
如果驱动器已调零,则此命令将不返回任何输出。如果它上面还有任何字节,命令会很乐意在屏幕上提示它
谢谢
答案4
cat -b /dev/disk2
尝试使用该cat
命令及其-b
选项来打印磁盘中的非空行。如果您的磁盘已正确归零,则不应打印任何行。