md5sum 程序不提供目录的校验和。我想为目录的整个内容(包括子目录中的文件)获取单个 MD5 校验和。也就是说,由所有文件组成的一个组合校验和。有没有办法做到这一点?
在Ubuntu 14.04,sha256sum从coreutils作品如我所料:
echo 879dd0d7637876be4796f7e6f194a111d21088be85cfe717fc97e2e7f05e79d2 /tmp/myfile | sha256sum -c
/tmp/myfile: OK
Run Code Online (Sandbox Code Playgroud)
但是,在 Debian Wheezy 上使用完全相同的文件执行完全相同的命令失败:
sha256sum: standard input: no properly formatted SHA256 checksum lines found
Run Code Online (Sandbox Code Playgroud)
我不明白这个。如何在 Debian 的 shell 脚本中可靠地验证校验和?
在 Ubuntu 14.04 上:
? sha256sum --version
sha256sum (GNU coreutils) 8.21
Run Code Online (Sandbox Code Playgroud)
关于 Wheezy:
$ sha256sum --version
sha256sum (GNU coreutils) 8.13
Run Code Online (Sandbox Code Playgroud)
两个操作系统上的联机帮助页都说:
SYNOPSIS
sha256sum [OPTION]... [FILE]...
DESCRIPTION
Print or check SHA256 (256-bit) checksums. With no FILE,
or when FILE is -, read standard input.
[...]
-c, --check
read …Run Code Online (Sandbox Code Playgroud) 看起来像mount -o loop更改了安装的图像文件。我下载了 ISO 映像文件并检查了它的 SHA-1 校验和。然后我挂载了那个 ISO 文件并且校验和改变了。这是我所做的确切步骤,从我的控制台 CentOS 7 x64 复制粘贴(注意,该 ISO 文件是只读的):
[mbartnicki@89-78-33-81 Downloads]$ ls -lh
total 3.1G
-r--r--r--. 1 mbartnicki mbartnicki 3.1G Mar 31 18:28 X17-58997.iso
[mbartnicki@89-78-33-81 Downloads]$ sha1sum X17-58997.iso
6c9058389c1e2e5122b7c933275f963edf1c07b9 X17-58997.iso
[mbartnicki@89-78-33-81 Downloads]$ sudo mount -o loop X17-58997.iso /mnt/iso/
mount: /dev/loop0 is write-protected, mounting read-only
[mbartnicki@89-78-33-81 Downloads]$ sha1sum X17-58997.iso
994944df320e9e03c032263d7b9e36157a0a587c X17-58997.iso
Run Code Online (Sandbox Code Playgroud)
我很惊讶,我在另一台机器(Ubuntu 14.04 x64)上重复了上述步骤,只是为了得到相同的结果:文件校验和在mount -o loop. 卸载 ISO 映像不会将其校验和返回到原始值;文件更改是持久的。此外,下一次挂载再次将校验和更改为某个新值。如何解释?
聚苯乙烯
通过添加ro挂载选项以只读方式挂载可防止文件被更改,因此如果我使用:
sudo mount -o ro,loop X17-58997.iso /mnt/iso
然后一切正常,ISO镜像文件挂载后保持不变。错误行为仅在ro …
我sha1sum还是sha512sum对的平均Linux系统,。
但是sha3sum可以生成SHA-3命令的命令在哪里呢?
在查找名称中带有“\”的文件的校验和时,为什么 md5sum 在校验和前面加上“\”?
$ md5sum /tmp/test\\test
\d41d8cd98f00b204e9800998ecf8427e /tmp/test\\test
Run Code Online (Sandbox Code Playgroud)
每个其他实用程序也是如此。
我经常在可供下载的文件旁边看到校验和。这种做法的目的使我难以理解。显然是为了检测损坏的文件,但是这种损坏的原因可能是什么?
文件肯定不会因传输错误而损坏,因为这些错误是由网络协议检测到的。当然,任何可以出于恶意目的更改文件的攻击者也可以同样更改给定的校验和。我们是否在检查硬盘驱动器错误?写作时比阅读时更容易发生这些吗?我错过了什么重要的东西吗?
是否有任何通用的解决方案来检查文件是否损坏?例如,视频文件是否损坏,或压缩文件是否损坏等。
Btrfs 为每个文件计算一个 crc32c 校验和。有没有办法可以查看存储的校验和(而不是仅仅读取文件并重新计算它)?
我有一个使用 Ubuntu 的家庭文件服务器。
最近,我的一个驱动器装满了,所以我又买了一个,把它扔进去了。
我有一个非常大的文件夹,该目录大小约为 1.7?T,并且包含相当数量的文件。
我使用GCP将文件从旧驱动器复制到新驱动器,它似乎运行良好。
我现在想在删除旧驱动器中的数据以释放空间之前,对照旧驱动器上的原始目录验证新驱动器上的新目录。我知道我可以做一个 CRC 检查来做到这一点。
具体怎么做呢?
所以我试图将 64MB 文件分割FileCarve.001成 512 字节段(每个块长 512 字节)。我需要确保文件在分割成较小的文件时具有相同的数据,因此我将cat所有文件进行标准输出并将其通过管道传输到sha256sum(有很多文件,所以我需要使用find和 来执行此操作xargs)。
当命令分割输出时,将文件分割为 512 字节段似乎会导致数据混乱split。
$ dd if=FileCarve.001 bs=512 | split -b512 - splits/img
131072+0 records in
131072+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 4.10824 s, 16.3 MB/s
$ sha256sum FileCarve.001
3e64100044099b10060f5ca3194d4d60414941c7cb26437330aba532852a60cd FileCarve.001
$ find splits/ -type f -print0 | xargs -0 cat | sha256sum
25b37f28204895e5d0b1cb160c5fa599d15188baf7e529ccc92a10fdb3f0515a -
Run Code Online (Sandbox Code Playgroud)
但将文件分割为 1 KB 段(1000 字节)似乎效果很好。
$ dd if=FileCarve.001 bs=512 | split -b1k …Run Code Online (Sandbox Code Playgroud)