Linux 基础与命令行实战归纳总结

说实话,很多做生物信息学的新手,一上来就被命令行吓住了。我当年也是这样。

但跑过几个BWA和GATK流程之后你就会发现,Linux基础操作其实就是那几十个命令来回组合。掌握好它们,你的分析效率能翻倍。

这一章,我把最常用的操作替你捋一遍。全是实战中用得上的。

文件系统与路径操作

你先得明白一件事:Linux里一切皆文件。你的测序数据是文件,参考基因组是文件,甚至你的硬盘、网卡也是文件。

  • pwd:查看当前路径。别猜自己在哪,用这个确认。
  • ls -lh:列出文件,带人类可读的大小。我习惯加 -h 参数,不然显示出来的字节数看着头疼。
  • cd:切换目录。cd .. 返回上级,cd ~ 回家。
  • mkdir -p:创建多级目录。比如
    mkdir -p project/sample1/fastq
    一次性建好。
  • cp -r:复制目录。千万别忘了 -r,不然会报错。
  • mv:移动或重命名。mv file1 new_name 就是改名。
  • rm -rf:删除目录。嗯,这个命令要小心。我以前手滑删过整个项目文件夹,血的教训。

文本查看与处理

FASTQ、SAM、VCF 这些文件全是文本格式。不会处理文本,你就做不了生信。

  • cat:看小文件。大文件千万别用,终端会卡住。
  • less:分页查看。按 q 退出,按 / 搜索。
  • head / tail:看头尾几行。我经常用
    head -n 4 sample.fastq
    快速查看FASTQ格式是否正确。
  • wc -l:统计行数。比如看你的FASTQ有多少条序列,除以4就行。
  • grep:搜索关键词。最常用的是
    grep "chr1" file.vcf
    筛选VCF文件中的特定染色体。
  • cut:按列切割。SAM文件的第1列是比对名称,可以用
    cut -f1 sample.sam | head
    提取看看。
  • sort:排序。SAM文件要用
    sort -k1,1 sample.sam
    按第1列排序。
  • uniq:去重。配合sort使用,
    sort file | uniq -c
    可以统计每个值的出现次数。

管道与重定向

Linux最强大的地方在于,你可以把多个命令串起来用。这就是管道。

cat sample.fastq | grep "^@" | wc -l

这条命令做了三件事:先读取FASTQ,再筛选以@开头的行(序列标识行),然后统计个数。三秒就能知道FASTQ里有多少条序列。

重定向更常用。把结果保存到文件:

grep "chr1" raw.vcf > chr1_only.vcf

追加到文件末尾用 >>:

echo "Sample: S1" >> analysis_log.txt

权限管理与程序安装

你想想看,在学校或公司的服务器上,你经常发现有些程序装不了。为什么?权限不够。

  • chmod +x:给脚本加执行权限。
    chmod +x run_gatk.sh
    之后才能用 ./run_gatk.sh 运行。
  • chown:改文件所有者。一般普通用户不用这个。
  • which:看程序在哪。
    which bwa
    能告诉你bwa的安装路径。
  • sudo:临时管理员权限。生信软件安装常用
    sudo apt install samtools
    。注意,有的集群没有sudo权限。

数据下载与传输

基因组数据动不动几十GB,没点下载技巧不行。

  • wget:下载文件。
    wget ftp://ftp.ensembl.org/pub/release-104/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
  • curl -O:功能类似wget。
  • scp:远程拷贝。我常用来从工作服务器下载结果到本地:
    scp user@server:/path/to/results.vcf ./
  • rsync -avz:增量同步。断点续传,大文件的首选。

进程与资源管理

BWA比对跑起来很慢,GATK更慢。你得学会监控和后台运行。

命令作用个人习惯
top实时显示进程和CPU/内存占用按1看每个CPU核的使用率
htoptop的升级版,界面更友好颜色区分不同区域,看着舒服
nohup后台运行,退出终端也不中断配合&使用,
nohup bwa mem ref.fa R1.fq R2.fq > aligned.sam &
screen虚拟终端,重连后还在创建:screen -S bwa_job,断开:Ctrl+A+D,重连:screen -r bwa_job
tmux类似screen,功能更强我个人更爱tmux,分屏好用
kill -9强制终止进程慎用,只对付卡死的进程

避坑指南:我曾经踩过的坑

这些坑我几乎都犯过,写下来帮你省点时间。

  • 文件路径带空格:千万别在文件名或目录名里用空格。用下划线或连字符代替。不然bwa根本不认,报错都找不到原因。
  • 忘记加 -p 参数:mkdir -p 自动创建上级目录。不加它,目录不存在就报错。
  • rm -rf 后没确认:我现在执行rm之前,都会先ls看一眼,确认无误再删。必要的时候用rm -i,每次删除前都问一下。
  • 管道里的文件没排序:GATK要求输入的VCF或BAM必须排序,否则报错。养成习惯,跑任何生信工具之前先检查排序。
  • 后台任务忘了nohup:直接 bwa mem & 后台跑,一关终端就停了。nohup是必须的。

实战:一个完整的Linux工作流

光说不练假把式。我们看看BWA-GATK流程中最基础的命令链长什么样。

# 1. 下载参考基因组
wget ftp://ftp.ensembl.org/pub/release-104/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz
gunzip Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz

# 2. 为BWA建立索引
bwa index Homo_sapiens.GRCh38.dna.primary_assembly.fa

# 3. 比对
bwa mem -t 8 ref.fa sample_R1.fastq.gz sample_R2.fastq.gz > aligned.sam

# 4. 转为BAM并排序
samtools view -bS aligned.sam | samtools sort -o sorted.bam

# 5. 标记重复(GATK)
gatk MarkDuplicates -I sorted.bam -O marked_dups.bam -M metrics.txt

# 6. 建立索引
samtools index marked_dups.bam

# 7. 变异检测
gatk HaplotypeCaller -R ref.fa -I marked_dups.bam -O raw_variants.vcf

你看,这7个步骤,每个都离不开Linux基础命令。没有ls、cd、gunzip、管道、重定向,这一整套流程就跑不起来。

建议:刚接触时,别急着背命令。先理解这7步的逻辑,每一步在干什么、输入输出是什么。理解了之后,命令自然就记住了。

练练手

给你留几个练习。把这些做完,你的Linux基础就彻底稳了。

  1. 用 wget 下载一个FASTQ文件(比如1万条序列的小测试文件)。
  2. 用 grep 统计FASTQ里有多少条read。
  3. 用 cut 提取SAM文件的前2列。
  4. 用 sort 和 uniq 统计SAM文件里每个参考序列出现了多少次。
  5. 用 screen 创建一个名为 "my_bwa_job" 的会话,在后台运行BWA比对,然后断开重连。