zoukankan      html  css  js  c++  java
  • 集群考试相关

    练习账号: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 查看队列的详细信息

  • 相关阅读:
    Java Spring AOP用法
    Spring IOC的简单实现
    随机数
    Java 正则表达式
    日期格式转换
    maven settings.xml详解
    JSP与Servlet的关系
    EL表达式学习
    FreeMarker学习2
    FreeMarker学习
  • 原文地址:https://www.cnblogs.com/shengtudai/p/13733687.html
Copyright © 2011-2022 走看看