当前位置:首页>Linux>Linux基础101问:Linux中各种奇怪的符号|第7期上

Linux基础101问:Linux中各种奇怪的符号|第7期上

  • 2026-09-26 15:46:03
Linux基础101问:Linux中各种奇怪的符号|第7期上

如果您喜欢我们的文章,请设“关注”哦~

Linux 尤其是在 Bash 环境中构建了一套功能强大的符号体系。这些符号不仅是便捷功能,更构成了 Shell 的核心语言结构,用于组织命令之间的数据流、控制执行流程、管理前后台进程以及进行文件匹配等。在生物信息学分析中,这些符号几乎每天都会出现,例如:
zcat file.gz | head
bwa mem ref.fa R1.fq R2.fq > aln.sam 2> log.txt
samtools sort aln.bam &
for f in *.fastq.gz; do ...; don

一、管道符:|

管道(pipe)是 Linux 中最基础且最重要的机制之一,用于将一个命令的标准输出直接传递给下一个命令的标准输入,从而形成连续的数据处理链。

最基本的结构为:

命令1 | 命令2 | 命令3

通常用于流式处理大型文本数据。因为直接在控制台中打印出全文会非常不可读。例如,在查看压缩 FASTQ 文件前若干行时,可使用:

zcat reads.fastq.gz | head -n 8

其中,zcat将解压后的文本发送给 head,后者只展示前 8 行。在处理 VCF 文件时,也常将过滤与统计组合成管道:

zcat cohort.vcf.gz | grep -v '^#' | wc -l

通过依次移除 header 并统计变异数量,管道实现了高效的数据串联处理。管道本质上连接了输出与输入,是构建命令链的核心机制,也是生物信息学数据处理 pipeline 的基础。

二、输出重定向:>与>>

输出重定向用于将命令的标准输出写入文件。

>表示覆盖写入:

samtools view aln.bam > aln.sam
若目标文件已存在,其内容将被新的输出完全替换。
>>表示追加写入:
echo "Run finished at: $(date)" >> pipeline.log

此方式常用于持续记录日志而不覆盖历史内容。

在实际分析中,标准输出与标准错误往往需要分别保存,例如:

bwa mem ref.fa R1.fq R2.fq > aln.sam 2> aln.err

此时,正常输出写入 aln.sam,错误信息写入 aln.err。

三、错误重定向:2>、2>>、&>

在 Linux 中,文件描述符 1 表示标准输出,2 表示标准错误。因此:

myprog 2> error.log

将错误信息写入文件;而:

myprog 2>> error.log

表示以追加方式写入。若希望同时捕获标准输出与标准错误,可使用:

myprog &> all_output.txt

例如运行 GATK 时,通常将所有日志都重定向到同一文件:
gatk HaplotypeCaller ... &> gatk.log

四、后台运行符:&

在命令末尾添加 & 可将其放入后台执行,使当前终端不被阻塞:

long_task.sh &

后台执行在大规模计算中尤为常用,如:

bwa mem ref.fa R1.fq R2.fq > aln.sam 2> aln.log &

随后可通过如下方式监控日志:

tail -f aln.log

若希望任务在用户退出终端后继续执行,可结合nohup:
nohup script.sh &> script.out &

五、逻辑运算符:&&、||、;

逻辑运算符用于控制命令的执行顺序。
&& 表示仅当前一个命令成功时才执行后一个:
bwa index ref.fa && echo "index ok"

|| 表示当前一个命令失败时才执行后一个:

bwa index ref.fa || echo "index failed"

; 表示无论成功与否都继续执行:

cmd1; cmd2; cmd3

在简单串行 pipeline 中,常将比对与排序以 && 串联,以确保前一步成功后再运行下一步:
bwa mem ... > aln.sam && samtools sort aln.sam > aln.sorted.bam

六、命令替换:`command`与$(command)

命令替换用于将命令的结果作为字符串插入到当前命令中。推荐使用可读性更好的:
$(...)

例如获取系统时间:

echo "Start: $(date)"

生信工作中常用于自动生成输出文件名:

samtools flagstat aln.bam > flagstat_$(basename aln.bam .bam).txt

有任何问题/感兴趣的小伙伴欢迎添加小助手微信(SDbioinfo_2023),加入交流群,我们一起学会Linux!SDbioinfo

作者:刘鑫鹏(哥本哈根大学)

编辑:黎琛

排版:刘宇昂

⭐ SDbioinfo-往期回顾 ⭐

【栏目1:播客分享会】

升学:01从复旦到MIT博后的发展选择 

就业:04 曼彻斯特大学博士,临床转码历程

知识:11 武大教授:三代测序的机遇与挑战

【栏目2:前沿信息早知道】

诺奖给了Treg,如何用单细胞测序寻找它的“主控开关”?

【栏目3:知识解读】

linux/单细胞数据分析/机器学习 等专栏

马尔科夫链蒙特卡洛方法mcmc原理

【栏目4:最新招聘】

SDbioinfo嘉宾-张心仪博士组招聘

SDbioinfo核心团队招募令

【?我是谁?】

SDbioinfo,专注「计算生物学」领域的学习智库

我们汇聚了来自哈佛剑桥港大、北清复交等高校科研工作者。我们的愿景:链接领域最强大脑,用数据和分析改变生命。

不管你是:

⭐ 找实习、找工作、出国留学

⭐ 找校友、找搭子、找资源

⭐ 找科研方法、前沿信息、大咖分享

统统可以帮你,加入SDbioinfo,和全球生信人一起成长!

(添加微信:SDbioinfo_2023)

最新文章

随机文章