生信工程师必备技能速查 — 面试高频考点 + 实战命令
简历涵盖的 6 大工程化方向,每个都是生信面试高频考点
典型技能学习路径:先 Linux 基础 → Git 管理代码 → conda 管理环境 → Snakemake 编排流程 → Docker 容器化 → HPC 集群跑大规模分析
题1:统计文件中第2列的唯一值个数
题2:找出两个文件的共有行
题3:提取 FASTA 中序列长度大于 1000bp 的序列名
题4:统计 VCF 文件中每条染色体的变异数
题5:将 tab 分隔文件转为 CSV
| 概念 | 白话解释 | 类比 |
|---|---|---|
| rule | 一个分析步骤的定义(输入 → 处理 → 输出) | 菜谱中的一道菜 |
| input / output | 规则需要的文件和产生的文件 | 原料和成品 |
| wildcard | 通配符,自动匹配样本名 | 模板中的 {占位符} |
| DAG | 有向无环图,Snakemake 自动推断步骤依赖关系 | 做菜顺序表 |
| conda: | 每个 rule 可指定独立 conda 环境 | 每道菜用专用锅具 |
| threads | 分配给 rule 的 CPU 核数 | 同时几个人一起做 |
--software-deployment-method conda(--use-conda 仍可用作兼容别名)--use-singularity 改为 --software-deployment-method apptainerdynamic(用 checkpoints 替代)、version、subworkflow 指令| 特性 | Shell 脚本 | Snakemake |
|---|---|---|
| 依赖管理 | 手动控制执行顺序 | 自动推断 DAG 依赖 |
| 断点续跑 | 需自己实现 | 自动跳过已完成步骤 |
| 并行执行 | 需 GNU parallel 等工具 | 内置并行(--cores) |
| 多样本处理 | 需写循环 | wildcard 自动展开 |
| 环境隔离 | 无 | conda: 指令按 rule 隔离 |
| 可重复性 | 低 | 高(配置即文档) |
| 集群提交 | 手动写 sbatch 脚本 | --executor slurm 自动分发 |
| 概念 | 白话解释 | 类比 |
|---|---|---|
| 镜像 (Image) | 只读模板,包含操作系统 + 软件 + 配置 | 安装光盘 |
| 容器 (Container) | 镜像的运行实例,可以修改但默认不持久 | 从光盘安装后跑起来的虚拟机 |
| Dockerfile | 构建镜像的配方文件 | 安装说明书 |
| Registry | 镜像仓库(Docker Hub / BioContainers) | 应用商店 |
| Volume (-v) | 宿主机和容器之间共享的目录 | 插在虚拟机上的 U 盘 |
| 维度 | Docker | conda |
|---|---|---|
| 隔离级别 | 操作系统级(完全隔离) | Python/包级(共享 OS) |
| 可移植性 | 极高(任何有 Docker 的机器都能跑) | 中等(有时 OS 差异导致问题) |
| 体积 | 较大(包含整个 OS 层) | 较小(只装包) |
| 学习成本 | 中等 | 低 |
| 集群支持 | 部分 HPC 禁止 Docker(安全原因) | 广泛支持 |
| 替代方案 | Singularity/Apptainer(HPC 友好) | mamba(加速版) |
| 适用场景 | 部署、CI/CD、跨平台交付 | 日常开发、快速安装工具 |
singularity pull docker://biocontainers/fastp:v0.23.4_cv1
| 实践 | 原因 |
|---|---|
| 每个项目一个环境 | 避免不同项目的包版本冲突 |
| 用 environment.yml 记录环境 | 同事可以一键重建相同环境 |
| 用 mamba 替代 conda | C++ 实现的 libsolv 求解器,速度快 10-100 倍 |
| channel 优先级:conda-forge > bioconda > defaults | conda-forge 和 bioconda 包更全更新 |
| 指定包版本 | 例如 samtools=1.18,防止不可预期升级 |
| 维度 | conda | mamba |
|---|---|---|
| 实现语言 | Python | C++ (libsolv) |
| 依赖求解速度 | 慢(大环境可能数小时) | 快 10-100 倍 |
| 下载方式 | 顺序下载 | 并行下载 |
| 兼容性 | 原生 | 完全兼容 conda 生态 |
| 安装方式 | Anaconda / Miniconda | conda install mamba / Miniforge |
| 最小安装 | Miniconda ~80MB | Micromamba ~13MB |
mamba search <包名> 确认包名,加 -c bioconda -c conda-forge。feat: 添加差异丰度分析、fix: 修复样本分组错误。"
| 操作 | SLURM | PBS/Torque |
|---|---|---|
| 提交作业 | sbatch script.sh | qsub script.sh |
| 查看队列 | squeue | qstat |
| 取消作业 | scancel <id> | qdel <id> |
| 交互式 | srun --pty bash | qsub -I |
| 指定 CPU | #SBATCH --cpus-per-task=8 | #PBS -l ncpus=8 |
| 指定内存 | #SBATCH --mem=16G | #PBS -l mem=16gb |
| 指定时间 | #SBATCH --time=02:00:00 | #PBS -l walltime=02:00:00 |
| 作业 ID 变量 | $SLURM_JOB_ID | $PBS_JOBID |
sbatch 提交脚本,脚本里指定 CPU、内存、时间等资源。多样本批量分析用 --array 数组作业,一条命令提交所有样本。也可以用 Snakemake 的 --executor slurm 参数,让 Snakemake 自动为每个 rule 生成和提交 SLURM 脚本。"
grep、awk、sed。grep -c "^>" 统计 FASTA 序列数,用 awk 按列提取和筛选 TSV 数据,用 sed 做批量文本替换。cut -f1 | sort | uniq -c | sort -rn 统计某列的出现频率。screen 或 tmux,保证 SSH 断开后任务不中断。
--cores 8 就能自动并行跑独立的步骤,Shell 脚本需要额外用 GNU parallel。--executor slurm 在集群上分发任务。
conda: 指令按 rule 指定 conda 环境,也可以用 container: 指令指定 Docker/Singularity 容器。
--array=1-N 参数,每个子任务通过 $SLURM_ARRAY_TASK_ID 读取对应样本名,一条 sbatch 命令就能并行处理所有样本。snakemake --executor slurm(v8+),Snakemake 自动为每个 rule 生成提交脚本,管理依赖关系,更优雅。#SBATCH --cpus-per-task、--mem、--time 合理分配,避免资源浪费。用 sacct 查看历史作业的实际资源消耗来调优。
git init 初始化项目,设置 .gitignore 排除大文件(.fastq.gz、.bam 等)。feature/add-humann-analysis。feat:(新功能)、fix:(修 bug)、refactor:(重构)。-c bioconda -c conda-forge 试试。| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 日常包管理 | mamba (conda) | 轻量、快速、bioconda 生态完善 |
| 流程编排 | Snakemake | DAG 依赖推断 + 断点续跑 + 集群集成 |
| 环境交付 | Docker / Singularity | 完全隔离,保证可重复性 |
| 代码管理 | Git + GitHub | 版本追踪、协作、备份 |
| 大规模计算 | SLURM + Snakemake | 自动资源调度,数组作业批量处理 |
| 文本处理 | awk + grep + sed | Linux 原生,处理 TSV/FASTA/VCF 效率极高 |
Linux与工程化工具速查 | 彭文强 面试准备 | 2026