集群考試相關


練習賬號:hpctrain         密碼:hpctrain^2016&        IP:211.69.141.131

Wiki:http://hpc.ncpgr.cn:8093/mediawiki/index.php/

Liunx基礎

第一章:Linux操作系統介紹

1.1 Linux操作系統起源

Linux是一個誕生於網絡、成長於網絡且成熟於網絡的操作系統。

1991年,芬蘭大學生Linus Torvalds萌發了開發一個自由的UNIX操作系統的想法,當年Linux誕生,為了不讓這個羽毛未豐的操作系統夭折,Linus將自已的作品Linux通過Internet發布。從此一大批知名的、不知名的電腦黑客、編程人員加入到開發過程中來,Linux逐漸成長起來。

現在,Linux憑借優秀的設計,不凡的性能,加上IBM、INTEL、CA、CORE、ORACLE等國際知名企業的大力支持,市場份額逐步擴大,逐漸成為主流操作系統之一。

Linux只是內核,即操作系統中允許用戶的軟件與硬件通信的那部分

Kernel–系統啟動時將內核裝入內存

–管理系統各種資源

Shell –用戶界面,提供用戶與內核交互處理接口

–是命令解釋器,提供強大的編程環境

–bash,ash,pdksh,tcsh,ksh,sh,csh,zsh…

Utility–提供各種管理工具,應用程序

 

Linux目錄結構

 

1.2 常用linux發行版本

Redhat.紅旗.turbo.united.suse.openBSD.security.knoppiXMAME.arch.中軟.debian.fox

1.3 HPC操作系統發展現狀和趨勢

隨着開放標准的集群架構興起,以及同樣開放的Linux操作系統逐漸成熟,Linux已成為高性能計算機的主流操作系統。

Linux操作系統穩定、安全、可靠、高效率、多用戶、開源等特征,尤其是多用戶特征,非常適合高性能計算的使用模式。

目前,Linux操作系統已占到高性能計算90%以上的市場份額

1.4 RHEL8系統新特性-Cockpit管理(圖像化服務管理工具)

1.5 學習linux的理由

開放性:指系統遵循世界標准規范,特別是遵循開放系統互連(OSI)國際標准。

多用戶:是指系統資源可以被不同用戶使用,每個用戶對自己的資源(例如:文件、設備)有特定的權限,互不影響。

多任務:它是指計算機同時執行多個程序,而且各個程序的運行互相獨立。

良好的用戶界面:Linux向用戶提供了兩種界面:用戶界面和系統調用。Linux還為用戶提供了圖形用戶界面。它利用鼠標、菜單、窗口、滾動條等設施,給用戶呈現一個直觀、易操作、交互性強的友好的圖形化界面

設備獨立性:是指操作系統把所有外部設備統一當作成文件來看待,只要安裝它們的驅動程序,任何用戶都可以象使用文件一樣,操縱、使用這些設備,而不必知道它們的具體存在形式。Linux是具有設備獨立性的操作系統,它的內核具有高度適應能力

生物信息應用:生物信息軟件大部分只有Linux版本;做生物信息分析的環境大部分都是Linux

數據處理優越性:Linux自帶大量的文本處理工具;能高效處理大量的數據

 

第二章:Linux操作系統遠程登錄方式

2.1遠程登錄liunx操作系統

$>ssh username@登錄節點IP地址

Putty、Xshell、VNC

 

2.2遠程傳輸文件

$>scp 本地文件登錄節點IP地址:/目錄/

Winscp、Xftp

 

第三章:Linux操作系統常用命令詳解

3.1文件目錄操作文件的類型定義

1.文件的類型定義

1>.普通文件

     文本文件:ASCII碼形式存儲

–開頭,如:-rw-r--r--1 root root 39599 Mar 8 12:15 x

     二進制文件:以二進制形式存儲在計算機中,不可直接讀,要通過相應的軟件讀取

–開頭,如:-rwxrwxrwx 1 root root 46888960 Dec 9 2005 x.sh

2>.目錄文件:d字母開頭 如:drwxr-xr-x 2 root root 4096 Aug 2 2006 bin

3>.設備文件

塊設備文件 b開頭 如:brw-rw----1 root disk 3, 1 Jan 30 2003 hda1

     字符設備文件 c開頭 如:crw-------1 root root4, 1 Jul 31 13:49 tty1

2. 文件屬性的定義

2408830 brw-rw----1 root disk 3, 1 Jan 30 2003 hda1

1字段:inode:索引節點。每個存儲設備或存儲設備的分區(存儲設備是硬盤、軟盤、U盤...)被格式化為文件系統后,應該有兩部份,一部份是inode,另一部份是Block,Block是用來存儲數據用的。而inode是用來存儲這些數據的信息,這些信息包括文件大小、屬主、歸屬的用戶組、讀寫權限等。inode為每個文件進行信息索引,所以就有了inode的數值。操作系統根據指令,能通過inode值最快的找到相對應的文件。

2字段:文件種類和權限;            3字段:硬鏈接個數;            4字段:屬主;

5字段:所歸屬的組;                   6字段:文件或目錄的大小;

78字段:最后訪問或修改時間;  9字段:文件名或目錄名

 

3. 文件權限的定義

Linux文件或目錄的權限位由9 個權限位來控制,每三位為一組,它們分別是:

文件屬主(Ower)的讀r、寫w、執行x

用戶組(Group)的讀r、寫w、執行x

其它用戶(Other)的讀r、寫w、執行x;

如果權限位不可讀、不可寫、不可執行,是用-來表示。

 

4. 文件目錄類命令

瀏覽目錄命令:cd pwd ls         瀏覽文件命令:cat more less

目錄操作命令:mkdir rmdir            文件操作命令:touch vi rm cp mv ln chmod alias

 

ls

ls(list)是一個非常有用的命令,用來顯示當前目錄下的內容。配合參數的使用,能以不同的方式顯示目錄內容。

格式:ls[選項] [路徑或文件名]

 

pwd

顯示用戶正在工作或當前所在的目錄。

格式:pwd

 

cd

cd (change directory)命令讓用戶切換當前目錄。

 

mv

可以將文件及目錄移到另一目錄下,或更改文件及目錄的名稱。

格式:[參數]<源文件或目錄> <目標文件或目錄>

 

rm

功能:刪除文件或目錄。

格式:rm[參數] <目標文件路徑>

-f:強迫刪除文件

-r:刪除目錄,等同於rmdir

mkdir

mkdir(make directory)命令可用來創建目錄。

格式:mkdir[參數] <目錄名>

-p:連續創建兩個目錄(mkdir -p dir1/dir2)

 

ln

在文件和目錄之間建立鏈接。

格式:ln [參數] <源文件或目錄> <目標文件或目錄>

軟鏈接:ln –s /usr/share/doc doc

創建一個鏈接文件doc,並指向目錄/usr/share/doc

硬鏈接: ln /usr/share/test hard

創建一個硬鏈接文件hard,這時對於test文件對應的存儲區域來說,又多了一個文件指向它。

 

cp

cp(copy)命令可以將文件從一處復制到另一處。一般在使用cp命令時將一個文件復制成另一個文件或復制到某目錄時,需要指定源文件名與目標文件名或目錄。

格式:cp[參數]<源文件路徑><目標文件路徑>

-r:拷貝目錄

 

chmod

+表示增加權限、-表示取消權限、=表示唯一設定權限。

r表示可讀取,w表示可寫入,x表示可執行。

u表示該檔案的擁有者,g表示用戶組,o表示其他人,a表示這三者皆是。

 

chmod u+x ex1.py #給ex1.py的擁有者增加可執行權限

chmod 771 file   #設置file的文件權限為771

r=4,w=2,x=1若要rwx屬性則4+2+1=7;若要rw-屬性則4+2=6;若要r-x屬性則4+1=5。

 

alias(unalias)

可以定義一些命令的別名,方便使用,別名設置可以放在Bash的初始化腳本中自動加載

alias ll='ls-l --color=tty'

 

3.2文本操作

1. 文本編輯器:vim vi

進入vi的命令

vi filename :打開或新建文件,並將光標置於第一行首

vi +n filename :打開文件,並將光標置於第n行首

vi + filename :打開文件,並將光標置於最后一行首

vi +/pattern filename:打開文件,並將光標置於第一個與pattern匹配的串處

vi -r filename :在上次正用vi編輯時發生系統崩潰,恢復filename

vi filename....filename :打開多個文件,依次進行編輯

移動光標類命令

w或W :光標右移一個字至字首

b或B :光標左移一個字至字首

e或E :光標右移一個字至字尾

) :光標移至句尾

屏幕翻滾類命令

Ctrl+u:向文件首翻半屏

Ctrl+d:向文件尾翻半屏

Ctrl+f:向文件尾翻一屏

Ctrl+b;向文件首翻一屏

nz:將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部。

插入文本類命令

i:在光標前

I :在當前行首

a:光標后A:在當前行尾

o:在當前行之下新開一行

O:在當前行之上新開一行

r:替換當前字符

R:替換當前字符及其后的字符,直至按ESC鍵

s:從當前光標位置處開始,以輸入的文本替代指定數目的字符

S:刪除指定數目的行,並以所輸入文本代替之

vi常用操作命令

:n1,n2 co n3:將n1行到n2行之間的內容拷貝到第n3行下

:n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下

:n1,n2 d:將n1行到n2行之間的內容刪除

:w:保存當前文件

:e filename:打開文件filename進行編輯

:x:保存當前文件並退出

:q:退出vi

:q!:不保存文件並退出vi

:!command:執行shell命令command

:r!command:將命令command的輸出結果放到當前行

:n1,n2 w!command:將文件中n1行至n2行的內容作為command的輸入並執行;

若不指定n1,n2,則表示將整個文件內容作為command的輸入

刪除命令

ndw或ndW:刪除光標處開始及其后的n-1個字

do:刪至行首

d$:刪至行尾

ndd:刪除當前行及其后n-1行

x或X:刪除一個字符,x刪除光標后的,而X刪除光標前的

Ctrl+u:刪除輸入方式下所輸入的文本

 

 

搜索及替換命令

/pattern:從光標開始處向文件尾搜索pattern

?pattern:從光標開始處向文件首搜索pattern

n:在同一方向重復上一次搜索命

N:在反方向上重復上一次搜索命令

:s/p1/p2/g:將當前行中所有p1均用p2替代

:n1,n2s/p1/p2/g:將第n1至n2行中所有p1均用p2替代

:g/p1/s//p2/g:將文件中所有p1均用p2替換

輸出重定向

> 覆蓋

>> 追加

2>> 錯誤信息追加

&>> 正確和錯誤信息均寫入同一個文件

管道可以把管道前面進程的輸出結果作為管道后面的進程輸入內容處理

head -16 /etc/passwd | tail -1

 

2. 文本處理命令:

cat、more、less、head、tail、wc、nl、cut、sort、uniq、sed、awk、file;
cat

用於顯示文件的內容,也可以將數個文件合並成一個文件。

格式:cat[參數]<文件名>

 

more

一般用於要顯示的內容會超過一個畫面長度的情況。為了避免畫面顯示時瞬間就閃過去,用戶可以使用more命令,讓畫面在顯示滿一頁時暫停,此時可按空格健繼續顯示下一個畫面,或按Q鍵停止顯示。

 

less

與more命令類似,也可以用來瀏覽超過一頁的文件。所不同的是less命令除了可以按空格鍵向下顯示文件外,還可以利用上下鍵來卷動文件。當要結束瀏覽時,只要在less命令的提示符“:”下按Q鍵即可。

 

head

用於顯示文件前幾行的內容

格式:head[參數]<文件名>

head -10 file #顯示文件的前10行內容

 

tail

用於顯示文件后幾行的內容

格式:tail[參數]<文件名>

tail -10 file  #顯示文件的倒數10行內容

tail +10 file  #顯示文件的從第10行開始到末尾的內容

 

wc

統計指定文件中的字節數、字數、行數,並將統計結果顯示輸出。

格式:wc[參數]<文件名>

-c統計字節數。

-l統計行數。

-m統計字符數。這個標志不能與-c標志一起使用。

-w統計字數。一個字被定義為由空白、跳格或換行字符分隔的字符串。

-L打印最長行的長度。

nl

nl命令在linux系統中用來計算文件中行號。

格式:nl[參數]<文件名>

-b:指定行號指定的方式,主要有兩種:

-b a:表示不論是否為空行,也同樣列出行號(類似cat-n);

-b t:如果有空行,空的那一行不要列出行號(默認值);

-n:列出行號表示的方法

-w:行號欄位的占用的位數。

-p在邏輯定界符處不重新開始計算。

cut

cut 命令從文件的每一行剪切字節、字符和字段並將這些字節、字符和字段寫至標准輸出。

格式:wc[參數]<文件名>

-b :以字節為單位分割。這些字節位置將忽略多字節字符邊界,除非也指定了-n 標志。

-c :以字符為單位進行分割。

-d :自定義分隔符,默認為制表符。

-f :與-d一起使用,指定顯示哪個區域。

-n :取消分割多字節字符。僅和-b 標志一起使用。如果字符的最后一個字節落在由-b 標志的List 參數指示的<br/>范圍之內,該字符將被寫出;否則,該字符將被排除

sort

將文本文件內容加以排序,sort可針對文本文件的內容,以行為單位來排序。

-b 忽略每行前面開始出的空格字符。

-c 檢查文件是否已經按照順序排序。

-d 排序時,處理英文字母、數字及空格字符外,忽略其他的字符。

-f 排序時,將小寫字母視為大寫字母。

-i排序時,除了040至176之間的ASCII字符外,忽略其他的字符。

-m 將幾個排序好的文件進行合並。

-M 將前面3個字母依照月份的縮寫進行排序。

-n 依照數值的大小排序。

-o<輸出文件> 將排序后的結果存入指定的文件。

-r 以相反的順序來排序。

-t<分隔字符> 指定排序時所用的欄位分隔字符。

+<起始欄位>-<結束欄位> 以指定的欄位來排序,范圍由起始欄位到結束欄位的前一欄位。

--help 顯示幫助。

--version 顯示版本信息。

例:sort -t : -k 3n file  #文件的第三項進行排序

uniq

可以去除排序過的文件中的重復行,因此uniq經常和sort合用。也就是說,為了使uniq起作用,所有的重復行必須是相鄰的。

-c或--count:在每列旁邊顯示該行重復出現的次數;

-d或–repeated:僅顯示重復出現的行列;

-f<欄位>或–skip-fields=<欄位>:忽略比較指定的欄位;

-s<字符位置>或–skip-chars=<字符位置>:忽略比較指定的字符;

-u或--unique:僅顯示出一次的行列;

-w<字符位置>或–check-chars=<字符位置>:指定要比較的字符。

sed

一個精簡的、非交互式的編輯器。sed 逐行處理文件(或輸入),並將輸出結果發送到屏幕。

-i修改文件內容

-n取消默認輸出

a追加內容到指定行后

i插入內容到指定行前

d刪除指定行

c用新行替換舊行(不常用)

s對每行第一次匹配到的內容替換,配合標志g可以將一行中所有匹配到的內容替換

p輸出指定內容,默認會輸出2次匹配到的內容

awk

把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理。

awk[-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

[-F|-f|-v] 大參數,-F指定分隔符,-f調用腳本,-v定義變量var=value

' ' 引用代碼塊

BEGIN 初始化代碼塊,對每一行處理前初始化代碼,主要引用全局變量,設置FS分隔符

// 匹配代碼塊,可以是字符串或正則表達式

{} 命令代碼塊,包含一條或多條命令

;多條命令使用分號分隔

END 結尾代碼塊,對每一行處理后執行的代碼塊,主要是最終計算或輸出結尾摘要信息

特殊要點:$0 表示整個當前行;$1 每行第一個字段

file

file命令用來識別文件類型,也可用來辨別一些文件的編碼格式。它是通過查看文件的頭部信息來獲取文件類型,而不是像Windows通過擴展名來確定文件類型的。

-b列出文件辨識結果時,不顯示文件名稱。

-c詳細顯示指令執行過程,便於排錯或分析程序執行的情形

-f列出文件中文件名的文件類型

-F使用指定分隔符號替換輸出文件名后的默認的":"分隔符。

-i輸出mime類型的字符串

-L查看對應軟鏈接對應文件的文件類型

-z嘗試去解讀壓縮文件的內容

--help顯示命令在線幫助

-version顯示命令版本信息

 

3.3 查看系統

df

用於查看文件系統的各個分區的占用情況

du

查看某個目錄中各級子目錄所使用的硬盤空間數

格式:du [參數] <目錄名>

free

功能:用於查看系統內存,虛擬內存(交換空間)的大小占用情況

uptime

執行結果:

12:59:32 up 9 days, 2:13,  8 users,  load average: 0.08, 0.03, 0.05

當前時間  系統上次啟動運行時間 連接數量 1min,5min,15min系統平均負載

 

3.4 進程管理

1.進程:運行中的程序

(1)分類:交互進程、批處理進程、守護進程

              守護進程總是活躍的,一般是后台運行,守護進程一般是由系統在開機時通過腳本

自動激活啟動或超級管理用戶root來啟動。它所處的狀態是等待請求處理任務。

       (2)屬性:

              進程ID(PID):是唯一的數值,用來區分進程;

子進程和父進程的ID(PPID);

啟動進程的用戶ID(UID)和所歸屬的組(GID);

進程狀態:狀態分為運行R、休眠S、僵屍Z;

進程執行的優先級;

進程所連接的終端名;

進程資源占用:比如占用資源大小(內存、CPU占用量)

       (3) 父進程和子進程:

              他們的關系是管理和被管理的關系,當父進程終止時,子進程也隨之而終止。但子

進程終止,父進程並不一定終止。

在進程管理中,當我們發現占用資源過多,或無法控制的進程時,應該殺死它,以保護系統的穩定安全運行。

2.命令:top、ps、bg、fg、jobs、kill、pgrep、nohup、screen、Ctrl+z、Ctrl+c

top

與ps相比,top是動態監視系統任務的工具,top 輸出的結果是連續的

-b 以批量模式運行,但不能接受命令行輸入;

-c 顯示命令行,而不僅僅是命令名;

-d N 顯示兩次刷新時間的間隔,比如-d 5,表示兩次刷新間隔為5秒;

-i 禁止顯示空閑進程或僵屍進程;

-n NUM 顯示更新次數,然后退出;

-p PID 僅監視指定進程的ID;PID是一個數值;

-q 不經任何延時就刷新;

-s 安全模式運行,禁用一些效互指令;

-S 累積模式,輸出每個進程的總的CPU時間,包括已死的子進程;

ps

獲得線程信息:  ps -eLf  ps axms

獲得進程樹:      ps -ejH ps axjf

l 長格式輸出;

u 按用戶名和啟動時間的順序來顯示進程;

j 用任務格式來顯示進程;

f 用樹形格式來顯示進程;

a 顯示所有用戶的所有進程(包括其它用戶);

x 顯示無控制終端的進程;

r 顯示運行中的進程;

 

bg

將一個在后台暫停的命令,變成繼續執行

如果后台有多個命令,可以用bg%jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)

fg

將后台中的命令調至前台繼續運行

如果后台有多個命令,可以用fg%jobnumber將選中的命令調出,%jobnumber是通過jobs命令查到的后台正在執行的命令的序號(不是pid)

jobs

查看當前有多少在后台運行的命令

kill

kill的應用是和ps 或pgrep 命令結合在一起使用的

格式:kill [信號代碼]進程ID

注:信號代碼可以省略;我們常用的信號代碼是-9,強制終止。強制終止退出僵屍進程。

pgrep

通過程序的名字來查詢進程的工具,一般是用來判斷程序是否正在運行。

格式:pgrep 參數選項 程序名

-l 列出程序名和進程ID;

-o 進程起始的ID;

-n 進程終止的ID;

 

nohup

不掛斷地運行命令。

格式:nohup Command [ Arg… ] [& ]

運行由Command 參數和任何相關的Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號。

screen

GNU Screen是一款由GNU計划開發的用於命令行終端切換的自由軟件。用戶可以通過該軟件同時連接多個本地或遠程的命令行會話,並在其間自由切換。

格式:screen [-AmRvx-ls -wipe][-d <作業名稱>][-h <行數>][-r <作業名稱>][-s ][-S <作業名稱>]

-A 將所有的視窗都調整為目前終端機的大小。

-d <作業名稱> 將指定的screen作業離線。

-h <行數> 指定視窗的緩沖區行數。

-m 即使目前已在作業中的screen作業,仍強制建立新的screen作業。

-r <作業名稱> 恢復離線的screen作業。

-R 先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。

-s 指定建立新視窗時,所要執行的shell。

-S <作業名稱> 指定screen作業的名稱。

-v 顯示版本信息。

-x 恢復之前離線的screen作業。

-ls或--list 顯示目前所有的screen作業。

-wipe 檢查目前所有的screen作業,並刪除已經無法使用的screen作業。

Ctrl+Z

可以將一個正在前台執行的命令放到后台,並且暫停

Ctrl+C

強制中斷程序的執行

 

3.5 文件查找

man

Linux下的幫助指令,通過man指令可以查看Linux中的指令幫助、配置文件幫助和編程幫助等信息。

格式:man 選項 參數

-a:在所有的man幫助手冊中搜索;

-f:等價於whatis指令,顯示給定關鍵字的簡短描述信息;

-P:指定內容時使用分頁程序;

-M:指定man手冊搜索的路徑。

scp遠程復制命令

ssh遠程登錄命令

 

文件查找

which查看可執行文件的位置

whereis命令只能用於搜索二進制文件(-b)、源代碼文件(-s)、說明文件(-m)位置

locate配合數據庫查看文件位置

find實際搜尋硬盤查詢文件名稱

 

文件壓縮

pigz

就是支持並行壓縮的gzip。Pigz默認用當前邏輯cpu個數來並發壓縮,無法檢測個數的話,則默認並發8個線程,也可以使用-p指定線程數。需要注意的是其CPU使用比較高。

格式:pigz[options] [files ...]

-0 to -9,-11: 壓縮級別

-p n: 指定壓縮核心數,默認8個

-k:壓縮后保留原文件

壓縮文件pigz-6 -p 10 -k filename

壓縮后生成filename.gz文件

壓縮目錄tar cvf-/data/test | pigz-6 -p 10 -k > test.tar.gz

解壓文件gzip-d filename.gz 或者pigz-d filename.gz

解壓目錄tar -xvfzfilename.tar.gz

 

tar

1)將多個文文件打包為一個文件,

2)將文件打包並壓縮,

3)將打包的文件解包,

4)將打包壓縮的文件解壓

打包並壓縮多個文件tar -zcvf filename.tar.gz*.txt

 

history

用於顯示歷史記錄和執行過的指令命令。

who

命令顯示關於當前在本地系統上的所有用戶的信息。

–m 顯示當前用戶的IP信息

wget

是一個下載文件的工具,它用在命令行下。

-c 斷點續傳下載

dos2unix

把windows的格式文件轉換成linux的格式文件

格式:dos2unix filename

 

第四章:Linux下的shell編程

3.1 Bash內部命令

常用的內部命令:

:(true).(source) alias bg bind builtin cd declare dirs disown echo enable eval exec exit export fc fg getopts hash help history jobs kill let local logout popd pushd pwd read readonly return set shift stop suspend test times trap typest ultimit umask unalias unset wait

循環分支控制相關:

if else eliffi for do done case while until continue break

 

3.2 Bash命令邏輯組合

管道線分隔符

command1 && command2 (前者執行成功才執行后者)

command1 || command2 (前者執行失敗才執行后者)

 

3.3 Bash通配符

*         配任何字符串,包括空字符串

?        匹配任何單個字符

[]        按照字符范圍或列表匹配

{…,…} 按照字符串列表匹配

\          轉意符,使元字符失去其特殊的含義

 

3.4 Bash數學運算

調用外部命令expr,只能用於整型運算

expr \(1+1\)\*\(2\*2\)   (結果為8)

a=`expr 1+1`     (a=2)

 

3.5 Bash數學運算

condition1 -acondition2邏輯與

condition1 -o condition2邏輯或

!condition邏輯取非

 

3.6 Bash循環控制

for name in tom bob cindy

do

echo $name

done

 

for iin `seq 1 10`

do

ssh node$i date

done

 

for ((i=0; i<=10; i++))

do

echo $i

done

 

 

 

 

 

 

生信軟件安裝

一、環境變量

PATH, 自動搜索安裝的可執行文件

LD_LIBRARY_PATH,動態鏈接庫搜索位置

PERL5LIB,perl模塊位置

PYTHONPATH,python模塊位置

export PATH=/opt/bin/:$PATH #或寫入~/.bashrc文件

 

二、安裝方法

1.腳本軟件:采用Perl/Python等解釋型語言編寫, 下載可用

用法:系統安裝對應的解釋器, 添加x權限

優點:下載就可以直接用, 修改方便

缺點:可能需要很多依賴, 性能差

2.jar采用java或類java語言編寫, 開發人員已編譯打包好, 下載可用

用法:系統安裝JDK, java -jar package.jar

優點:下載就可以直接用, 跨平台

缺點:相比C/C++性能較差, 對內存有一定要求

3. 二進制可執行包:采用C/C++等編譯語言編寫, 開發人員已編譯好, 下載可用

用法:下載系統對應版本的二進制軟件, 添加x權限

優點:下載就可以直接用, 不依賴編譯器

缺點:沒法看到源碼;不能根據需要預編譯;依賴預編譯系統底層庫;跨平台性差

4.源碼編譯

(1)優點:可以指定預編譯選項;使用自己系統的依賴庫

(2)缺點:對新手不友好; 很多軟件編譯步驟復雜; 自己手動解決依賴;

      (3)常用編譯器:

           GCC(GNUCompiler CollectionGNU編譯器套件):由GNU開發的編程語

言編譯器,是采用GPL及LGPL協議所發行的自由軟件,是Linux及類Unix標准編譯器,被認為是跨平台編譯器的事實標准;GCC可處理C、C++、Fortran、Pascal、Objective-C、Java等其他語言。

           Intel Composer XE (Intel編譯器): Intel編譯器是Intel公司發布

的x86平台(IA32/INTEL64/IA64/MIC)編譯器產品,支持C/C++/Fortran編程語言;Intel編譯器針對Intel處理器進行了專門優化,性能優異,在其它x86處理器平台上表現同樣出色

      (4)源代碼后綴規范:在Linux系統中,可執行文件沒有統一的后綴,系統從文件屬性來區分;而源代碼、目標文件等后綴名最好保持統一的規范,便於識別區分

(5)程序編譯流程:

源文件source—(編譯)—>目標文件object—(鏈接)—>可執行文件(執行)

(6)使用頭文件

    源文件中如果引用了頭文件,編譯器會在自動在一些系統頭文件目錄中搜索

默認搜索的頭文件目錄一般包括(優先級由高到低):

a.源文件所在目錄(要求源文件中用#include "..."格式指定)

b.INCLUDE之類環境變量指定的目錄

c.編譯器自己的頭文件目錄

d./usr/include操作系統頭文件目錄

如果想自定義頭文件搜索路徑,可以使用-I<path> 參數

用-I 指定的目錄優先級高於默認搜索路徑

-I參數也可以指定多個:-I<path1> -I<path2> ...

(7)庫文件

靜態庫:命名規范為libXXX.a;庫函數會被連接進可執行程序,可執行文件

體積較大;可執行文件運行時,不需要從磁盤載入庫函數,執行效率較高;庫函數更新后,需要重新編譯可執行程序。

       動態庫:命名規范為libXXX.so;庫函數不被連接進可執行程序,可執行文

件體積較小;可執行文件運行時,庫函數動態載入;使用靈活,庫函數更新后,不需要重新編譯可執行程序

       使用:連接時,直接提供庫函數路徑;使用編譯器的-L<path> -lXXX參數,

表示在指定庫函數路徑下搜索名為libXX.so或libXX.a的庫文件;可執行程序運行時,動態鏈接的函數庫需從磁盤載入內存,動態庫同樣有搜索路徑

搜索路徑優先級從高到低:

LD_LIBRARY_PATH環境變量指定的路徑

系統配置文件/etc/ld.so.conf中指定的動態庫搜索路徑

系統的/lib(64)、/usr/lib(64)等庫文件目錄

5.Makefile簡介

(1)Makefile:軟件程序的管理工具;定義規則,實現自動化編譯;處理源代碼、目標文件,頭文件,庫文件等依賴關系;根據規則和依賴關系,結合時間戳實現精細化控制

(2) make命令: make命令執行Makefile中的定義的編譯流程;make命令默認讀取當前目錄Makefile或makefile文件,也可以用-f 參數指定Makefile文件

(3) Configure腳本:

1.檢查編譯環境(數據類型長度(int),操作系統,CPU平台)

2.檢查依賴頭文件及庫文件

3.設置安裝路徑

4.設置編譯器及編譯參數

Configure à make à make install

6.系統包管理器

用法:yum:RedHat/CentOS/Fedora; apt-get:Ubuntu,Debian; brew:MacOS

優點:簡單, 一鍵搞定;包管理器自己解決軟件依賴

缺點:生物信息軟件大部分不在包管理器中,用於安裝底層依賴庫;需要root

三、軟件/包安裝

(1) condaAnaconda是一個用於科學計算的Python發行版, Anaconda使用conda

管理Anaconda的包和環境, 不僅是python包, 還可以是各種其他的軟件。

    優點:不需要root權限;自行解決依賴關系;一鍵安裝, 不需要配置環境

缺點:有些軟件conda中沒有, 需要自己手動安裝;環境混亂、版本管理麻煩

(2) singularityHPC集群的容器工具,直接使用docker鏡像

    優點:簡單;無需安裝任何依賴   缺點:軟件較少;文件比較大

(3)R包:install.packages;R CMD INSTALL;BiocManager::install。

(4)Perl包:cpan;源碼;cpanm

(5)Python包:conda;pip;源碼

作重集群介紹、基本使用及LSF使用

一、高性能計算基礎知識

1. HPC由來

高性能計算(HPC)是指使用並行算法,通過SMP或Cluster架構計算平台,解決CPU、內存、網絡和存儲的性能瓶頸,實現高並發性能的計算過程。實現了求解規模更大、計算時間更短、計算任務更多的目的。

CPU制程、成本、CPU間通訊、功耗等方面的限制,單個CPU和單台機器(單路、雙路、八路)不可能無限制地做大

數據爆炸、問題復雜,對計算的需求無止境

2. HPC集群思想-分而治之

      根據問題求解過程,把任務分成若干子任務(任務級並行);根據處理數據的方式,形成多個相對獨立的數據區,由不同的處理器分別處理(數據並行)

3. HPC集群系統結構

      HPC集群,即用廉價的服務器通過高速網絡互連組成一個計算整體

優勢:標准化程度高;性價比高;拓展性強;投資風險小

4. HPC集群構成-計算核心

計算系統:X86 CPU、ARM、PowerPC,通用計算、計算核心數少

加速卡GPU、MIC、FPGA、SW26010,專用計算、計算核心數多

5. HPC集群構成-高速網絡

高速網絡:1G/10G以太網、InfiniBand、OPA、Myrinet、Express-2

InfiniBand高帶寬、低延遲、offload,已成為集群通用高速網絡的代名詞

網絡結構:fat tree、butterfly、Dragonfly、3D torus

6. HPC集群構成-存儲系統

存儲介質:機械盤(SATA SAS)、固態盤(SLC MLC TLC QLC)、磁帶庫、光盤

本地硬盤:簡單、廉價、容量有限、性能有限

磁盤陣列:大容量、性能有所提高、管理稍復雜、成本較高

分布式/並行存儲系統(GPFS、lustre、GlusterFS、isilon、HDFS、OceanStor9000、ParaStor),

單一文件系統和命名空間、scale-up擴展、高性能、高安全性

7. HPC集群構成-軟件系統

      操作系統: CentOS、SUSE、RHEL、Unix、Windows

集群管理監控系統: OpenHPC、XCat、ganglia、lico、GridView、cluster engine

基礎庫、應用軟件: MPI、blas、MKL、gcc、intel編譯器

作業調度系統: LSF、SGE、PBS、slurm

8. HPC集群構成-其它

      服務器形態:工作站、機架服務器、刀片服務器、高密度

制冷:精密空調、列間空調、整機櫃水冷、片上水冷、浸沒式水冷

9. HPC供應商

      國際: IBM、Cray、HPE、DELL、NEC、Fujitsu

國內:聯想、曙光、浪潮、華為

 

 

 

二、作重集群介紹

1. 整體硬件配置

      聯想集群(2014)基礎上並入曙光集群(2018), 共計2台管理節點,4台登陸節點,155台刀片計算節點,2台GPU節點,6台八路胖節點,總內存約52TB,計算能力約375萬億次

      聯想並行存儲(DSS) 5.5PB,帶寬50GB;曙光備份存儲(Parastor) 1.1PB

2.主存儲:聯想並行存儲DSS

Lenovo Distributed Storage Solution for IBM Spectrum Scale (DSS-G),聯想為高性能計算、大數據、雲計算等領域推出的存儲解決方案,便捷的scale-out拓展和強勁的IO性能,國內多家校級計算平台、冷凍電鏡計算集群采用

DSS文件系統采用IBM Spectrum Scale(GPFS),業界主流HPC商業文件系統

作重DSS存儲,4台IO節點、12台84盤位盤櫃、1000余塊8T硬盤組成,由GPFS管理,采用8+2數據冗余,統一用戶映像(即單一目錄),讀寫帶寬50GB/s。系統掛載目錄為/public(用戶home目錄所在),可用容量約為5.5PB

*注意事項:為了平衡存儲性能和利用率,GPFS的sub block size為128K,

比較小的文件(KB級),其占據的硬盤空間至少為128KB,因此對於比較小的文件(如軟件源碼包等)建議及時刪除,減少磁盤空間浪費

目前每個人的存儲沒有限制,數據數量限制為800萬,超過無法寫入數據

3.備份存儲:曙光並行存儲ParaStor

曙光自研的軟硬件一體並行存儲解決方案,scale-out方式拓展,軟硬件迭代較快,原廠研發工程師及時技術支持

作重ParaStor存儲,由12台36盤位存儲服務器、440余塊4T硬盤組成,由曙光自研的文件系統管理,采用8+2數據冗余,統一用戶映像(即單一目錄)。由於購買時間較長,性能無法滿足目前的需求,現作為集群的備份存儲,存放用戶需要備份的數據。掛載於login02節點的/backup目錄,向管理員申請后使用

*注意事項:為了節省存儲空間,備份的數據需要被壓縮后才能放到備份存儲上

 

 

 

 

三、集群登錄及數據傳輸

1.登錄節點

管理節點mn01  211.69.141.141  不允許登錄

登錄節點mn02  211.69.141.142  校園網登錄

登錄節點login01  211.69.141.130  校園網登錄

備份存儲節點login02  211.69.141.131 校園網登錄

內網登錄節點login03  192.168.20.209 二綜B111內網

2.登錄工具

Linux: sshusername@IP# -X 圖形轉發

Windows: xmanger(xshell)、Mobaxterm、SecureCRT、putty

3.注意事項

普通用戶不允許直接SSH到計算節點,都需要通過LSF

用戶信息通過NIS管理,普通用戶在登錄節點使用yppasswd命令修改密碼

登陸節點僅用於編輯文件、編譯軟件、查看文件、提交作業、查看作業等,嚴禁在登陸節點跑程序,否則會導致登陸節點卡頓嚴重

4.數據傳輸

Linux: scp、rsync, 大量數據推薦rsync,方便檢查

Windows: rz/sz、xmanager(sftp)、winscp、fillzilla,大量數據推薦fillzilla,sftp易卡死

校園數據傳輸較慢,大批量數據可在二綜B111使用內網傳輸(最快100MB/s)

 

四、集群公共資源

1.module

應用軟件環境管理工具,它可以動態地更改$PATH等環境變量,每次只引入我們需要的應用軟件的相關環境變量

方便軟件版本管理,同一個軟件有不同的版本,module可載入不同的版本

方便軟件依賴管理,對安裝好的軟件定義好module配置文件之后,module可一鍵載入應用軟件及其依賴的各種其它庫、軟件,且可以避免版本沖突

集群上已經安裝370個各種常用軟件、依賴庫或者安裝復雜的軟件,並定義好了module文件,如有需要可聯系管理員安裝新軟件

avail查看集群可用軟件 load載入軟件  

list查看已經載入的軟件     purge清空載入的各種軟件

2. Singularity

HPC集群的容器工具,普通用戶無需特殊權限,可以方便地在集群上使用打包好的容器鏡像,配合作業調度系統,與使用其它應用軟件的方式相同。

Singularity自有軟件倉庫,軟件較少且國內無法打開

Singularity 可直接使用docker鏡像,不必重新造輪子

利用不同的操作系統鏡像,可在本集群上體驗各種版本的linux操作系統

可以打包流程環境交交付別人使用或復現結果

國內規模較大的高校校級計算平台、國家超算中心均有配置,方便應用在其它集群上運行使用

安裝復雜且官方提供了docker鏡像的軟件,可直接pull下來使用,如qiime2

/share/Singularity/ 下存放了一些應用軟件鏡像

module load Singularity/3.1.1

#從給定的URL下載容器鏡像,

singularity pull tensorflow.sifdocker://tensorflow/tensorflow:latest常用的有URL有Docker Hub(docker://user/image:tag) 和Singularity Hub(shub://user/image:tag)

singularity exec /share/Singularity/saige_0.35.8.2.sif #在容器中執行某個命令

singularity shell /share/Singularity/ubuntu.sif       #進入容器中的shell

普通用戶也可以pull鏡像,pull鏡像后聯系管理員放到公共目錄供大家使用

3.校內鏡像站   http://mirror.ncpgr.cn/

4.生信數據庫   NR、NT、Pfam、Rfam、swissprot等

5.MySQL數據庫

      MySQLserver端運行在s004節點,聯系管理員獲取用戶名和密碼,可在任何節點使用,只需指定host(-h)為s004即可

module load MySQL/5.6.26

mysql -uUSERNAME -pPASSWORD -h s004

有些軟件可使用MySQL也可以用SQLite,優先SQLite

6. Spark on cluster

      最流行大數據處理框架,不依賴HDFS,lsf調度,可運行於HPC集群上

生信軟件會使用spark技術加速計算,典型如GATK

利用人類全基因組數據測試,GATK HaplotypeCallerSpark有60倍的加速

7.集群WIKI    http://hpc.ncpgr.cn

 

五、作業調度系統LSF使用

1.LSF特點

IBM旗下集群作業管理軟件,負責計算資源的管理和批處理作業的調度。功能豐富、文檔完善,適合集群規模較大、需求復雜的情況

依照規則自動將用戶作業提交至計算節點運行,輕松調度幾萬個作業

定義隊列特性,含不同節點、是否獨占、是否交互、時間段、用戶控制等

限制資源使用,定義用戶默認資源、時間段資源等

防止節點過載,當計算節點內存余量、系統負載高於閾值,自動掛起作業

應用軟件license管理

2.LSF使用步驟

准備:bhosts查看資源余量,編寫作業腳本job.lsf,根據bhosts結果申請資源

提交:使用bsub命令提交作業,bsub<job.lsf

排隊:lsf將該任務排入適當的隊列,bjobs-p jobid#查看排隊原因

調度:lsf檢查可使用資源等是否符合該作業的要求,並進行調度

執行:條件滿足時,作業發給相應的計算節點執行。期間可以用bpeek查看輸出

查詢和調整:作業運行時,用戶可以使用bjobs查詢作業。用戶發現作業提交錯誤時,可使用bkilljobid刪除正在運行的作業

查看結果:使用cat, less等查看輸出及錯誤信息顯示以及資源消耗量

3.注意事項

單節點作業一定要加-R span[hosts=1],否則會排隊

確保申請的CPU核心數和使用線程數相等,避免集群資源浪費或者節點高負載

申請多個核心並不能加速單線程作業的運行

bsub-q interactive -Is bash 交互模式,適合調試perl等程序

bsub-q interactive -XF -Is bash 將計算節點的圖形轉發到登錄節點,適合R畫圖,需要xshell配合

禁止在登錄節點運行程序,只用於查看、編輯文件等,管理員將直接殺掉

 

4.資源限制

每人白天可使用800核,22:00-6:00 為1500核,根據情況動態調整

節點負載高於節點核心數,作業依次自動掛起,為SSUP狀態,負載降下來之后自動恢復運行

節點可用內存低於10GB,作業依次自動掛起,為SSUP狀態,此時用戶需要用bjobs-l查看作業掛起原因及內存使用情況,如有必要殺掉后重新提到大內存隊列

LSF 基本使用

來自作物遺傳改良國家重點實驗室集群系統

LSF(Load Sharing Facility)是IBM旗下的一款分布式集群管理系統軟件,負責計算資源的管理和批處理作業的調度。它給用戶提供統一的集群資源訪

問接口,讓用戶透明地訪問整個集群資源。同時提供了豐富的功能和可定制的策略。LSF 具有良好的可伸縮性和高可用性,支持幾乎所有的主流操作系

統。它通常是高性能計算環境中不可或缺的基礎軟件。作用上與PBS一樣,使用方法略有不同。

LSF的功能和命令非常多,這里主要介紹提交作業、查看作業、殺掉作業和資源查看四類。

一、提交作業

1. LSF命令行提交作業

與PBS不同,大部分情況下,可以不寫作業腳本,直接一行命令就可以提交作業

bsub -J blast -n 10 -R span[hosts=1] -o %J.out -q normal "COMMEND"

2. LSF作業腳本1-串行作業(單節點)

LSF中用戶運行作業的主要方式為,編寫LSF作業腳本,使用bsub命令提交作業腳本。如下所示為使用LSF腳本blastn.lsf

#BSUB -J blast

#BSUB -n 10

#BSUB -R span[hosts=1]

#BSUB -o %J.out

#BSUB -e %J.err

#BSUB -q normal

time blastn -query ./ZS97_cds.fa -out ZS97_cds -db ./MH63_cds -outfmt 6 -evalue 1e-5 -num_threads 10

//提交作業blastn.lsf

bsub < blastn.lsf

腳本中每行內容解釋

-J 指定作業名稱

-n 作業使用核心數,LSF中一般稱之為slot

-R span[hosts=1] 指定作業只能在單個節點運行,不能誇節點(誇節點作業需要MPI支持,生物中比較少),-R 可以使得作業在需要滿足某種條件的節點上運行

-o 作業標准輸出,%J為作業ID,即此處的作業輸出文件為 jobid.out

-e 作業錯誤輸出,%J為作業ID,即此處的作業輸出文件為 jobid.err

-q 作業提交的作業隊列

另外還有一些常用選項

-M 指定申請的內存大小

-m 指定作業運行節點

-W hh:mm 設置作業運行時間

-w 作業依賴,方便寫流程,如-w "done(JobA)",作業名為JobA的作業完成之后,該作業才開始運行;作業依賴詳細用法

(https://www.ibm.com/support/knowledgecenter/en/SSWRJV_10.1.0/lsf_admin/job_dep_sched.html)

-K 提交作業並等待作業結束,在寫流程時會用得上,可以見后面的例子

-P 指定project name,如果我們需要統計某個項目消耗的計算資源,如CPU時等,可以將相關的作業都指定為同一個project name,然后根據project name統計資源消耗

3.LSF作業腳本2-並行作業(多節點)

#BSUB -J MPIJob ### set the job Name

#BSUB -q normal ### specify queue

#BSUB -n 400 ### ask for number of cores (default: 1)

#BSUB –R “span[ptile=40]” ### ask for 40 cores per node

#BSUB -W 10:00 ### set walltime limit: hh:mm

#BSUB -o stdout_%J.out ### Specify the output and error file. %J is the job-id

#BSUB -e stderr_%J.err ### -o and -e mean append, -oo and -eo mean overwrite

# here follow the commands you want to execute

# load the necessary modules

# NOTE: this is just an example, check with the available modules

module load intel/2018.4

module load mpi/intel/2018.4

### This uses the LSB_DJOB_NUMPROC to assign all the cores reserved

### This is a very basic syntax. For more complex examples, see the documentation

mpirun -np $LSB_DJOB_NUMPROC ./MPI_program

此腳本申請400核,每個節點40個核。

多節點並行作業需要程序本身支持,使用mpirun等MPI命令運行,絕大部分生物軟件不支持多節點並行。如不確定程序是否支持多節點並行,請勿使

用,避免資源浪費。

使用系統范圍的intelmpi / openmpi時,可以省略-np $ LSB_DJOB_NUMPROC命令,因為程序會自動獲取有關核心總數的信息。如果使用不同的MPI

庫,可能需要明確指定MPI的數量 以這種方式在命令行上進行處理。

4.LSF批量提交作業及注意事項

生信中經常會遇到需要跑大量作業以及復雜流程的情況,特別是當流程中使用的軟件為多線程和單線程混雜時,如果把所有流程步驟寫到同一個shell腳本,並按多線程需要的線程數來申請CPU 核心數,無疑會造成比較大的浪費。

在此建議將流程中的主要運行步驟直接用bsub提交,按需要申請核心數、內存等,需要用上文中提到的bsub的 -K 參數。這里寫了一個跑RNA-Seq流程的example,主要是2個腳本,RNA.sh 為具體處理每個樣本的流程腳本,在batch_run.sh 對每個樣本都提交運行RNA.sh腳本。

使用時,提交batch_run.lsf腳本即可, bsub < batch_run.lsf。

5.LSF交互作業

類似於PBS中的qsub -I,為了防止濫用(開了之后長期不關等)交互模式,目前只允許在interactive隊列使用交互模式,且時間限制為48h,超時會被殺掉。

bsub -q interactive -Is bash

也可以

bsub -q interactive -Is sh

此時不會加載~/.bashrc

6.查詢作業

使用bjobs查看作業信息

可以查看作業的運行狀態、隊列、提交節點、運行節點及核心數、作業名稱、提交時間,作業狀態主要有:

PEND 正在排隊

RUN 正在運行

DONE 正常退出

EXIT 異常退出

SSUSP 被系統掛起

USUSP 被用戶自己掛起

bjobs還有一些常用的選項,

-r 查看正在運行的作業

-pe 查看排隊作業

-p 查看作業排隊的原因

-l 查看作業詳細信息

-sum 查看所有未完成作業的匯總信息

 

7. 查詢輸出文件

在作業完成之前,輸出文件out和error被保存在系統文件中無法查看,可以使用bpeek命令查看輸出文件

8. 終止作業

如果用戶要在作業提交后終止自己的作業,可以使用bkill命令,用法為bkill jobid。非root用戶只能查看、刪除自己提交的作業。

9. 資源查看

bhosts 查看所有節點核心數使用情況

HOST_NAME 節點名稱

STATUS: ok:表示可以接收新作業,只有這種狀態可以接受新作業 closed:

表示已被作業占滿,不接受新作業 unavail和unreach:系統停機或作業調度系統服務有問題

JL/U 每個用戶在該節點最多能使用的核數,- 表示沒有限制

MAX 最大可以同時運行的核數

NJOBS 當前所有運行和待運行作業所需的核數

RUN 已經開始運行的作業占據的核數

SSUSP 系統所掛起的作業所使用的核數

USUSP 用戶自行掛起的作業所使用的核數

RSV 系統為你預約所保留的核數

lsload 查看所有節點的負載、內存使用等

bqueues查看隊列信息

-l 查看隊列的詳細信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM