欲用神器渤滞,必練內(nèi)功

在武俠小說(shuō)里,往往有這樣一個(gè)場(chǎng)景:反面角色從主角手里搶到了某某神器榴嗅,然后當(dāng)著主角的面使用它妄呕,結(jié)果因?yàn)閮?nèi)功不夠深厚,無(wú)法駕馭嗽测,被神器反噬绪励,然后主角一般都有露出一種“早就和你說(shuō)了,你不行”的神情唠粥。

Linux里面也有許多比較好用的工具疏魏,但是如果你的內(nèi)力不夠深厚,沒(méi)有一些必要的基本概念的話晤愧,那么這些工具可能非但無(wú)法讓你提高效率大莫,甚至你的結(jié)果會(huì)更加不可信。本文作為下一篇的鋪墊官份,先介紹一些比較基礎(chǔ)的概念葵硕。
:本文用到的數(shù)據(jù)為擬南芥的注釋的gff文件眉抬。

本文主要介紹了如下內(nèi)容,可以選擇性的閱讀懈凹。

  • 重定向
  • 管道
  • 進(jìn)程管理
  • 退出狀態(tài)
  • 命令替換

流<small>stream</small>

想象一下你面前有一大碗飯蜀变,你無(wú)法一口咽下去,只能一口一口送進(jìn)去介评,然后讓慢慢消化库北。目前生物大數(shù)據(jù)就是那么一大碗飯,機(jī)器的運(yùn)行內(nèi)存就是你的消化器官们陆。對(duì)于動(dòng)不動(dòng)好幾十G的測(cè)序數(shù)據(jù)而言寒瓦,最好的處理的方式,就是以數(shù)據(jù)流的形式一部分一部分的處理坪仇。

大部分的Linux命令都是以流的形式處理數(shù)據(jù)杂腰,例如cat(concatenate files and print on the standard output),就是一行行的讀取文件的數(shù)據(jù),輸出到屏幕上椅文。

# 內(nèi)容很多喂很,需要一段時(shí)間輸出
cat TAIR10_GFF3_genes.gff

重定向<small>redirection</small>

當(dāng)然實(shí)際操作上,我們大部分的輸出不是到屏幕上皆刺,而是到了另一個(gè)文件中少辣。比如說(shuō)把兩個(gè)文件拼接成一個(gè)文件,或者是提取文件的一部分內(nèi)容羡蛾,這個(gè)時(shí)候就需要用到重定向漓帅。
直接cat,數(shù)據(jù)從標(biāo)準(zhǔn)輸入(文件)流出到屏幕上

重定向的符號(hào)為>>>痴怨,前一個(gè)表示覆蓋忙干,后一個(gè)表示追加:

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

上圖還提到一個(gè)標(biāo)準(zhǔn)錯(cuò)誤輸出,我們使用2>2>>進(jìn)行重定向浪藻。
例如捐迫,我用ls查看一個(gè)不存在的文件

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

如果我不想看到這天信息怎么辦,可以直接丟進(jìn)Linux的“黑洞”設(shè)備(/dev/null)中

ls a.file 2> /dev/null

假設(shè)你想把first_ten.gff和另一個(gè)文件一起合成一個(gè)新文件珠移,然后記錄那些文件出錯(cuò)弓乙,方面之后檢查

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

其實(shí)除了輸出可以重定向,輸入也可以重定向<钧惧,只不過(guò)一般而言我們都是使用文件或者用管道直接提供數(shù)據(jù)暇韧,所以知道存在這個(gè)東西就行了。

cat < test.gff > new_test.gff

管道:優(yōu)美且強(qiáng)大

Unix的一個(gè)設(shè)計(jì)哲學(xué)就是整合小程序完成大任務(wù)浓瞪。Linux作為一個(gè)類(lèi)Unix系統(tǒng)懈玻,也繼承這個(gè)思想。管道|就是負(fù)責(zé)一種整合多個(gè)單任務(wù)的小程序來(lái)完成復(fù)雜的任務(wù).

為什么要使用管道呢乾颁?首先涂乌,管道使得數(shù)據(jù)可以不用寫(xiě)到磁盤(pán)中艺栈,直接在內(nèi)存中處理。磁盤(pán)讀寫(xiě)的速度遠(yuǎn)遠(yuǎn)低于內(nèi)存湾盒,所以使用管道可以極大地提高計(jì)算效率湿右。其次,管道能夠讓許多小程序像樂(lè)高積木一樣結(jié)合起來(lái)罚勾,完成一些單個(gè)程序無(wú)法完成任務(wù)毅人,例如統(tǒng)計(jì)擬南芥注釋信息中各個(gè)feature的數(shù)量.

$ 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

這里不過(guò)多解釋這些具體命令的用法,畢竟已經(jīng)有很多文章介紹過(guò)了尖殃。

進(jìn)程管理

每當(dāng)你敲下一個(gè)命令丈莺,它就會(huì)以一個(gè)進(jìn)程的形式運(yùn)行。實(shí)際上送丰,Linux后臺(tái)每時(shí)每刻都運(yùn)行著大量的程序缔俄,你可以使用ps auxtop了解當(dāng)前正在運(yùn)行的程序。

當(dāng)一個(gè)程序運(yùn)行比較快的時(shí)候器躏,比如說(shuō)ls,cd等俐载,幾乎不會(huì)對(duì)你當(dāng)前的終端有任何影響,但是一旦你運(yùn)行一個(gè)比較耗時(shí)的命令邀桑,例如你要進(jìn)行序列比對(duì)瞎疼,那么當(dāng)前的終端就會(huì)被這個(gè)程序占用科乎。如果不小心按錯(cuò)了壁畸,讓程序停止,那么估計(jì)你的內(nèi)心是崩潰(別問(wèn)我為什么會(huì)知道)茅茂。

所以最好的方法就是讓一些耗時(shí)的程序運(yùn)行在后臺(tái)捏萍,方法很簡(jiǎn)單就是在命令后面加上&。例如我上面的就比較耗時(shí)空闲,我就能放在后臺(tái)運(yùn)行令杈。

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

它會(huì)提供一個(gè)進(jìn)程號(hào),用于之后的操作碴倾。你可以用fg查看正在后臺(tái)運(yùn)行的命令逗噩。
如果你這個(gè)時(shí)候不想讓程序運(yùn)行,你可以使用fg %cat將它放到前臺(tái)跌榔,然后使用ctrl+c結(jié)束命令异雁。
或者你突然忘記在一個(gè)命令后加&,而你又發(fā)現(xiàn)這個(gè)命令耗時(shí)比較久僧须,你可以先用ctrl+z讓它暫停到后臺(tái)纲刀,然后用bg 使它在后臺(tái)運(yùn)行

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

退出狀態(tài)

計(jì)算機(jī)如何知道你的程序能否工作呢?它們依賴于一種退出狀態(tài)(exit status)的機(jī)制担平,表示為$?示绊。

$ echo "$?"
0

所謂正確的結(jié)果只有一種(顯示為0)锭部,而錯(cuò)誤的原因卻各種各樣(1-255)。
退出狀態(tài)有什么用面褐?主要是在一系列前后關(guān)聯(lián)的程序中拌禾,比如說(shuō)command2運(yùn)行依賴與command1的成功(&&),而command3卻只有在command1失敗了(||)才能運(yùn)行展哭。

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

命令替換

所謂的命令替換$()就是在另一個(gè)命令內(nèi)部中運(yùn)行并且返回字符串蹋砚。例如你根據(jù)日期來(lái)創(chuàng)建文件夾,通常的做法是:看看今天幾號(hào)摄杂,然后mkdir xxx坝咐,但是使用命令替換后就特別的方便了

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

正則表達(dá)式

正則表達(dá)式(Regular Expression,RE,regex)是一個(gè)強(qiáng)大字符串操作引擎,可用于檢索析恢、替換那些符合某個(gè)模式(規(guī)則)的文本的墨坚。
由于我對(duì)正則表達(dá)式的理解也不夠深刻,所以這里就不特別展開(kāi)映挂,提供如下資料用于自學(xué)泽篮。
快速入門(mén):https://regexone.com/
你可以在regex101.comwww.debuggex.com校驗(yàn)?zāi)銓?xiě)的正則匹配情況。
推薦閱讀:《精通正則表達(dá)式》

總結(jié)

本文簡(jiǎn)單的介紹了linux中幾個(gè)比較重要的概念柑船,限于篇幅和個(gè)人能力帽撑,沒(méi)有具體展開(kāi)說(shuō)明,這里作為拋磚引玉用鞍时。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亏拉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子逆巍,更是在濱河造成了極大的恐慌及塘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锐极,死亡現(xiàn)場(chǎng)離奇詭異笙僚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)灵再,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)肋层,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人翎迁,你說(shuō)我怎么就攤上這事栋猖。” “怎么了鸳兽?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵掂铐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)全陨,這世上最難降的妖魔是什么爆班? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮辱姨,結(jié)果婚禮上柿菩,老公的妹妹穿的比我還像新娘。我一直安慰自己雨涛,他們只是感情好枢舶,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著替久,像睡著了一般凉泄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚯根,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天后众,我揣著相機(jī)與錄音,去河邊找鬼颅拦。 笑死蒂誉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的距帅。 我是一名探鬼主播右锨,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼碌秸!你這毒婦竟也來(lái)了绍移?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哮肚,失蹤者是張志新(化名)和其女友劉穎登夫,沒(méi)想到半個(gè)月后广匙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體允趟,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鸦致,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潮剪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡分唾,死狀恐怖抗碰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绽乔,我是刑警寧澤弧蝇,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響看疗,放射性物質(zhì)發(fā)生泄漏沙峻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一两芳、第九天 我趴在偏房一處隱蔽的房頂上張望摔寨。 院中可真熱鬧,春花似錦怖辆、人聲如沸是复。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)淑廊。三九已至,卻和暖如春特咆,著一層夾襖步出監(jiān)牢的瞬間蒋纬,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工坚弱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜀备,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓荒叶,卻偏偏與公主長(zhǎng)得像碾阁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子些楣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理脂凶,服務(wù)發(fā)現(xiàn),斷路器愁茁,智...
    卡卡羅2017閱讀 134,633評(píng)論 18 139
  • Ubuntu的發(fā)音 Ubuntu缩挑,源于非洲祖魯人和科薩人的語(yǔ)言税课,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲(chóng)de夢(mèng)閱讀 99,207評(píng)論 9 467
  • linux資料總章2.1 1.0寫(xiě)的不好抱歉 但是2.0已經(jīng)改了很多 但是錯(cuò)誤還是無(wú)法避免 以后資料會(huì)慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,147評(píng)論 2 34
  • 永遠(yuǎn)不要試圖接近 若你終歸遠(yuǎn)離 Part One 回歸&故人 他靜靜地站在樹(shù)蔭下账忘,耳邊盡是此起彼伏的蟬鳴菠齿。 修長(zhǎng)挺...
    刈野閱讀 225評(píng)論 0 0
  • 說(shuō)實(shí)在的绳匀,近段時(shí)間很迷茫芋忿。一直處于奔波忙碌而又混沌空洞的狀態(tài)炸客。 幾乎十年一層不變風(fēng)平浪靜的生活,被自己的一念之差攪...
    靜享春暖花開(kāi)閱讀 566評(píng)論 0 0