首页   

玩转服务器—你的数据是否完整?

生信菜鸟团  · 生物  · 昨天

主要观点总结

本文主要介绍了在数据分析过程中,如何判断文件完整性,特别是处理测序数据原始文件时的方法,包括使用校验和(Checksum)进行文件完整性验证,详细介绍了MD5校验和的使用及其特性,并提供了在多种场景下的使用示例。

关键观点总结

关键观点1: 文件完整性验证的重要性

在数据分析过程中,确保文件完整性是非常重要的,以避免数据在传输过程中出现的损坏或篡改。

关键观点2: 校验和(Checksum)的作用

校验和是一种通过特定数学运算生成的文件唯一数字值,用于验证文件的完整性。

关键观点3: MD5的介绍及特性

MD5是一种常用的哈希函数,用于生成128位哈希值(摘要)。它具有定长输出、不可逆性、高效计算和弱抗碰撞性等特性。

关键观点4: MD5的应用及计算示例

文中提供了使用MD5校验文件完整性的具体步骤和示例,包括计算MD5值、文件校验以及使用命令行工具进行批量操作等。

关键观点5: 其他文件校验方法和工具

除了MD5,还有其他文件校验方法,如SHA-1、SHA-256等。此外,还有一些工具可以用于检查压缩文件的完整性。


正文

滴水穿石 非一日之功


在数据分析伊始,判断文件的完整性是一个基本步骤,尤其是在处理测序数据原始文件时。那么有哪些方法呢?

校验和(Checksum)

校验和是一种通过对文件内容进行特定的数学运算,生成一个唯一的数字值(例如,MD5、SHA-1、SHA-256等)。该值可以用于验证文件的完整性。

  • MD5md5sum filename
  • SHA-1sha1sum filename
  • SHA-256sha256sum filename

在网络传输、设备之间转存、复制大文件等时,可能会出现传输前后数据不一致的情况。为避免这种情况可以重新计算其校验和,并与原始校验和进行比较。如果两者相同,则文件未被篡改。因此,在数据分析过程中一个良好的习惯是,每次传输完数据都进行一下文件校验。

通常比较常用的是使用MD5值校验。MD5(Message-Digest Algorithm 5,消息摘要算法 5)是一种哈希函数,用于生成128 位(16 字节) 的哈希值(摘要)。通常以32 个十六进制字符的形式表示。它是一种不可逆加密算法,用于验证数据完整性,而不是用于加密和解密。

MD5 的特性

  • 定长输出:无论输入数据多大,MD5 都会输出 128 位(32 个十六进制字符)的哈希值。
  • 不可逆性:MD5 不能通过哈希值反推原始数据。
  • 高效计算:计算 MD5 哈希值的速度较快,适合大数据量校验。
  • 弱抗碰撞性:不同的输入理论上应该产生不同的 MD5 值,但由于哈希碰撞问题,在高安全性场景(如密码存储、数字签名)已不推荐使用。但在生信数据分析中,使用MD5校验足矣。

计算MD5值

md5sum 是 Linux 和 macOS 中的一个命令行工具,用于计算和验证文件的 MD5 哈希值(MD5 校验和)

##字符串md5值
echo -n "TCATGATTGAATGGAATTGAATGGAATCATCGAATG" |md5sum
###-n 选项避免 echo 产生换行符,否则 MD5 计算结果会不同。

#
#单个文件
md5sum align_star_r1_se.sh 

#
#批量
md5sum ./align_star_r*
md5sum ./* >bam_md5.txt
生成文件md5值
md5文件示例

MD5文件通常包含两列,一列为待校验文件的md5值,另一列为待校验文件

文件校验

通常是使用-c 参数即可。但也可以根据需求,选择合适的选项来更精确地控制验证过程。

  • --ignore-missing:跳过缺失文件。
  • --quiet:只报告校验失败的文件。
  • --status:只返回退出状态码,不输出任何文件信息。
  • -w--warn:在文件格式不正确时发出警告。
  • --strict:遇到格式错误时返回非零状态

基本用法

##文件校验
md5sum -c bam_md5.txt 
校验示例

注:
1、MD5.txt 包含两列,一列为待校验文件的md5值,另一列为待校验文件名,如果第二列包含文件路径,那么 md5sum -c 就需要在合适的目录下执,以确保程序能正确识别到校验文件。比如下面这个情况,就需要在data文件所在的目录下执行 md5sum -c ,而不能是在fastq文件所在的目录下执行(除非自己重新编辑MD5文件的第二列信息)。

2、md5sum 是校验文件内容,与文件名是否相同无关
3、md5sum 值逐位校验,所以文件越大,校验时间越长。

跳过缺失文件

一个包含多个文件的校验和文件 md5.txt,如果你只下载了其中一部分文件,可以使用 --ignore-missing 来忽略那些缺失的文件。md5sum 会跳过它们,不会报告错误,只有存在的文件会被验证。

md5sum -c --ignore-missing md5.txt
跳过缺失文件

只显示校验不通过的文件

如果你只想知道哪些文件验证失败,而不关心成功的文件,可以使用 --quiet

md5sum -c --quiet  md5_124.txt 
只显示失败文件

成功的文件不会输出任何信息,只有校验和不匹配的文件才会显示在输出中。

显示格式不正确的文件

如果md5文件中有无效的哈希值,要在任何哈希值不正确时发出警告,可以使用 --warn 选项。

md5sum -c -w md5.txt 
md5sum -c --warn md5.txt 
识别无效MD5值

在脚本中使用

在自动化脚本中,如果需要进行文件一致性检验时,可以采用如下方法:

#!/bin/bash
#
md5sum -c --status md5.txt
Result=$?

echo "File check status is: $Result"
exit $Result

--status 只关心 md5sum 是否成功,,而不需要显示每个文件的验证状态。

  • 如果所有文件都正确,命令会静默成功返回(退出状态码 0)。
  • 如果文件校验失败,命令会返回失败(退出状态码 1)。

巧用解压缩

如果没有MD5值文件,对于压缩文件(如.tar.gz.zip等),通常可以通过解压缩的 -t 参数来检查文件的完整性。详见:玩转服务器8—Linux文件压缩与解压一览表

gzip -t file.fastq.gz
bzip2 -t file.txt.bz2
tar -txf file.tar.gz
unzip -t file.zip
unrar t file.rar
7z t file.7z
.....
压缩文件校验

如果检验完之后,很不幸,你的原始数据有损坏,但是你又没有备份,或许可以采用这个方法拯救一下: SeqKit — 超快速的 FASTA和FASTQ 文件操作工具包


如果你也需要共享服务器,详见:满足你生信分析计算需求的低价解决方案福利抢购方式:

还等什么呢,赶快扫描下面二维码添加微信抢购吧!





文末友情宣传

强烈建议你推荐给身边的博士后以及年轻生物学PI,多一点数据认知,让他们的科研上一个台阶:

© 2024 精读
删除内容请联系邮箱 2879853325@qq.com