3. Linux基础

做RNA-seq分析,说白了就是跟服务器打交道。我见过不少新手拿到服务器后,第一反应是打开图形界面,或者干脆买个云服务器配个桌面。嗯,这路子其实走偏了。如果你真想高效处理那些动辄几十GB的fastq文件,命令行才是你的主场。

这一章我不会给你从头讲Linux系统管理,那够写一本书了。我只讲做RNA-seq分析最常用的那套东西。你把这些用熟了,后面的分析流程才能跑得顺。

为什么必须用命令行?

RNA-seq的原始数据有多大?我举个例子。一个人类样本的双端测序,两个fastq文件加起来往往超过10GB。跑比对、定量、差异表达,哪个环节不得处理几个小时?

图形界面在这种场景下太慢了。而且你会发现,真正的生信工具——比如STAR、Salmon、DESeq2——它们就没有图形界面。你要用它们,就必须过命令行这一关。

我的建议:刚开始别贪多,先把20个命令练熟就行。我当年入行时,光靠ls、cd、grep、awk、sed这五个命令就跑通了第一个RNA-seq分析流程。先把这些练透,再谈其他的。

连接服务器

你手头的Linux服务器是远程的,对吧?我们要用SSH连进去。命令很简单:

ssh username@your_server_ip

输入密码后,你就登陆到了服务器。这时候你看到的那个提示符,通常叫shell。它就是一个等待你输入命令的界面。

退出的时候打exit就行。我个人习惯每次连完服务器后,检查一下是否断开了连接,不然下次重连可能会提示端口被占用。这不算大问题,但挺烦人的。

文件系统——你得知道东西在哪儿

Linux的文件系统是一棵树,根是/。你想想看,一个典型的RNA-seq项目目录应该长什么样?我的经验是这样的:

project/
├── data/
│   ├── raw_fastq/
│   ├── trimmed_fastq/
│   └── alignment_bam/
├── scripts/
├── results/
│   ├── counts/
│   └── diff_expr/
└── logs/

这个结构看起来很清晰,对吧?但实际项目中我曾经见过有人把所有数据堆在/home/user/下面,文件名乱七八糟,过了三个月连自己都找不到东西在哪里。所以说,从一开始就养成好习惯非常重要。

关键路径:/home/你的用户名/是你想待的地方。/tmp/有时候也用来放临时文件,但要注意它可能会被定期清理。

常用命令——我先挑最重要的讲

命令太多,不可能一次全学完。我挑RNA-seq分析中出场频率最高的几个展开讲。

1. ls 和 cd

这两个命令是基础中的基础。ls列出当前目录下的文件和文件夹。cd切换目录。

ls
ls -l         # 详细信息
ls -lh        # 文件大小用人类可读的单位
ls -ltr       # 按时间排序,最近的在最后

cd data/
cd ..         # 返回上一级目录
cd ~          # 回到你的home目录

看下ls -lh的输出,那一长串像-rw-r--r--的东西是文件权限。左侧第一个字符是文件类型:-表示普通文件,d表示目录。后面九位分成三组,分别代表文件所有者、所在组、其他人的读(r)、写(w)、执行(x)权限。

做RNA-seq分析时,很多工具需要可执行权限。我遇到过一个情况:下载了STAR的二进制文件,但忘了给它加执行权限,结果跑分析时直接报错“Permission denied”。这个坑很简单,但很多人都会踩一次。

怎样给文件加执行权限:chmod +x 文件名。这条命令很常用,建议你牢牢记下来。

2. grep——搜索之王

做RNA-seq分析,grep是你最强大的朋友。它能帮你在文件中快速查找特定内容。

grep "TP53" gene_expression.txt                   # 找含有TP53的行
grep -v "unmapped" alignment_summary.txt          # 反向匹配(排除某词)
grep -c "ENSG" annotation.gtf                     # 统计匹配行数
grep -i "tumor" sample_info.txt                   # 忽略大小写
grep -n "FPKM" count_table.txt                    # 显示行号

在差异表达分析中,我经常用grep来快速检查某个基因的表达值。比如我怀疑BRCA1在某个样本中被异常沉默了,跑完定量后第一件事就是grep一下它的表达量。

避坑指南:grep默认不支持正则表达式的全量功能,比如扩展的正则语法需要加-E参数。我一开始用过grep "TP53\|BRCA1"想匹配两个基因,发现怎么也搜不到——就是因为没加-E。

3. awk——文本处理的瑞士军刀

如果说grep是做筛选的,那awk就是做数据提取和格式转换的。它把文件按行分成记录,按空格或制表符分成字段,然后你可以对字段进行操作。

awk '{print $1}' sample_list.txt                  # 打印第一列
awk '$3 > 0.05 {print $1, $2}' diff_result.txt    # 筛选p值大于0.05的基因
awk '{sum += $2} END {print sum}' counts.txt       # 统计第二列总和

在RNA-seq分析中,awk最经典的场景就是处理表达矩阵或差异表达结果。我写过一个脚本,用awk从DESeq2的输出中快速筛选出padj小于0.05且log2FoldChange绝对值大于1的基因:

awk -F'\t' '$7 < 0.05 && ($3 > 1 || $3 < -1) {print $1}' deseq2_results.tsv

-F'\t'是指定分隔符为制表符,因为TSV文件是用Tab分隔的。$7是第7列(padj),$3是第3列(log2FoldChange)。

4. 其他命令快速过一遍

下面这些命令不详细展开了,但你一定要知道它们的存在:

命令作用RNA-seq中的应用场景
head / tail查看文件头/尾检查fastq文件的前几行,看格式是否正常
wc -l统计行数统计fastq中有多少条read
cut按列提取从CSV中提取样本名称列
sort / uniq排序和去重统计基因出现次数
sed流编辑器,替换文本批量修改样本名或路径
我的经验:sed的s/旧文本/新文本/g结构最常用。比如你在处理批量样本时,想将所有文件名中的_R1改为_forward,一条sed命令就搞定了。

实战案例:查看一个fastq文件

说了这么多,不如直接拿一个fastq文件练手。fastq文件是Illumina测序的标准输出格式,每条read占4行。第一行以@开头,是序列标识符;第二行是碱基序列;第三行以+开头,有时重复标识符;第四行是质量分数。

我们试试:

# 查看前8行(两条read)
head -8 sample_1.fastq

# 输出示例:
@SRR123456.1 HWI-ST999:1:1101:1000:1000 length=101
ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
+
IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

# 统计一共有多少条read
echo $(cat sample_1.fastq | wc -l) / 4 | bc

# 或者用awk一步搞定
awk 'END {print NR/4}' sample_1.fastq
重要提示:fastq文件非常大,千万别用cat直接查看整个文件。那样你的终端会被刷屏,甚至可能导致连接中断。用head看个开头就够了。

我的避坑指南

这些坑我基本都踩过,写出来帮你省点时间:

  • 文件权限问题:我曾经因为没给输入文件加读权限,跑STAR时等了半个小时,结果报错退出,白白浪费了时间。每次提交任务前,务必先ls -l检查文件权限。
  • 路径写错:RNA-seq分析经常涉及多级目录。我建议把所有软件安装路径和项目路径写在一个配置文件中,比如config.sh,然后通过source config.sh加载变量。这样不容易写错。
  • 通配符的陷阱:*.fastq会匹配所有以.fastq结尾的文件,但如果当前目录下有很多无关文件,可以把它们移到一个子目录中,避免误操作。
  • 作业调度:如果你在集群上工作,用qsub或sbatch提交作业,不要直接在登录节点上跑大任务。我有一个同事就是直接在登录节点上跑STAR,结果管理员警告信马上就到了。
重要警示:不要在rm命令里轻易使用-rf,尤其不要配合/*。我听说过有人在/目录下执行rm -rf .,直接把整个服务器删了。恢复数据几乎不可能。

构建你自己的命令手册

最好的学习方式是边用边记。我建议你做一个小手册,把每次用到的命令和参数都写下来。下面是我个人笔记中的一个片段:

# 常用命令速查

# 查看文件大小
du -sh filename

# 解压gz文件
gunzip -k file.gz

# 统计某列的最大值
awk 'max < $2 {max = $2} END {print max}' data.txt

# 批量重命名
for f in *.txt; do mv "$f" "${f%.txt}.tsv"; done

# 后台运行并保存日志
nohup run_analysis.sh > analysis.log &

这个速查表我用了很久。每遇到一个新场景,我就加一条。现在我的笔记里有超过两百条命令,覆盖了从数据质控到最终可视化的全流程。

Linux基础技能树:RNA-seq分析必备 Linux命令行基础 SSH远程连接 文件系统 核心命令 最佳实践 ssh user@ip ssh密钥配置 /home, /tmp, /data 绝对路径 vs 相对路径 目录结构规范 ls, cd grep awk sed, head, cut 权限管理 作业调度 日志和记录 命令速查手册 核心原则:熟练使用20个命令跑通基础流程 剩下的命令可以在遇到具体问题时再查,不需要一次性掌握所有

你看这张图,基本上就是我这章想说的全部内容。从SSH连接到文件系统,再到命令层面的ls、cd、grep和awk,最后是最佳实践——把这几部分串联起来,你就具备了处理RNA-seq数据的基本功。后面的章节我们会基于这些命令,真正开始跑差异表达分析。别急,一步一步来,先把基础打好。