检查驱动器是否已使用 xxd 和 uniq 清零?

检查驱动器是否已使用 xxd 和 uniq 清零?

我正在寻找一种方法来检查 USB 设备的整个二进制内容是否纯为 0。

我正在尝试这个命令: sudo xxd /dev/sdb | uniq但它没有输出并且永远运行。

我考虑过 Sort 命令,但我的理解是它需要读取文件而不仅仅是标准终端输出。

更新:我意识到我可以检查sudo xxd -a /dev/sdb,但我的问题仍然存在:有没有一种方法可以对终端的输出进行唯一排序,而无需先将其保存到文件中?

答案1

简单地使用odorhexdump应该没问题,因为这些程序避免输出重复的行(或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选项来打印磁盘中的非空行。如果您的磁盘已正确归零,则不应打印任何行。

相关内容