在生物信息学中,无论是转录组、单细胞、基因组还是宏基因组分析,绝大多数分析流程都运行在 Linux 环境中。原因主要包括:
-
测序数据体量大(FASTQ/ BAM/ VCF 动辄几十 GB)
-
主流分析软件(FastQC、STAR、BWA、GATK、CellRanger 等)主要基于 Linux
-
服务器与高性能计算平台几乎全部使用 Linux
因此,Linux 不是可选技能,而是基础工具。本文将从最常用的 Linux 指令入手,结合 FASTQ 文件的真实操作场景,帮助你快速建立"能用"的 Linux 能力。
一、Linux 文件与目录操作
1.pwd:显示当前目录,即当前你处在哪个文件目录下
bash
pwd

2.ls:查看当前目录下面有什么内容
bash
ls
常见参数
bash
ls -l 列出文件的详细信息
ls -a 列出所有文件(包括文件或文件夹前面带.的隐藏文件)
ls -al 列出所有文件的隐藏信息
ls -lh 列出文件的详细并带有文件大小
3.cd:改变目录名
bash
cd
常见参数
bash
cd .. 返回上一级目录
cd ../.. 返回上上一级目录
cd ~ 返回家目录
cd / 返回根目录
4.mkdir :创建文件夹
bash
mkdir dirname
创建一个dirname的文件夹
常见参数
bash
mkdir -p path/to/dir :如果父目录不存在,自动创建
例如:创建标准的分析目录
mkdir -p project/{rawdata,clean,QC,result,script}
批量创建
mkdir sample_{01..10}
5.mv移动,cp复制,rm删除文件/文件夹
mv不会复制数据,是"剪切",同一磁盘内几乎是瞬时完成
cp 是 真实复制,占用磁盘空间,大文件复制很占时间
mv可直接对文件和文件夹操作,cp和mv要对文件夹操作需要加-r
常见参数
bash
mv old_result.txt new_result.txt 文件重命名
mv -i sample.fq.gz rawdata/ 避免覆盖
cp -r project/ project_backup/ 复制目录要加-r
rm -r temp/ 删除目录要加 -r
rm -ri temp/ 安全删除加-i
rm -rf temp/ 强制删除加-f
6.chmod/chown:修改文件或目录的权限和所有者
Linux 中每个文件/目录都有三类信息:
-
权限(Permissions)
- 决定谁可以读、写、执行
-
所有者(Owner)
- 文件属于哪个用户
-
用户组(Group)
- 哪个组的用户共享权限
| 用户类别 | 缩写 | 权限控制对象 |
|---|---|---|
| 所有者 | u | 文件创建者 |
| 用户组 | g | 文件所属组 |
| 其他用户 | o | 其他人 |
chmod:修改权限
bash
chmod [选项] 模式 文件/目录
符号法
| 符号 | 含义 |
|---|---|
| r | 读 |
| w | 写 |
| x | 执行 |
| + | 添加权限 |
| - | 去掉权限 |
| = | 设置为指定权限 |
示例
bash
chmod u+x script.sh # 给所有者添加执行权限
chmod go-r file.txt # 移除用户组和其他用户的读权限
chmod u=rwx,g=rx,o=r file.txt # 精确设置权限
数字法(快捷、常用)
| 数字 | 含义 |
|---|---|
| 7 | rwx |
| 6 | rw- |
| 5 | r-x |
| 4 | r-- |
| 0 | --- |
bash
chmod 755 script.sh
解释:755 → u=rwx, g=rx, o=rx
chmod -R 755 /data/project -R 遍历子目录和文件
chown:修改所有者/用户组
bash
chown [选项] 用户:组 文件/目录
示例
chown duyo:duyo file.txt # 改所有者和组
chown duyo file.txt # 只改所有者
chown :bioinfo file.txt # 只改组
chown -R duyo:duyo /data/project -R 递归修改
二、操作文件
1.touch创建文件
touch 的核心作用只有两个:创建一个空文件; 文件已存在 ,更新文件时间戳(不改变内容)
bash
touch filename
常见参数
bash
touch -c file.txt 直更新时间,如果文件不存在则不会创建
touch -t 202512160930 file.txt 修改为指定的时间戳
touch -r ref.txt target.txt 使用参考文件的时间戳
touch -a file.txt # 只改 atime
touch -m file.txt # 只改 mtime
2.head,tail,cat,less,more查看文件
head用于查看文件的前几行内容,默认显示前十行
bash
head filename
head -n 20 filename 显示前二十行
tail查看文件末尾内容,默认显示最后10行
bash
tail filename
tail -n 20 filename 查看最后20行
tail -f filename 实时追踪文件变化
tail -f 可以实时查看后台程序的运行进度,几乎所有的后台任务都靠tail -f监控
cat会一次性将整个文件内容输出到终端
bash
cat filename
cat -n filename 显示行号
zcat filename.gz 查看压缩文件
注意,cat不适合大文件,否则会占用大量内存,导致终端卡死
仅适合小文件或者作为管道输入的一部分
more和less分页查看文件
more是最早用于分页显示文件内容的命令之一,其核心功能是:将文件内容按屏幕大小分页显示,避免一次性输出
bash
more filename
| 操作 | 含义 |
|---|---|
| 空格 | 显示下一页 |
| Enter | 向下滚动一行 |
| q | 退出查看 |
| /pattern | 向下搜索指定内容 |
more只能向下翻页
less是more的增强版,其设计目的是,高效灵活地查看超大文本文件
bash
less filename
zelss fq.gz
less -N fq 显示行号
less -S fq 禁止自动换行,超过屏幕的内容不换行,使用左右方向键滚动
查看长read VCF INFO字段时
less -M fq 显示详细状态栏
less -i fq 搜索忽略大小写
less -p ERROR run.log 打开文件时直接定位到匹配内容
less -G fq 高亮搜索内容
例如:查看fastq文件
zless -SN fq.gz
定位错误日志
less -Mip ERROR run.log
| 操作 | 含义 |
|---|---|
| ↑ ↓ | 上下逐行滚动 |
| PageUp / PageDown | 上下翻页 |
| /pattern | 向下搜索 |
| ?pattern | 向上搜索 |
| n / N | 下一个 / 上一个匹配 |
| g | 跳到文件开头 |
| G | 跳到文件结尾 |
| q | 退出 |
3.grep、sed 与 awk--文本处理三剑客
在生物信息学中,我们处理的几乎所有数据(FASTQ、FASTA、GTF、VCF、表达矩阵、日志文件)本质上都是文本文件 。
grep、sed 和 awk 被称为 Linux 的文本处理三剑客,分别擅长:
查找(grep)|编辑(sed)|分析(awk)
grep--文本搜索工具
grep 用于按模式(pattern)搜索文本内容,并输出匹配的行。
可以理解为:
"在文件中找我关心的那几行"
bash
grep [参数] "pattern" filename
grep -i error run.log -i 忽略大小写
grep -n "SRR" file.txt -n 显示行号
grep -v "^#" annotation.gtf -v 反向匹配 排除以#开头的注释行
grep -c "^@" fq -c 统计匹配行数
grep -E "TCGA|AGCTL" run.log -E 扩展正则(多个条件)
| 特点 | 说明 |
|---|---|
| 处理对象 | 行 |
| 核心能力 | 搜索、过滤 |
| 生信用途 | 查错误、数 reads、去注释 |
sed ------ 流式文本编辑工具
核心功能 :sed 用于,替换/删除/修改/按行处理文本
特点:不打开文件、不修改原文件(默认)
bash
sed [参数] '操作' filename
s--替换
sed 's/old/new/' file.txt 只替换每行第一个匹配
sed 's/old/new/g' file.txt 替换整行所有匹配
sed -i 's/T/U/g' fq -i 原地修改,不可逆!!
d--删除行
sed '1,10d' fq 删除前10行
sed '/^#/d' annotation.gtf 删除行注释
sed -n '100,120p' file.txt -n+p只打印指定行
| 特点 | 说明 |
|---|---|
| 处理对象 | 行 |
| 核心能力 | 替换、删除、重排 |
| 生信用途 | 去注释、格式修正 |
awk ------ 列级分析与条件判断工具(重点)
核心功能
awk 是一个面向列(字段)的文本分析语言,非常适合:表格文件(TSV/CSV)/表达矩阵/注释结果
如果说 grep 找行,sed 改行,
那么 awk 是"理解每一列含义"的工具。
| 表达式 | 含义 |
|---|---|
| $1 | 第一列 |
| $2 | 第二列 |
| $NF | 最后一列 |
| $0 | 整行 |
| 变量 | 含义 |
|---|---|
| NR | 当前行号 |
| NF | 当前行列数 |
| FS | 输入分隔符 |
| OFS | 输出分隔符 |
| FILENAME | 文件名 |
bash
awk '条件 {动作}' filename
awk '{print $1,$3}' file.tsv 打印第一三列
awk '$3 > 10 {print $0} file.tsv 如果第三列大于10,则打印整个文本$0 表示整个文本
awk -F '\t' '{print $1,$3}' file.tsv -F 指定分隔符
awk '{print NR,$1,$2}' file.tsv 带行号输出
awk 'BEGIN{OFS="\t"} {print $1,$3,$5}' file.tsv 控制输出格式
4.压缩与解压
先确立一个非常重要的概念压缩和打包
linux中tar主要负责打包,gzip,bzip2,xz才是真正的压缩
| 动作 | 含义 |
|---|---|
| 打包 | 把多个文件"装进一个文件" |
| 压缩 | 把文件体积变小 |
| 格式 | 扩展名 | 特点 | 适用场景 |
|---|---|---|---|
| gzip | .gz |
压缩速度快,通用性最强 | 单个文件压缩,日志文件 |
| bzip2 | .bz2 |
压缩率较高,速度较慢 | 需要较高压缩率的场景 |
| xz | .xz |
压缩率最高,速度最慢 | 发行版软件包,需要极致压缩 |
| zip | .zip |
跨平台支持好 | Windows/Linux/Mac共享文件 |
| tar | .tar |
仅打包不压缩 | 需要保留文件属性的打包 |
tar --打包
bash
tar [主操作] [辅助选项] [打包文件名] [要打包的文件/目录]
主操作(必须选一个)
-c或--create:创建新的归档文件(打包)-x或--extract:解包/提取文件-t或--list:列出归档文件内容-r或--append:向归档文件追加文件-u或--update:更新归档中的文件(仅添加更新的)
辅助选项(可组合使用)
-f或--file=:指定归档文件名(必须紧跟在 -f 后面)-v或--verbose:详细模式,显示处理过程-z或--gzip:通过 gzip 过滤归档 ;tar -z=tar + gzip组合-j或--bzip2:通过 bzip2 过滤归档-J或--xz:通过 xz 过滤归档-C或--directory=:切换目录后再执行操作
gzip/gunzip
- 设计用于单个文件的压缩。虽然我们常见到
.tar.gz格式,实际上gzip只能压缩单个文件,所以通常先用tar将多个文件打包成一个文件,再用gzip压缩。 - 在Linux/Unix系统中非常流行,常用于压缩日志文件、源代码等。
- 由于设计简单,gzip在管道操作中很常见,例如将输出压缩后传输。
bash
gzip file.txt 原文件会被删除,只留下.gz
gzip -k file.txt -k 保留原文件
gunzip file.txt.gz 解压或者
gzip -d file.txt.gz -d解压
tar + gzip:最常见组合
bash
# 创建 gzip 压缩的归档,显示详细信息
tar -czvf backup.tar.gz /path/to/directory
# -c: 创建归档,不压缩
# -z: 使用 gzip 压缩
# -v: 显示详细过程
# -f: 指定文件名 backup.tar.gz
# 解压一个tar.gz文件
tar -xzvf file.tar.gz
-x:解包
tar -xzvf data.tar.gz -C /path/to/dir
-C 解压到指定路径
zip/unzip(解压或者压缩后缀为zip的文件) zip 压缩,跨平台工具(Linux和WIindows之间传递)
bash
zip [选项] 压缩包名.zip 要压缩的文件
常见参数
-r:递归处理目录-q:安静模式,不显示压缩过程-e:加密压缩,会提示输入密码-9:最大压缩率(1-9,9为最高)-m:压缩后删除原文件
unzip 解压
bash
unzip [选项] 压缩包名.zip
-l:列出压缩包内容,不解压-d:指定解压目录-o:覆盖已有文件(不询问)-n:不覆盖已有文件(默认)-j:丢弃目录结构,所有文件解压到同一目录
bzip2(.bz2):压缩率更高,但慢
tar结合bzip2
bash
tar -cjvf data.tar.bz2 data/ 解压
tar -xjvf data.tar.bz2 解压
参数变化只有一个
| 参数 | 含义 |
|---|---|
| -j | 使用 bzip2 |
xz(.xz):压缩率最高(也最慢)
tar结合xz
bash
tar -cJvf data.tar.xz data/ 压缩
tar -xJvf data.tar.xz 解压
| 参数 | 含义 |
|---|---|
| -J | 使用 xz |
三、系统与进程
1.wget/curl 文件下载
在生物信息学中,我们几乎每天都要从网络获取数据,例如:
- NCBI / ENA 的 FASTQ
- reference genome(FASTA / GTF)
- 软件源码或二进制包
- 公共数据库结果文件
而 wget 和 curl 是完成这些任务的两大基础工具。
bash
wget https://example.com/sample.fastq.gz 直接下载文件
wget -O tumor_1.fastq.gz https://example.com/SRR123.fastq.gz
wget -c https://example.com/big.fastq.gz -c 断点续传,非常重要,网络中断之后可以继续下载
wget -b https://example.com/ref.tar.gz 后台下载 日志写入 wget-log
wget -i url_list.txt
wget --limit-rate=2m URL --limit-rate ------ 限速,防止占满宽带,多人服务器时使用
wget --no-check-certificate https://example.com/file --no-check-certificate 跳过SSL证书验证,用于老服务器或内网资源
url_list.txt 内容示例:一行一个网站
bash
https://.../SRR1.fastq.gz
https://.../SRR2.fastq.gz
**curl**的核心目标是:
向服务器发送请求,并获取返回内容
它是一个通用网络通信工具,不仅能下载文件,还能:
- 访问 API
- 发送 POST 请求
- 携带 header / token
- 调试网络接口
默认行为很重要:
curl 默认把内容输出到终端,而不是保存为文件
bash
curl [参数] URL
curl -O https://example.com/file.fastq.gz -O 按照原文件名保存
curl -o sample.fastq.gz https://example.com/file -o 指定输出文件名
curl -L -O https://example.com/download -L 跟随重定向,非常重要,NCBI/ENA经常使用302跳转,不加-L会下到一个HTML文件
curl -C - -O URL -C - 断点续传,注意是-C -
curl -I https://example.com/file -I 不下载判断文件是否存在,判断服务器状态
2.nohup后台运行程序
在 Linux 中:
nohup的作用是:让命令在"终端关闭或 SSH 断开后"仍然继续运行
这是在服务器、生物信息学分析中非常常见的需求。
bash
基本用法
nohup COMMAND [ARG...] &
必须注意的两个点
nohup只解决"挂断问题"&才是"后台运行"
常用参数
bash
nohup ./analysis.sh &
默认输出文件nohup.out
nohup ./analysis.sh > analysis.log 2>&1 & 显式重定向
示例
nohup fasterq-dump --split-files --threads 8 SRR27277612 > srr.log 2>&1 &
讲输出文件重定向到srr.log
含义:
>:标准输出2>:标准错误2>&1:错误合并到输出
3.jobs/top/htop/ps查看后台进程与任务监控
jobs 用于查看"当前终端(shell)中启动的后台作业"
注意:是当前shell,不是系统所有进程
bash
jobs
输出示例
[1]+ Running nohup fasterq-dump SRR27277612 &
[2]- Stopped vim test.txt
| 字段 | 含义 |
|---|---|
[1] |
作业号(job ID) |
+ / - |
默认/次默认作业 |
| Running | 正在运行 |
| Stopped | 被挂起 |
| 命令 | 启动的命令 |
jobs的局限性,看不到其他终端(别人启动)的进程或任务,并且SSH断开后jobs信息消失
一般是搭配nohup使用,nohup投递到后台之后使用jobs查看任务运行状态
top/htop:系统级实时进程监控
一般使用htop,htop是top的加强版,htop相比于top有彩色显示,鼠标操作,树桩进程
| 快捷键 | 作用 |
|---|---|
F6 |
选择排序列 |
F9 |
Kill |
F10 |
退出 |
/ |
搜索进程 |
ps 用于查看当前系统进程的"静态快照"(top/htop是实时刷新)
最常用的两种写法
bash
ps -ef
ps aux
ps -ef示例输出
bash
UID PID PPID C STIME TTY TIME CMD
user 12345 12000 0 08:30 pts/1 00:12:34 STAR --runThreadN 16
| 字段 | 含义 |
|---|---|
| UID | 启动进程的用户 |
| PID | 进程 ID |
| PPID | 父进程 ID |
| C | CPU 占用 |
| STIME | 启动时间 |
| TTY | 终端 |
| TIME | 累计 CPU 时间 |
| CMD | 完整命令 |
ps aux输出字段详解
| 字段 | 含义 |
|---|---|
| USER | 用户 |
| PID | 进程 ID |
| %CPU | CPU 使用率 |
| %MEM | 内存占比 |
| VSZ | 虚拟内存 |
| RSS | 实际内存 |
| STAT | 进程状态 |
| START | 启动时间 |
| TIME | CPU 时间 |
| COMMAND | 命令 |
STAT进程状态字段(非常重要)
| 状态 | 含义 |
|---|---|
| R | Running |
| S | Sleeping |
| D | 不可中断 IO |
| Z | Zombie |
| T | 停止 |
| < | 高优先级 |
| N | 低优先级 |
| l | 多线程 |
常用示例,查某个任务再跑
bash
ps -ef | grep STAR 查所有在跑的程序
ps -ef | grep cellranger 查特定程序,这个是查单细胞上游
4.kill,杀死进程
常见编号
| 信号 | 编号 | 作用 | 说明 |
|---|---|---|---|
| SIGTERM | 15 | 正常终止(默认) | 首选 |
| SIGKILL | 9 | 强制终止 | 最后手段 |
| SIGINT | 2 | 中断 | 等价 Ctrl+C |
| SIGHUP | 1 | 挂断/重载 | 终端断开 |
| SIGSTOP | 19 | 强制暂停 | 不可捕获 |
| SIGCONT | 18 | 继续运行 | 恢复暂停 |
bash
kill [选项] PID
例如
kill 12345
等价于
kill -15 12345 正常终止
kill -9 PID 强制终止
不想使用编号可以使用信号名
kill -SIGTERM PID
kill -SIGKILL PID
kill -l 查看所有信号,注意是l不是1
常用快捷键操作等同于kill
| 操作 | 信号 |
|---|---|
| Ctrl + C | SIGINT/中断/2 |
| Ctrl + Z | SIGSTOP/强制暂停/19 |
Ctrl+C之后,任务不能继续跑
Ctrl+Z之后可以继续跑,使用fg(继续在前台跑),bg(在后台跑)
Ctrl + Z + bg = 临时"后台运行",注意:这与nohup不同,断掉SSH之后任务也会断掉,只是临时在后台!!
5.系统/网络状态
lsb_release--查看系统发行版本
bash
lsb_release -a
uname--查看内核信息
bash
uname -a
uptime--系统运行时间与负载
bash
uptime
示例输出
10:32:11 up 23 days, 4 users, load average: 3.12, 2.85, 2.70
点解读:load average
- 1 / 5 / 15 分钟平均负载
- 是否过载要结合 CPU 核数判断
free--内存状态
bash
free -h
free -m 以M为单位显示内存状态
df--磁盘空间
bash
df -h
du --目录大小
bash
du -sh *
iostat--磁盘IO
bash
iostat ------ 磁盘 IO
ip ------ 网络接口状态
bash
ip addr IP地址
ip link 网卡是否UP
ping ------ 网络连通性
bash
ping google.com DNS是否正常
ping 8.8.8.8 网络是否通
ss ------ 网络连接(替代 netstat)
bash
ss -tulnp
用途:
- 查看端口监听
- 排查服务是否启动
dmesg ------ 内核信息
bash
dmesg | tail
查看:内存错误;磁盘错误;OOM kill
shutdown/reboot:关闭或重新启动系统
bash
shutdown -h now 立即关闭系统
reboot 重新启动系统
sudo:以超级用户权限运行命令
bash
sudo 命令