我想检查硬盘驱动器是否已成功清零。我读到这,指示运行:
$ sudo od /dev/disk2 | head
其硬盘返回结果为:
0000000 000000 000000 000000 000000 000000 000000 000000 000000
*
234250000
我读了这里那
head
返回提供给它的每个文件名的前十行。
我是否可以正确地假设,如果没有
| head
,od
就会将整个硬盘内容打印到终端?当我尝试这个时,我得到了相同的输出: 1 七位数字
0
和 8 六位数字0
和 1*
,除了*
我得到之后7216060060000
。 包括 在内的所有内容都是*
十“行”吗(尽管这不是文件并且不应该有任何行)?为什么只有第一个数字是七位数字?
这是什么
*
意思?这是否意味着其他所有内容都可以是任何内容(不一定是零),全是零(即我的整个硬盘全是零),还是所有相同的先前模式都在重复(即 1 个七位数0
和 8 个六位数0
)?这
od
手册页指出od
命令将:“将 FILE 的明确表示(默认情况下为八进制字节)写入标准输出。”什么是“八进制字节”?这表明它是非标准术语但可能是 6 位。我的 HDD 为 500 GB,扇区为 512 字节。这
7216060060000
等于该容量吗?7216060060000 八进制字节 * (6 位?/ 1 八进制字节?) * (1 字节/8 位) * (1 GB/1e9 字节) = 5412.045045 GB
这不是我的硬盘容量。是不是出了什么问题?
我的硬盘清零成功了吗?
答案1
- 默认情况下,输出 10 行后会停止
head
输出。由于输出总共只有三行,所以无论有没有 ,您都只能得到三行head
。 - 至于行,为什么只有文件才有线? 您想将所有命令输出都塞到一行吗?
- 它是一个八进制数,显示自输入开始以来已读取了多少字节。如果需要,它可以是更多数字。
从
man od
:-v, --output-duplicates do not use * to mark line suppression
因此
od
尽量避免打印重复的行。*
标记那些。从原始
od
文件(更清楚一点):输出的每一行都包含输入中的偏移量,后面跟着文件中的数据组。默认情况下,od 以八进制打印偏移量,并且每组文件数据都是一个 C 短整型输入,打印为单个八进制数。
因此,每个块作为一个整体都是一个八进制数。AC
short int
是通常为 2 个字节.od
取两个字节的数据,将其视为数字,然后以 8 进制将其打印为单个数字,并重复。每行有 8 个这样的块,因此每行有 16 个字节。偏移量也以 8 进制打印,8 进制中的 20 是 10 进制中的 16。由于偏移量以 8 为基数,因此转换为以 10 为基数:
$ echo $((8#7216060060000)) 500107862016 $ echo $((8#7216060060000 / 1000 / 1000 / 1000)) 500
$((N#X))
X
告诉 bash以基数形式读取N
。由于 bash 默认以十进制输出,因此执行此操作$((8#...))
会将八进制转换为十进制。是的。
答案2
这里您有很多问题,这是对第 5 个问题的回答,八进制输出表示三位二进制数据,每位数字的值都在 0-7 之间,其中 0 = 二进制 000,1 = 二进制 001,2 = 二进制 010,3 = 二进制 011,4 = 二进制 100,5 = 二进制 101,6 = 110,7 = 111。八进制在古代计算机系统中很流行,但十六进制使用 0-f 来表示每位数字从 0000 到 1111 的值,这种进制更紧凑,如今使用也更频繁。