欲用神器,必练内功

在武侠小说里,往往有这样一个场景:反面角色从主角手里抢到了某某神器,然后当着主角的面使用它,结果因为内功不够深厚,无法驾驭,被神器反噬,然后主角一般都有露出一种“早就和你说了,你不行”的神情。

Linux里面也有许多比较好用的工具,但是如果你的内力不够深厚,没有一些必要的基本概念的话,那么这些工具可能非但无法让你提高效率,甚至你的结果会更加不可信。本文作为下一篇的铺垫,先介绍一些比较基础的概念。
:本文用到的数据为拟南芥的注释的gff文件。

本文主要介绍了如下内容,可以选择性的阅读。

  • 重定向
  • 管道
  • 进程管理
  • 退出状态
  • 命令替换

流<small>stream</small>

想象一下你面前有一大碗饭,你无法一口咽下去,只能一口一口送进去,然后让慢慢消化。目前生物大数据就是那么一大碗饭,机器的运行内存就是你的消化器官。对于动不动好几十G的测序数据而言,最好的处理的方式,就是以数据流的形式一部分一部分的处理。

大部分的Linux命令都是以流的形式处理数据,例如cat(concatenate files and print on the standard output),就是一行行的读取文件的数据,输出到屏幕上。

# 内容很多,需要一段时间输出
cat TAIR10_GFF3_genes.gff

重定向<small>redirection</small>

当然实际操作上,我们大部分的输出不是到屏幕上,而是到了另一个文件中。比如说把两个文件拼接成一个文件,或者是提取文件的一部分内容,这个时候就需要用到重定向。
直接cat,数据从标准输入(文件)流出到屏幕上

重定向的符号为>>>,前一个表示覆盖,后一个表示追加:

head -n 10 TAIR10_GFF3_genes.gff > first_ten.gff
tail -n 10 TAIR10_GFF3_genes.gff > last_ten.gff 
cat first_ten.gff > new.gff
cat last_ten.gff >> new.gff

上图还提到一个标准错误输出,我们使用2>2>>进行重定向。
例如,我用ls查看一个不存在的文件

$ ls a.file
ls: cannot access a.file: No such file or directory

如果我不想看到这天信息怎么办,可以直接丢进Linux的“黑洞”设备(/dev/null)中

ls a.file 2> /dev/null

假设你想把first_ten.gff和另一个文件一起合成一个新文件,然后记录那些文件出错,方面之后检查

$cat first_ten.gff wrong.gff > test.gff 2> log.file
$cat log.file
cat: wrong.gff: No such file or directory

其实除了输出可以重定向,输入也可以重定向<,只不过一般而言我们都是使用文件或者用管道直接提供数据,所以知道存在这个东西就行了。

cat < test.gff > new_test.gff

管道:优美且强大

Unix的一个设计哲学就是整合小程序完成大任务。Linux作为一个类Unix系统,也继承这个思想。管道|就是负责一种整合多个单任务的小程序来完成复杂的任务.

为什么要使用管道呢?首先,管道使得数据可以不用写到磁盘中,直接在内存中处理。磁盘读写的速度远远低于内存,所以使用管道可以极大地提高计算效率。其次,管道能够让许多小程序像乐高积木一样结合起来,完成一些单个程序无法完成任务,例如统计拟南芥注释信息中各个feature的数量.

$ cat TAIR10_GFF3_genes.gff | cut -f '3' | grep -v 'chromosome' | sort | uniq -c | sort -k1,1nr
 215909 exon
 197160 CDS
  35386 mRNA
  35386 protein
  34621 five_prime_UTR
  30634 three_prime_UTR
  28775 gene
   3911 mRNA_TE_gene
   3903 transposable_element_gene
   1274 pseudogenic_exon
    926 pseudogenic_transcript
    924 pseudogene
    689 tRNA
    480 ncRNA
    180 miRNA
     71 snoRNA
     15 rRNA
     13 snRNA

这里不过多解释这些具体命令的用法,毕竟已经有很多文章介绍过了。

进程管理

每当你敲下一个命令,它就会以一个进程的形式运行。实际上,Linux后台每时每刻都运行着大量的程序,你可以使用ps auxtop了解当前正在运行的程序。

当一个程序运行比较快的时候,比如说ls,cd等,几乎不会对你当前的终端有任何影响,但是一旦你运行一个比较耗时的命令,例如你要进行序列比对,那么当前的终端就会被这个程序占用。如果不小心按错了,让程序停止,那么估计你的内心是崩溃(别问我为什么会知道)。

所以最好的方法就是让一些耗时的程序运行在后台,方法很简单就是在命令后面加上&。例如我上面的就比较耗时,我就能放在后台运行。

 cat TAIR10_GFF3_genes.gff | cut -f '3' | grep -v 'chromosome' | sort | uniq -c | sort -k1,1nr &
[1] 48450

它会提供一个进程号,用于之后的操作。你可以用fg查看正在后台运行的命令。
如果你这个时候不想让程序运行,你可以使用fg %cat将它放到前台,然后使用ctrl+c结束命令。
或者你突然忘记在一个命令后加&,而你又发现这个命令耗时比较久,你可以先用ctrl+z让它暂停到后台,然后用bg 使它在后台运行

bg %cat
[1]+ cat TAIR10_GFF3_genes.gff | cut -f '3' | grep --color=auto -v 'chromosome' | sort | uniq -c | sort -k1,1nr &

退出状态

计算机如何知道你的程序能否工作呢?它们依赖于一种退出状态(exit status)的机制,表示为$?

$ echo "$?"
0

所谓正确的结果只有一种(显示为0),而错误的原因却各种各样(1-255)。
退出状态有什么用?主要是在一系列前后关联的程序中,比如说command2运行依赖与command1的成功(&&),而command3却只有在command1失败了(||)才能运行。

true && echo  "true"
false || echo "false"

命令替换

所谓的命令替换$()就是在另一个命令内部中运行并且返回字符串。例如你根据日期来创建文件夹,通常的做法是:看看今天几号,然后mkdir xxx,但是使用命令替换后就特别的方便了

mkdir $(date +%F)
$ ls
2017-03-24

正则表达式

正则表达式(Regular Expression,RE,regex)是一个强大字符串操作引擎,可用于检索、替换那些符合某个模式(规则)的文本的。
由于我对正则表达式的理解也不够深刻,所以这里就不特别展开,提供如下资料用于自学。
快速入门:https://regexone.com/
你可以在regex101.comwww.debuggex.com校验你写的正则匹配情况。
推荐阅读:《精通正则表达式》

总结

本文简单的介绍了linux中几个比较重要的概念,限于篇幅和个人能力,没有具体展开说明,这里作为抛砖引玉用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,118评论 9 467
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,127评论 2 34
  • 永远不要试图接近 若你终归远离 Part One 回归&故人 他静静地站在树荫下,耳边尽是此起彼伏的蝉鸣。 修长挺...
    刈野阅读 210评论 0 0
  • 说实在的,近段时间很迷茫。一直处于奔波忙碌而又混沌空洞的状态。 几乎十年一层不变风平浪静的生活,被自己的一念之差搅...
    静享春暖花开阅读 563评论 0 0