第 1 节:Linux 与参考基因组
← 课程目录 · 第 1 节 / 共 3 节 · 下载本节原始讲义(Markdown)
一、章节导入
Section titled “一、章节导入”生物信息学分析通常从“数据文件”开始。对于基因组学研究来说,最基础、最常用的两类文件是:
- 参考基因组序列文件,通常是 FASTA 格式;
- 基因结构注释文件,通常是 GFF3 或 GTF 格式。
例如我们研究大豆基因时,首先需要知道:
- 大豆参考基因组有哪些染色体?
- 每条染色体的序列是什么?
- 基因位于哪条染色体上?
- 基因的起始位置和终止位置在哪里?
- 一个基因由哪些外显子、CDS、UTR 等结构组成?
- 大豆基因组中一共有多少个基因?
这些问题都可以通过 Linux 基础命令对 FASTA 和 GFF 文件进行查看、提取和统计来完成。
本节课将以大豆参考基因组为例,学习如何从 Phytozome 下载基因组 FASTA 文件和 GFF 注释文件,并使用 Linux 命令进行初步分析。
课堂提醒:Phytozome、SoyBase、Ensembl Plants、NCBI 等数据库中,同一物种可能存在多个参考基因组版本。下载数据时,应确保 FASTA 文件和 GFF 文件来自同一个物种、同一个品种、同一个版本。
二、本章学习目标
Section titled “二、本章学习目标”完成本章学习后,学生应能够:
- 理解 Linux 命令行在生物信息学中的基本作用;
- 掌握常用 Linux 基础命令,如
pwd、ls、cd、mkdir、cp、mv、rm、cat、less、head、tail、grep、wc、awk; - 了解参考基因组数据库中常见文件类型;
- 理解 FASTA 文件和 GFF3 文件的基本结构;
- 能够查看大豆参考基因组文件;
- 能够从 GFF 文件中提取特定基因信息;
- 能够使用
awk统计基因、mRNA、exon、CDS 等数量; - 初步理解“基因由哪些组成部分构成”。
三、Linux 基础命令介绍
Section titled “三、Linux 基础命令介绍”3.1 目录和文件操作命令
Section titled “3.1 目录和文件操作命令”| 命令 | 作用 | 示例 |
|---|---|---|
pwd |
显示当前所在目录 | pwd |
ls |
查看当前目录下的文件 | ls |
ls -lh |
以易读方式显示文件大小 | ls -lh |
cd |
进入某个目录 | cd genome |
cd .. |
返回上一级目录 | cd .. |
mkdir |
新建目录 | mkdir soybean_genome |
mkdir -p |
递归创建目录,如果上级目录不存在也会自动创建 | mkdir -p ~/bioinfo_course/01_linux_genome |
cp |
复制文件 | cp file1 file2 |
mv |
移动或重命名文件 | mv old.txt new.txt |
rm |
删除文件 | rm test.txt |
rm -r |
删除目录及其内容 | rm -r test_dir |
示例:
pwdmkdir soybean_genomecd soybean_genomepwd3.2 查看文件内容的命令
Section titled “3.2 查看文件内容的命令”| 命令 | 作用 | 示例 |
|---|---|---|
cat |
一次性显示整个文件内容 | cat test.txt |
less |
分页查看大文件 | less genome.fa |
head |
查看文件前几行 | head file.txt |
tail |
查看文件后几行 | tail file.txt |
head -n 20 |
查看前 20 行 | head -n 20 file.txt |
tail -n 20 |
查看后 20 行 | tail -n 20 file.txt |
对于基因组文件,通常不建议直接用 cat 查看,因为文件很大,容易刷屏。推荐使用:
less 文件名head 文件名tail 文件名如果文件是压缩文件,例如 .gz 格式,可以使用:
zcat 文件名.gz | headzcat 文件名.gz | less3.3 搜索和统计命令
Section titled “3.3 搜索和统计命令”| 命令 | 作用 | 示例 |
|---|---|---|
grep |
按关键词搜索 | grep "gene" annotation.gff3 |
grep -v |
排除某些行 | grep -v "^#" annotation.gff3 |
wc -l |
统计行数 | wc -l file.txt |
cut |
按列提取 | cut -f 1 file.txt |
sort |
排序 | sort file.txt |
uniq |
去重复 | uniq file.txt |
awk |
按列处理和统计 | awk '$3=="gene"' annotation.gff3 |
awk 是生物信息学中非常重要的文本处理工具,尤其适合处理以制表符分隔的文件,例如 GFF、BED、VCF 等。
四、基因组数据库中常见文件类型
Section titled “四、基因组数据库中常见文件类型”在 Phytozome、Ensembl Plants、NCBI、SoyBase 等数据库中,一个物种的基因组页面通常会包含多种文件。
4.1 Genome FASTA 文件
Section titled “4.1 Genome FASTA 文件”常见后缀:
.fa.fasta.fa.gz.fasta.gz作用:
FASTA 文件保存的是参考基因组的 DNA 序列。例如大豆有 20 条染色体,FASTA 文件中通常包含 20 条主要染色体序列,以及一些未定位的 scaffold 或 contig。
FASTA 文件格式示例:
>Gm01ATGCTAGCTAGCTACGATCGATCG...>Gm02ATCGATCGATCGTACGTAGCTAGC...特点:
- 以
>开头的行是序列名称; - 后面的多行是 DNA 序列;
- DNA 序列通常由 A、T、C、G、N 组成;
N表示未知碱基。
4.2 GFF3 注释文件
Section titled “4.2 GFF3 注释文件”常见后缀:
.gff.gff3.gff3.gz作用:
GFF3 文件记录基因在基因组上的位置和结构信息,例如:
- gene;
- mRNA;
- exon;
- CDS;
- five_prime_UTR;
- three_prime_UTR。
GFF3 文件一般有 9 列:
| 列号 | 名称 | 含义 |
|---|---|---|
| 第 1 列 | seqid | 染色体或序列名称 |
| 第 2 列 | source | 注释来源 |
| 第 3 列 | type | 注释类型,如 gene、mRNA、exon、CDS |
| 第 4 列 | start | 起始位置 |
| 第 5 列 | end | 终止位置 |
| 第 6 列 | score | 得分,若无则为 . |
| 第 7 列 | strand | 正负链,+ 或 - |
| 第 8 列 | phase | CDS 阅读框信息 |
| 第 9 列 | attributes | 注释属性,如 ID、Parent、Name |
示例:
Gm01 phytozome gene 1000 5000 . + . ID=Glyma.01G000100Gm01 phytozome mRNA 1000 5000 . + . ID=Glyma.01G000100.1;Parent=Glyma.01G000100Gm01 phytozome exon 1000 1200 . + . Parent=Glyma.01G000100.1Gm01 phytozome CDS 1050 1200 . + 0 Parent=Glyma.01G000100.14.3 CDS FASTA 文件
Section titled “4.3 CDS FASTA 文件”常见后缀:
.cds.fa.cds.fasta作用:
CDS 文件保存基因的编码序列,也就是可以翻译成蛋白质的 DNA 序列。
4.4 Protein FASTA 文件
Section titled “4.4 Protein FASTA 文件”常见后缀:
.pep.fa.protein.fa.aa.fa作用:
Protein FASTA 文件保存蛋白质序列。后续做 BLAST、结构域分析、同源基因搜索、系统发育树分析时经常使用。
4.5 Transcript FASTA 文件
Section titled “4.5 Transcript FASTA 文件”常见后缀:
.transcript.fa.mrna.fa作用:
Transcript FASTA 文件保存转录本序列,通常包括 UTR 和 CDS 区域。
4.6 README 或 metadata 文件
Section titled “4.6 README 或 metadata 文件”这些文件通常说明:
- 数据来源;
- 版本号;
- 文件命名规则;
- 物种信息;
- 下载日期;
- 使用说明。
课堂中要特别强调:
FASTA 文件和 GFF 文件必须来自同一个基因组版本。
例如不能把 Wm82.a2 的 FASTA 和 Wm82.a4 的 GFF 混合使用,否则基因坐标可能对不上。
五、基因的基本组成
Section titled “五、基因的基本组成”从基因组注释角度看,一个典型真核基因通常包括:
gene └── mRNA / transcript ├── 5' UTR ├── exon ├── CDS ├── intron ├── exon ├── CDS └── 3' UTR5.1 gene
Section titled “5.1 gene”表示一个基因在基因组上的完整区域。
5.2 mRNA / transcript
Section titled “5.2 mRNA / transcript”表示该基因产生的转录本。一个基因可能只有一个转录本,也可能有多个转录本。
5.3 exon
Section titled “5.3 exon”外显子,是成熟 mRNA 中保留下来的片段。
5.4 intron
Section titled “5.4 intron”内含子,是转录后会被剪接去除的片段。
注意:在很多 GFF 文件中,intron 不一定直接写出来,可以根据相邻 exon 的间隔推断。
5.5 CDS
Section titled “5.5 CDS”CDS 是 coding sequence 的缩写,表示编码区,是最终可以翻译成蛋白质的序列部分。
5.6 UTR
Section titled “5.6 UTR”UTR 是 untranslated region 的缩写,表示非翻译区,包括:
- 5’ UTR;
- 3’ UTR。
UTR 不翻译成蛋白质,但可能影响 mRNA 稳定性、翻译效率和调控。
六、课堂操作练习
Section titled “六、课堂操作练习”练习 1:建立工作目录
Section titled “练习 1:建立工作目录”在自己的 Linux 环境中建立一个本章练习目录。
mkdir -p ~/bioinfo_course/01_linux_genomecd ~/bioinfo_course/01_linux_genomepwdmkdir -p中的-p有什么作用?pwd输出的是什么?~代表什么目录?
练习 2:从 Phytozome 下载大豆参考基因组文件
Section titled “练习 2:从 Phytozome 下载大豆参考基因组文件”进入 Phytozome 网站,下载大豆参考基因组的 FASTA 文件和 GFF3 注释文件。
Phytozome 网站:
https://phytozome-next.jgi.doe.gov/- 打开 Phytozome 网站;
- 在搜索框中搜索:
Glycine max或:
soybean- 选择大豆 Williams 82 参考基因组版本;
- 课堂建议统一选择同一个版本,例如:
Glycine max Wm82.a4.v1- 下载以下两类文件:
Genome FASTA 文件Annotation GFF3 文件下载后文件名可能类似:
Gmax_508_v4.0.fa.gzGmax_508_Wm82.a4.v1.gene.gff3.gz实际文件名以网站下载页面为准。
练习 3:查看下载后的文件
Section titled “练习 3:查看下载后的文件”查看当前目录下有哪些文件,并观察文件大小。
lsls -lh- FASTA 文件的后缀是什么?
- GFF 文件的后缀是什么?
- 哪个文件更大?
- 为什么基因组 FASTA 文件通常比较大?
练习 4:查看 FASTA 文件前几行
Section titled “练习 4:查看 FASTA 文件前几行”假设下载的基因组文件名为:
Gmax_genome.fa.gz如果你的文件名不同,请替换成自己的文件名。
zcat Gmax_genome.fa.gz | head如果文件未压缩:
head Gmax_genome.fa你应该能看到类似结构:
>Gm01NNNNNNNNNNNNNNNNNNNNATGCTAGCTAGCTAGCTAGC- FASTA 文件中,哪一类行表示序列名称?
- DNA 序列由哪些字母组成?
N代表什么?
练习 5:统计 FASTA 文件中有多少条序列
Section titled “练习 5:统计 FASTA 文件中有多少条序列”zgrep "^>" Gmax_genome.fa.gz | head统计序列数量:
zgrep "^>" Gmax_genome.fa.gz | wc -l在 FASTA 文件中,每一条序列都以 > 开头。因此统计 > 的数量,就可以知道 FASTA 文件中有多少条序列。
- 如果结果是 20,说明什么?
- 如果结果大于 20,可能说明什么?
- 染色体、scaffold、contig 有什么区别?
练习 6:提取 FASTA 文件中的序列名称
Section titled “练习 6:提取 FASTA 文件中的序列名称”zgrep "^>" Gmax_genome.fa.gz | head -n 20只保留序列名称的第一部分:
zgrep "^>" Gmax_genome.fa.gz | sed 's/>//' | awk '{print $1}' | head -n 20- 大豆主要染色体是否是 20 条?
- 序列名称是
Gm01、Chr01,还是其他格式? - 为什么后续分析中要注意染色体命名格式?
练习 7:查看 GFF3 文件前几行
Section titled “练习 7:查看 GFF3 文件前几行”假设注释文件名为:
Gmax_annotation.gff3.gzzcat Gmax_annotation.gff3.gz | head跳过以 # 开头的注释行:
zcat Gmax_annotation.gff3.gz | grep -v "^#" | head- GFF3 文件有几列?
- 每列之间用什么分隔?
- 第 3 列表示什么?
- 第 4 列和第 5 列表示什么?
练习 8:查看 GFF 文件中有哪些注释类型
Section titled “练习 8:查看 GFF 文件中有哪些注释类型”zcat Gmax_annotation.gff3.gz | grep -v "^#" | cut -f 3 | sort | uniq统计每种类型的数量:
zcat Gmax_annotation.gff3.gz | grep -v "^#" | cut -f 3 | sort | uniq -c可能看到的类型
Section titled “可能看到的类型”genemRNAexonCDSfive_prime_UTRthree_prime_UTRgene和mRNA是同一个概念吗?exon和CDS有什么区别?- 为什么一个基因可能对应多个 mRNA?
练习 9:统计大豆基因数量
Section titled “练习 9:统计大豆基因数量”zcat Gmax_annotation.gff3.gz | awk '$3=="gene"' | wc -l更严谨地跳过注释行:
zcat Gmax_annotation.gff3.gz | awk '$0 !~ /^#/ && $3=="gene"' | wc -l在 GFF3 文件中,第 3 列表示 feature 类型。当第 3 列等于 gene 时,该行代表一个基因。
- 大豆基因组中一共有多少个 gene?
- 这个数量是否等于 mRNA 数量?
- 如果 mRNA 数量多于 gene 数量,说明什么?
练习 10:分别统计 gene、mRNA、exon、CDS 数量
Section titled “练习 10:分别统计 gene、mRNA、exon、CDS 数量”zcat Gmax_annotation.gff3.gz | awk '$0 !~ /^#/ {print $3}' | sort | uniq -c只统计指定类型:
zcat Gmax_annotation.gff3.gz | awk '$3=="gene"' | wc -lzcat Gmax_annotation.gff3.gz | awk '$3=="mRNA"' | wc -lzcat Gmax_annotation.gff3.gz | awk '$3=="exon"' | wc -lzcat Gmax_annotation.gff3.gz | awk '$3=="CDS"' | wc -l| 类型 | 数量 |
|---|---|
| gene | |
| mRNA | |
| exon | |
| CDS |
- 为什么 exon 数量远大于 gene 数量?
- 为什么 CDS 数量可能和 exon 数量不完全相同?
- UTR 是否属于 CDS?
练习 11:提取前 10 个基因的信息
Section titled “练习 11:提取前 10 个基因的信息”zcat Gmax_annotation.gff3.gz | awk '$3=="gene"' | head提取前 10 个基因的染色体、起始位置、终止位置和属性信息:
zcat Gmax_annotation.gff3.gz | awk '$3=="gene" {print $1,$4,$5,$7,$9}' | head -n 10如果想让输出以制表符分隔:
zcat Gmax_annotation.gff3.gz | awk 'BEGIN{OFS="\t"} $3=="gene" {print $1,$4,$5,$7,$9}' | head -n 10- 第 1 列是什么?
- 第 4、5 列是什么?
- 第 7 列的
+和-代表什么? - 第 9 列中是否包含基因 ID?
练习 12:自动提取第一个基因 ID
Section titled “练习 12:自动提取第一个基因 ID”不同版本的 GFF 文件中,基因 ID 格式可能略有差异。可以先自动提取第一个 gene 的 ID。
GENE_ID=$(zcat Gmax_annotation.gff3.gz | awk '$3=="gene"{print $9; exit}' | sed -E 's/.*ID=([^;]+).*/\1/')
echo $GENE_ID这条命令完成了三件事:
- 找到第一个
gene行; - 提取第 9 列属性信息;
- 从
ID=xxx中提取基因 ID。
练习 13:提取某一个特定基因的全部注释信息
Section titled “练习 13:提取某一个特定基因的全部注释信息”zcat Gmax_annotation.gff3.gz | grep "$GENE_ID"如果你已经知道某个基因 ID,例如:
Glyma.01G000100可以使用:
zcat Gmax_annotation.gff3.gz | grep "Glyma.01G000100"你可能会看到:
genemRNAexonCDSUTR等多种注释行。
- 这个基因位于哪条染色体?
- 起始位置是多少?
- 终止位置是多少?
- 位于正链还是负链?
- 这个基因有几个 exon?
- 这个基因有几个 CDS?
练习 14:统计某个基因有多少个 exon 和 CDS
Section titled “练习 14:统计某个基因有多少个 exon 和 CDS”以 $GENE_ID 为例:
zcat Gmax_annotation.gff3.gz | grep "$GENE_ID" | awk '$3=="exon"' | wc -lzcat Gmax_annotation.gff3.gz | grep "$GENE_ID" | awk '$3=="CDS"' | wc -l- exon 数量是多少?
- CDS 数量是多少?
- exon 数量和 CDS 数量是否相同?
- 如果不同,可能是什么原因?
练习 15:计算每个基因的长度
Section titled “练习 15:计算每个基因的长度”基因长度可以用:
end - start + 1计算。
zcat Gmax_annotation.gff3.gz | awk 'BEGIN{OFS="\t"} $3=="gene" {print $1,$4,$5,$5-$4+1,$9}' | head输出列含义:
染色体 起始位置 终止位置 基因长度 属性信息- 为什么要加 1?
- 基因长度是否等于 CDS 长度?
- 一个基因很长,是否一定编码很长的蛋白?
练习 16:统计每条染色体上的基因数量
Section titled “练习 16:统计每条染色体上的基因数量”zcat Gmax_annotation.gff3.gz | awk '$3=="gene"{print $1}' | sort | uniq -c整理成更清楚的格式:
zcat Gmax_annotation.gff3.gz | awk 'BEGIN{OFS="\t"} $3=="gene"{count[$1]++} END{for(chr in count) print chr,count[chr]}' | sort -k1,1| 染色体 | 基因数量 |
|---|---|
| Gm01 | |
| Gm02 | |
| Gm03 | |
| … |
- 每条染色体上的基因数量是否相同?
- 基因数量多的染色体一定更长吗?
- 染色体长度和基因数量之间可能有什么关系?
七、综合练习
Section titled “七、综合练习”综合任务 1:完成大豆参考基因组文件初步检查
Section titled “综合任务 1:完成大豆参考基因组文件初步检查”请完成以下任务,并将命令和结果记录下来。
- 创建工作目录;
- 下载大豆参考基因组 FASTA 和 GFF3 文件;
- 查看两个文件的大小;
- 查看 FASTA 文件前 10 行;
- 统计 FASTA 文件中有多少条序列;
- 查看 GFF3 文件前 10 行非注释内容;
- 统计 GFF3 中 gene、mRNA、exon、CDS 的数量;
- 提取一个基因的完整注释信息;
- 统计每条染色体上的基因数量。
综合任务 2:整理结果表格
Section titled “综合任务 2:整理结果表格”请学生整理如下表格:
| 项目 | 结果 |
|---|---|
| 使用的物种 | Glycine max |
| 使用的品种/参考基因组 | Williams 82 |
| 使用的版本 | 例如 Wm82.a4.v1 |
| FASTA 文件名 | |
| GFF3 文件名 | |
| FASTA 中序列数量 | |
| gene 数量 | |
| mRNA 数量 | |
| exon 数量 | |
| CDS 数量 | |
| 示例基因 ID | |
| 示例基因所在染色体 | |
| 示例基因起始位置 | |
| 示例基因终止位置 | |
| 示例基因正负链 | |
| 示例基因 exon 数量 | |
| 示例基因 CDS 数量 |
八、课后思考题
Section titled “八、课后思考题”8.1 概念题
Section titled “8.1 概念题”- 什么是参考基因组?
- FASTA 文件主要保存什么信息?
- GFF3 文件主要保存什么信息?
- gene、mRNA、exon、CDS、UTR 分别是什么意思?
- 为什么基因组 FASTA 和 GFF 文件必须来自同一个版本?
8.2 命令题
Section titled “8.2 命令题”解释以下命令的含义:
zgrep "^>" genome.fa.gz | wc -lzcat annotation.gff3.gz | awk '$3=="gene"' | wc -lzcat annotation.gff3.gz | grep -v "^#" | cut -f 3 | sort | uniq -czcat annotation.gff3.gz | awk 'BEGIN{OFS="\t"} $3=="gene"{print $1,$4,$5,$5-$4+1,$9}' | head8.3 拓展题
Section titled “8.3 拓展题”- 如果一个基因有多个 mRNA,说明什么?
- 为什么 exon 数量通常远多于 gene 数量?
- 为什么 CDS 不等于 exon?
- 为什么有些基因在负链上?
- 如果一个基因位于负链,它的 start 和 end 是否会反过来写?
十、参考网址
Section titled “十、参考网址”- Phytozome: https://phytozome-next.jgi.doe.gov/
- SoyBase: https://www.soybase.org/
- NCBI Genome: https://www.ncbi.nlm.nih.gov/genome/
- Ensembl Plants: https://plants.ensembl.org/