linux常见指令与实例(生物信息方向)

在生物信息学中,无论是转录组、单细胞、基因组还是宏基因组分析,绝大多数分析流程都运行在 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 中每个文件/目录都有三类信息:

  1. 权限(Permissions)

    • 决定谁可以读、写、执行
  2. 所有者(Owner)

    • 文件属于哪个用户
  3. 用户组(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、表达矩阵、日志文件)本质上都是文本文件
grepsedawk 被称为 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...] &

必须注意的两个点

  1. nohup 只解决"挂断问题"
  2. & 才是"后台运行"

常用参数

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 命令
相关推荐
hhcgchpspk3 小时前
一次msf免杀渗透入门实践
linux·经验分享·网络安全·系统安全·渗透·msf
小白勇闯网安圈4 小时前
Vmware的Ubuntu构建极简版Linux发行版
linux
刘某的Cloud4 小时前
shell脚本-read-输入
linux·运维·bash·shell·read
broad-sky4 小时前
Ubuntu上查看USB相机连接的是哪个口,如何查看
linux·数码相机·ubuntu
秋深枫叶红4 小时前
嵌入式第三十七篇——linux系统编程——线程控制
linux·学习·线程·系统编程
shaohui9735 小时前
ARMv7 linux中断路由以及处理
linux·gic·cpsr·armv7
三小尛5 小时前
linux的开发工具vim
linux·运维·vim
陈陈爱java5 小时前
Conda 常用命令行
linux·windows·conda
twdnote5 小时前
dokcer 环境中集成LibreOffice
linux