生信入門系列之 linux 入門(一):初識 linux 系統

Linux 是一個免費的操作系統,是生物信息分析中必不可少的工具。在 linux 系統中,所有的管理任務均可以在一個叫終端(terminal)的控制面板里完成,包括文件處理,軟體安裝以及用戶管理。這個終端是交互的,即你運行特定的命令,相應的結果會在這個終端上顯示出來。運行命令的方式是:在終端上輸入你希望運行的命令,然後按回車鍵(Enter)。如果你想終止正在運行的命令,可以按 Chrl + C。

不同於 windows 系統,linux 的文件系統是一個目錄樹(directory tree);如下圖 所示,其文件系統為一個樹狀結構。最頂端 「root」,用斜杠 「/」 表示。一般來說,普通用戶,無論是直接打開終端還是遠程登陸伺服器,所在的位置一般是在 /home/foo 下,其中的 foo 在這裡指代用戶名。

linux 的樹狀文件系統(圖片來自維基百科)

對於 windows 用戶來說,可以通過一個輕量級的軟體 putty (約 500 kb;百度可下載;雙擊軟體即可使用,無需安裝)來遠程登陸伺服器,登陸方法如下圖,圖中的序號為操作順序:

  1. 首先在 Host Name(or IP address)下方的框框中輸入伺服器的的 ID 地址,並單擊 「Open」 選項;
  2. putty 會彈出一個警告框,點擊否;
  3. 最後最出現下圖 3 中的界面,在 「login as:「 後輸入你的用戶名,回車後輸入登陸密碼(直接輸入就行了,是看不到顯示的)。

打開終端或是遠程登陸伺服器時,如果你想查看當前所在的位置,可以在終端輸入如下命令,並按回車鍵:

pwd

這個 linux 命令意思是「列印當前工作目錄」,是 「print working directory」 的英文縮寫;其返回結果是一個絕對路徑(就是從根目錄開始,依次將各級子目錄的名字組合起來),應該類似這樣:

/home/foo

與上述的樹狀文件系統相互比照,是不是立馬清楚自己到底在哪裡了?就好像 windows 下,到底在哪個盤的哪個文件夾里一樣。這個絕對路徑很有用,它不僅讓我們知道自己在哪兒,同時還可以告訴系統某個軟體在哪兒,以及告訴軟體要操作的文件在哪兒。舉個例子吧,比如說我想調用一個軟體,叫 vcftools,那麼,我要運行它,只需要在終端輸入如下命令並回車:

vcftools --vcf input_data.vcf

就可以輕輕鬆鬆算出 variants 的數目和 individuals 的數目。但很不幸的是,你也有可能得到如下結果:

bash: vcftools: command not found

大概意思就是,系統找不到這個命令在哪兒。可能有人會問了,既然是一個命令,為什麼系統會找不到呢?其實,在linux 系統中,有一個非常核心的概念:一切皆文件!即在linux環境下,任何事物都以文件的形式存在。所以,如果你的從 vcftools 安裝在 /home/foo/biosoft/vcftool-0.1.13/bin 這個絕對路徑下,那麼,你就可以這樣運行它:

/home/foo/biosoft/vcftool-0.1.13/bin/vcftools --vcf input_data.vcf

就可以的結果啦。但也有可能得到如下結果:

VCFtools - v0.1.13(C) Adam Auton and Anthony Marcketta 2009Parameters as interpreted: --vcf input_data.vcfstat error: No such file or directoryError: Cant determine file type of input_data.vcf

這時也不要慌,只要在輸入文件前加上絕對路徑即可。加入 input_data.vcf 文件在 /home/foo/vcffile 下,可以這樣運行:

/home/foo/biosoft/vcftool-0.1.13/bin/vcftools --vcf /home/foo/vcffile/input_data.vcf

這時,如無意外,就可以得到如下結果了:

VCFtools - v0.1.13(C) Adam Auton and Anthony Marcketta 2009Parameters as interpreted: --vcf /home/foo/vcffile/input_data.vcfUsing zlib version: 1.2.3.4Versions of zlib >= 1.2.4 will be *much* faster when reading zipped VCF files.After filtering, kept 16 out of 16 IndividualsAfter filtering, kept 1116595 out of a possible 1116595 SitesRun Time = 5.00 seconds

如果還報出一些奇奇怪怪的錯誤提示,那就首先檢查一下您的輸入法中是否為純英文狀態,中文和全形狀態下的輸入的空格都是會報錯的。同時,linux 里,軟體對字母大小寫是敏感的,即 linux 認為 Aa 是兩個不同的事物;也就是說大小寫也是會造成錯誤的。

前面,我多次提到了絕對路徑這個概念,不少心思敏捷的童鞋就會想了,有沒有相對路徑?有的。

舉例說明,假如我們在 /home/foo 這個路徑下,並且我們知道該路徑下有 vcffile 和 biosoft 這兩個目錄;那麼,我們可以這樣運行上述的命令:

biosoft/vcftool-0.1.13/bin/vcftools --vcf vcffile/input_data.vcf

可以看到,biosoft/vcftool-0.1.13/bin 和 vcffile 這兩個路徑都不是以斜杠 / 開頭的,所以這兩個路徑都是相對路徑。當然了,你也可也這樣運行:

biosoft/vcftool-0.1.13/bin/vcftools --vcf /home/foo/vcffile/input_data.vcf

亦或這樣:

biosoft/vcftool-0.1.13/bin/vcftools --vcf vcffile/input_data.vcf

也可以進到 vcffile 這個目錄里,這樣運行:

/home/foo/biosoft/vcftool-0.1.13/bin/vcftools --vcf input_data.vcf

或者這樣( 「..」 在這裡代表上級目錄,相應的,」../..「 代表上級目錄的上級目錄):

../biosoft/vcftool-0.1.13/bin/vcftools --vcf input_data.vcf

總之,想怎麼運行,看心情!

相信看到這裡,會有記憶力超好的童鞋會問了,我該如何像運行 pwd 那樣運行 vcftools 呢?而不是在它前面加上一大串絕對路徑或是相對路徑!

要回答這個問題,小編先給大家展示兩個命令(不深入講解):

第一個是:

which pwd

返回的應該是:

/bin/pwd

第二個是:

echo $PATH

會返回類似下面的結果:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/foo/biosoft/vcftool-0.1.13/bin

眼尖的童鞋會發現,上面一串結果其實就是許多絕對路徑通過 「:」 連接在一起的(叫做環境變數),其中有一個路徑 「/bin」 ;而 which pwd 返回的結果是 /bin/pwd。這兩個有什麼關係呢?其實不必深究,我們只需要知道,linux 把 pwd 看作一個文件(還記得前面說的「一切皆文件」嗎),linux 系統會在上述的環境變數中從左往右依次查找,看某個路徑下是否有 pwd 這個文件,然後執行這個命令。並且,環境變數是可以編輯的, 即可在環境變數 「PATH」 中添加特定的路徑。同理,如果我們的 vcftools 軟體(其實就是個文件)的路徑也在上述的路徑中,就可以在終端直接輸入 vcftools 就可以運行了。

那麼問題來了,我們該如何將特定軟體的路徑發到上述的環境變數 「PATH」 中呢?

只需要通過 export 命令,在終端中輸入以下內容,回車後,就可以將 vcftools 的路徑導入到上述的環境變數中:

# vcftools (井號後的內容 linux 系統不會讀取,可以做注釋)export PATH=$PATH:/home/foo/biosoft/vcftool-0.1.13/bin # 添加這一行就行了,export 後要加空格,不要換行。

就會得到類似這樣的結果:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/foo/biosoft/vcftool-0.1.13/bin

當然,如果你是這樣輸入的,

export PATH=/home/foo/biosoft/vcftool-0.1.13/bin:$PATH

那就應該得到類似這樣的結果:

/home/foo/biosoft/vcftool-0.1.13/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

就可以不加絕對路徑運行 vcftools 了。像這樣:

vcftools --vcf input_data.vcf

但上述做法有一個弊端,就是這個做法是暫時性的,就是說每次打開或登陸終端時,都要運行一下這個命令才行,非常麻煩。所以怎麼辦呢?

其實不難,在每個用戶的家目錄下,即上述的 /home/foo 下,都有一個非常重要的隱藏文件 「.bashrc」,裡面有許多我們每次啟動或登陸終端時,linux 系統都會默認自動運行的命令。所以,只需將

export PATH=$PATH:/home/foo/biosoft/vcftool-0.1.13/bin

添加到 「.bashrc」 文件的最後一行即可。這樣我們每次啟動或登陸終端時,系統就會自動運行這個命令了,這樣就免去可多次手動添加的麻煩。如果不想重啟終端,可以執行這個命令(相當於讓系統執行一遍 「.bashrc」 中的命令):

source .bashrc

怎麼加呢?可以在家目錄下,運行一個文本編輯命令 vim 或 nano:

vim .bashrc

對於 vim 怎麼使用,可以自行百度,有詳細教程,這裡不做贅訴(使用起來比較複雜)。

或另一個命令 nano:

nano .bashrc

這個比較簡單,只需回車後:

  1. 按向下箭頭(一直到文件最底部)
  2. 黏貼

    export PATH=$PATH:/home/foo/biosoft/vcftool-0.1.13/bin

  3. 依次按 ctrl + x,y,Enter(即保存退出)

注意1:/home/foo/biosoft/vcftool-0.1.13/bin 要做根據自己的實際路徑做相應地改動。

注意2: 在 linux 系統里,通過 nano 或是 vim 一般是通過上下左右等方向鍵或其它快捷方式移動游標。

重要知識點回顧:

  1. 終端
  2. 目錄樹
  3. 家目錄
  4. 大小寫敏感
  5. 絕對路徑和相對路徑
  6. 一切皆文件
  7. 環境變數及其編輯

本系列下期預告:linux 基礎命令

-----------------------------------------------------


推薦閱讀:

生信猿如何用好Mac高效工作
GATK4.0和全基因組數據分析實踐(上)
開悟時刻
數據分析終極解決方案!
DeepVariant: 用卷積神經網路進行DNA序列變異位點檢測

TAG:Linux | 生物信息學 |