
简介rdseedv5.2.tar.gz是面向地震数据处理场景的专业工具包专注解决SEED标准格式数据的读取、解析、转换与质量分析问题适合地震台网研究人员、相关专业师生及需要批量处理地震记录的技术人员使用。整个包共246个文件以C语言源码和头文件为主干覆盖核心处理逻辑与接口声明另含makefile编译脚本、可执行程序、PDF说明文档、版本更新记录等辅助材料其中源码占比突出便于按需修改定制压缩包大小仅2.03MB方便快速部署与学习。目前已有400人学习下载。除了可直接运行的rdseed程序包内还提供数据提取、格式转换、质量检查、时间序列分析和数据归档等功能的源代码实现便于二次开发文档与示例则能帮助用户从SEED向Mini-SEED、SAC等格式转换为地震科研与数据预处理提供完整工具链。 做地震数据处理的人多多少少都见过这个名字rdseedv5.2.tar.gz。我第一次从数据下载页面拿到它时还以为是某个台站的波形数据包解压之后才发现里面躺着一堆 C 源码和 Makefile。rdseed 是地震学里颇有年头的一个 SEED 格式解包工具5.2 是它的经典源码版本号tar.gz 只是打包压缩格式跟程序本身的功能没有直接关系。这篇文章不谈纯理论只讲怎么把这个源码包变成能跑的命令怎么用 SEED 数据解出 SAC 波形以及我把编译、运行、批量处理过程中踩过的坑一并列出来。适合正在处理 SEED/miniSEED 历史数据又不想对着交互式提示发懵的人。1. 先把 rdseed 和它的容器搞明白1.1 rdseedv5.2.tar.gz 这个文件名透露了什么文件名拆开看就是三部分rdseed 是主程序名v5.2 是版本号tar.gz 是编码方式。tar 负责把整个目录打包成一个归档文件gzip 负责压缩。很多地震学相关的命令行工具都用这种形式分发源码原因也简单tar 能保留 Unix 下的文件权限gzip 能把源文件压小两者组合之后你在任何类 Unix 系统上解压都能直接拿到一致的文件结构。先养成一个习惯解压之前不要直接上手先把后缀验证一下tar -tzf rdseedv5.2.tar.gz | head -20这条命令只列出压缩包里的文件名不做实际解压确认目录结构和版本无误后再执行tar -xzf rdseedv5.2.tar.gzWindows 用户如果没装 WSL用 7-Zip 也可以解 tar.gz但后续编译必须在 Linux 或 WSL 环境里因为源码包是按 Unix 工具链写的没有现成的 Windows 可执行文件。miniSEED 处理工具链里rdseed 算是最后一个还靠源码分发的“老家伙”掌握解压和编译这步后面才走得顺。1.2 SEED 数据为什么需要专门工具来解SEED 全称是 Standard for the Exchange of Earthquake Data它是地震学界为了交换原始波形数据而定义的二进制格式一个 SEED 卷里既包括采样数据又包括台站、通道、传感器响应这类元数据信息。你拿到一个 .seed 文件直接用 SAC 或文本编辑器打开大概率是一堆乱码因为数据是按 blockette 分块的波形和头段交错在同一个文件里。rdseed 干的事情就是把这套复杂的二进制容器解析开按你的需要输出成 SAC、AH、SEGY、CSS 或简单文本格式。它还会把仪器响应单独导出比如生成 RESP 文件或 SAC PZ 文件这些后续做地震波形模拟和反演都绕不开。现在新工具不少ObsPy 可以直接读 SEEDseed2sac 也能做类似的事但有一个现实问题大量科研历史数据是用老版本 SEED 格式存的早期一些 blockette 定义并不完全规范新工具读取时多多少少会漏字段或直接报错。rdseed 当年是 IRIS 主推的解包程序对旧格式的兼容性反而更稳所以很多老数据项目复现时还得把它捡起来。2. 源码包编译与环境准备2.1 编译前要装齐的工具rdseed 是 C 语言写的编译需要 gcc、make以及一些 X11 相关的头文件库。X11 的部分好多人不理解其实老版本工具带了一个简单的图形界面模块虽然 90% 的人只走命令行交互但 Makefile 默认会把它一起编出来所以缺 X11 头文件时还是会报错。在 Debian/Ubuntu 系系统上可以一次性装齐基础依赖sudo apt update sudo apt install build-essential libx11-dev libxt-dev libmotif-devmacOS 上先确保装了命令行工具xcode-select --install如果后续编译提示缺 Motif 库再用 Homebrew 装 openmotifbrew install openmotif装完依赖再看源码包里的 README这一步不能省。不同分发包结构不太一样有的带 Configure 脚本有的直接给 Makefile先读文档能避免后面走弯路。2.2 解压和编译从源码到可用命令进入解压后的目录一般文件布局是 src/、etc/、README顶层可能没有 configure而是一个名为 Configure 的脚本。先用 tar 解压然后cd rdseedv5.2 cat README ./Configure make如果包里没有 Configure就直接试 make老版本源码的 Makefile 通常能直接编译最多改一下 CC 或 X11 路径。编译过程出现一堆 warning 是好事说明编译器已经跑起来了只要最终在当前目录下生成了 rdseed 这个可执行文件就算成功。用下面命令验证一下./rdseed -h如果你的环境路径里没有~/bin建议建一个并把可执行文件放进去mkdir -p ~/bin cp rdseed ~/bin/然后确认 PATH 里包含~/bin没有就加到.bashrc或.zshrcexport PATH$HOME/bin:$PATH这里想多说一句新版 gcc 在编译老代码时会因为隐式函数声明报错我遇到过好几次。如果 make 到一半报一堆 implicit-function-declaration可以先在 CFLAGS 里加上-Wno-errorimplicit-function-declaration试试别一上来就改源码改不好反而把行为改乱。2.3 用 conda 隔离环境跑老工具系统环境里已经跑着 ObsPy、GMT 一堆东西时再为 rdseed 装系统级依赖很容易把现有环境弄脏。此时 conda 隔离环境是更干净的选择也顺便回应一下最近总有人问的“conda 环境 tar.gz 创建环境”话题。先建个专用环境conda create -n seismo python3.11 conda activate seismo conda install -c conda-forge gcc_linux-64 make这里的重点是conda 环境本身不自带编译器装完 gcc_linux-64 之后再回到 rdseed 源码目录编译cd rdseedv5.2 export CCx86_64-conda-linux-gnu-cc ./Configure make cp rdseed $CONDA_PREFIX/bin/这样就等于把老工具圈进了 conda 环境不会污染系统自带环境其他项目也不会因为 PATH 把 rdseed 误认成系统命令。顺便澄清一个误区rdseed 的源码 tar.gz 不是 conda 包不能直接conda install rdseedv5.2.tar.gz。如果想把整个 seismo 环境打包给别的机器用要借助 conda-packpip install conda-pack conda pack -n seismo -o seismo.tar.gz在目标机器上解包后source 一下环境激活脚本就能用这个 tar.gz 才属于 conda 环境层面的打包和 rdseed 源码包是两种完全不同的东西别混为一谈。3. rdseed 的核心用法SEED 数据变 SAC3.1 交互式问答与最小上手示例rdseed 默认是交互式程序不传选项直接运行会问一堆问题比如“是否输出 SAC 文件”“是否提取 RESP 响应文件”“是否覆盖已存在文件”等等。第一次接触很容易卡在回答问题上。我的习惯是先拿一个体积很小的 .seed 文件跑一遍手动把问题的顺序录下来形成自己的答案模板。举一个最常见的问答流rdseed -f demo.seed程序提示是否输出 SAC 时输入 1是否提取 RESP 时输入 0是否允许覆盖现有文件时输入 1。rdseed 的提示是数字选择制一般 1 表示 yes0 表示 no。手动跑通后后续就可以用管道一次性喂答案printf 1\n0\n1\n1\n0\n1\n | rdseed -f demo.seed这里强调一点不同小版本的 rdseed 提示顺序可能不一致答案串不能盲抄自己手动跑一遍最可靠。我有一段时期就是死在“照抄别人答案串”上后来老老实实录了一遍交互过程再写到脚本里一切就正常了。3.2 常用选项速查表rdseed 命令行选项不少但经常用的就那么几个。整理成一张速查表方便你随手查选项用途典型用法-f指定输入 SEED/miniSEED 文件rdseed -f data.seed-d指定输出目录rdseed -f data.seed -d ./out-o允许覆盖已存在文件rdseed -f data.seed -o-R输出 RESP 仪器响应文件rdseed -f data.seed -R-p输出 SAC PZ 文件rdseed -f data.seed -p-g生成 SAC 宏文件rdseed -f data.seed -g-l只列出卷内容不实际解包rdseed -l data.seed-s输出简要统计信息rdseed -s data.seed-q安静模式减少终端输出rdseed -q -f data.seed几个选项可以组合比如既想解出 SAC又想要 RESP 响应文件就用rdseed -f data.seed -d ./out -R -o程序会在输出目录里生成 .sac 波形文件和 .resp 响应文件命名里包含台网、台站、通道、起始时间和采样率后续用 SAC 命令或 ObsPy 读取时记得按这个命名规则去匹配文件。3.3 批量处理多台站数据实际工作中不会只有一个 SEED 文件通常一个台网会按时间或台站分卷。批量处理的时候不建议手动一个个跑写个循环脚本更省力mkdir -p SAC_out for f in *.seed; do echo processing $f printf 1\n0\n1\n0\n1\n | rdseed -f $f -d SAC_out done这个脚本的逻辑是先建好输出目录然后遍历当前目录下所有 .seed 文件用固定的答案串喂给 rdseed。这里有个细节答案串里的选项顺序必须和你实际版本的提示顺序一致我第一次写循环时没注意跑到第二个文件就报错了。如果文件比较多还可以用 GNU parallel 并行处理ls *.seed | parallel -j 4 printf 1\n0\n1\n0\n1\n | rdseed -f {} -d SAC_out并行虽然快但要注意磁盘 IO。rdseed 解包时会同时生成多个文件数据量巨大的情况下并行太猛容易把内存和磁盘占满我的建议是先在单文件上测一次估算输出体积再决定并行数。4. 实际运维中的常见问题与避坑指南4.1 编译失败大多是缺依赖不是代码问题rdseed 源码本身已经很多年没大改了编译报错大概率是环境里缺库。最常见的错误是X11/Intrinsic.h: No such file or directory 或 Xm/Xm.h: No such file or directory前者说明缺 libx11-dev 或 libxt-dev后者说明缺 libmotif-dev。Debian/Ubuntu 下把之前列的库装一遍问题基本就没了。macOS 上如果缺 openmotif不要硬改 Makefile先尝试 brew install。还有一种很坑的情况是系统里装了新版 libcrdseed 旧源码编译时因为某个调用冲突直接 fail。这种我建议别花太多时间改源码直接在 conda 环境里装相对老版本的 gcc 工具链编译效果往往更好。4.2 脚本卡在交互提示答案串要喂对你在脚本里跑echo | rdseed这类操作时发现程序像死了一样卡住多半是交互输入没对应上。rdseed 会输出多行提示你的回答顺序错了一位后面所有行为就跑偏甚至陷入无限等输入。解决办法是先把交互流程固化下来。Linux 上可以用 script 命令录制终端会话script rdseed_session.log rdseed -f demo.seed # 手动回答完所有问题后 exit script -a rdseed_session.log之后查看日志文件把问题和答案整理成模板串。写进脚本时为了避免转义和换行问题建议用 printf 而不是 echo每行对应一次回答。下面是一个更稳的写法把答案串放到变量里ANSWERS$(printf 1\n0\n1\n0\n1\n) printf %b\n $ANSWERS | rdseed -f demo.seed -d SAC_out这样至少输出和输入都是可控的排查时思路也清晰。4.3 数据文件本身异常时的判断思路rdseed 报“Unable to open header”或“EOF reached prematurely”这类错误时先别怀疑程序不对大概率是 SEED 文件本身的问题。第一步做完整性校验。下载中断是最常见的尤其是几十 GB 的大卷网络一抖就丢尾部。建议下载后先比对 MD5 或 SHA256sha256sum data.seed第二步用 rdseed 自己的列表模式检查卷内容rdseed -l data.seed如果列表能看到台站和通道只是解包时某个通道失败可能是某个 blockette 与程序版本不兼容可以在输出时排除异常通道或者用 ObsPy 先读一遍确认数据可读。第三步检查文件名和路径别用带空格或特殊符号的文件名老程序对路径的解析能力有限我遇到过文件在中文目录里解包全乱的情况改成纯英文路径后就正常了。4.4 conda 环境和 tar.gz 迁移的边界前面提到过源码 tar.gz 和 conda 环境 tar.gz 是两种东西这里再往深说一点。用 conda-pack 打包出来的环境理论上可以拿到另一台相同操作系统的机器上直接解包使用。但要注意它不能跨 libc 版本。比如你在 glibc 2.35 的机器上打包目标机器还是 glibc 2.31自带依赖可能起不来。rdseed 这类编译型老工具更是如此二进制文件直接依赖系统 libc我只能说跨机器迁移 conda 环境时尽量选相同系统镜像或 Docker 环境否则环境起来了rdseed 却可能闹脾气。如果只想让 rdseed 在另一台机器上跑更省事的办法是把编译好的 rdseed 二进制复制过去而不是打包整个 conda 环境。遇到动态库依赖用 ldd 看看缺什么再补装ldd rdseed一般来说库齐全的 Linux 机器上rdseed 是可以作为纯二进制直接带走的。5. 为什么我还要把老工具留在工具箱里说点个人体会。我自己重新翻出 rdseed是因为几年前要重处理一批 2010 年前后的台站数据文件夹里只有原始 SEED 卷ObsPy 直接读也不算报错但部分响应信息读出来的字段不完整反演时参数对不上。后来我把它扔进 conda 的 seismo 环境用 rdseed 解出 SAC 和 RESP再用 ObsPy 读干净格式问题一下迎刃而解。最后再分享一个小技巧rdseed 生成 SAC 文件时可以顺手用 -g 生成 SAC 宏文件里面记了每个文件的台站、通道、时间窗口。你用 SAC 的 “m macro” 一跑就能一次性浏览所有波形效率比一个个文件操作高很多。即便现在新工具满天飞遇到老格式盘根错节的 SEED 卷我依然会优先把 rdseed 叫出来。它不是活化石而是一个老实、可靠的老伙计懂得它的脾气很多历史数据问题就都不是问题了。本文还有配套的精品资源点击获取