User S Guide for NJU HPC Platform

Total Page:16

File Type:pdf, Size:1020Kb

User S Guide for NJU HPC Platform

User’s Guide for NJU HPC Platform

User’s Guide for

IBM HPC Platform

Version 0.1

by Ouyangliuqing

IBM Present

10th Apr 2010

目录

1、 系统介绍

2、  环境变量设置方法

3、  PBS作业调度使用方法

4、  远程登录工具PuTTY使用方法

5、  Linux常用命令说明

6、  IBM HPC Platform集群MPI使用说明

7、  IBM HPC Platform集群常见问题说明

8、  IBM HPC Platform集群使用技巧

1、  系统介绍

1.  系统简介

南京信息工程大学高性能计算中心校级计算平台由IBM公司搭建。采用刀片服务器作为计算节点来构建这一系统。系统包括刀片计算节点、管理和登录节点、I/O节点、高性能存储和连接所有节点的 40Gbps Infiniband 高速网络,形成一个总体Linpack实测浮点运算能力超过每秒40万亿次,总存储容量超过600TB(其中50TB为1万5千转高速磁盘),存储最高并发数据访问带宽达到10GB/s,系统总功耗小于113千瓦的高性能计算平台,集群采用PBS Pro作业调度系统;可以很好地满足科研应用对计算能力和应用灵活性的需求。

集群一共包含325个服务器节点和相关网络及存储设备,其中308台为刀片计算节点,采用HS22刀片服务器和BCH高性能刀片机箱;8台为管理和登录节点,采用1U高度的x3550 M3机架式服务器;另外配置8台x3550 M3服务器作为I/O节点,通过40Gb Infiniband网络向集群提供共享的数据访问;额外配置了一台x3550 M3服务器作为专用的硬件管理节点。存储部分采用了DDN公司的SFA10000高性能磁盘阵列,由550TB SATA磁盘和50TB SAS构成分层存储环境。集群互联采用324口Mellanox GD 4700核心交换机,构成全线速、无阻塞的网络环境。

2

User’s Guide for NJU HPC Platform

2.  NUIST HPC platform 系统拓扑图

3.  系统登录方式

使用远程登陆工具(如Putty,使用方法详见第四章)

ssh 202.195.237.241

输入用户名,密码

2

User’s Guide for NJU HPC Platform

2、  环境变量设置方法

1)  使用intel编译器 版本:11.1

设置方法:

Vi ~/.bashrc #行尾添加如下几行

source /opt/intel/Compiler/11.1/046/bin/iccvars.sh intel64

source /opt/intel/Compiler/11.1/046/bin/ifortvars.sh intel64

source /opt/intel/impi/4.0.3/intel64/bin/mpivars.sh

重新用户账号登录后,使用如下命令测试:

[root@log02 ~]# which icc

/opt/intel/Compiler/11.1/046/bin/intel64/icc

[root@log02 ~]# which ifort

/opt/intel/Compiler/11.1/046/bin/intel64/ifort

[root@log02 ~]# which mpiifort

/opt/intel/impi/4.0.3.008/intel64/bin/mpiifort

[root@log02 ~]# which mpiicc

/opt/intel/impi/4.0.3.008/intel64/bin/mpiicc

2)  使用pgi编译器

设置方法:

Vi ~/.bashrc #行尾添加如下几行

#!/bin/sh

export PGI=/opt/pgi

export PATH=/opt/pgi/linux86-64/11.7/bin:$PATH

export LM_LICENSE_FILE=/opt/pgishare/license.dat

export PGRSH=ssh

测试方法:

[root@log02 ~]# which pgf77

/opt/pgi/linux86-64/11.7/bin/pgf77

2

User’s Guide for NJU HPC Platform

3、  PBS作业调度使用方法:

测试方法:

[test@log02 ~]$ cd /gpfs/fs1/home/test/apan/WRFV3/test/em_real/

[test@log02 em_real]$ pwd

/gpfs/fs1/home/test/apan/WRFV3/test/em_real

[test@log02 em_real]$ cat wrf.sh #wrf提交内容

#! /bin/sh

#PBS -l nodes=3:ppn=12 #设定提交节点数和核数

cd $PBS_O_WORKDIR

mpirun -np 36 -hostfile $PBS_NODEFILE /gpfs/fs1/home/test/apan/WRFV3/test/em_real/wrf.exe

[test@log02 em_real]$ qsub wrf.sh

PBS作业调度系统命令说明

PBS脚本文件由脚本选项和运行脚本两部分组成:

i.  PBS作业脚本选项 (若无-C选项,则每项前面加‘#PBS’);

ii.  运行脚本同LINUX下一般的运行脚本文件。

脚本中#PBS为脚本选项,用于设置一些参数:

l  #PBS –N 表示任务名称。name限15 个字符,首字符为字母,无空格。

l  #PBS –l表示资源列表,用于设定特定任务所需的一些参数。这里的nodes表示并行环境下可以使用的节点数,而walltime表示任务最大时限,而cput 表示cpu时间的最大时限,运行时间和cpu使用时间超过对应的时限,任务就会以超时退出。这三个参数不是PBS脚本参数,而是并行环境所需的参数。

l  #PBS -j表示系统输出,如果oe,则标准错误输出(stderr)和标准输出(stdout)合并为stdout,如果是eo,则合并为stderr,如果 没有设定或设定为n,则stderr和stdout分开。

l  #PBS -q表示当前任务选用的队列。在并行环境下,一个系统中往往有多个队列,任务提交后,将在所选的队列中排除等候。系统中有哪些队列可以用qstat -q查看。

l  #PBS -a date_time : date_time 格式为:[[[[CC]YY]MM]DD]hhmm[.SS]。表示经过date_time 时间后作业才可以运行。

l  #PBS -p priority : 任务优先级,整数,[-1024,1023],若无定义则为0.

l  #PBS -M user_list : 定义有关此作业的mail 发给哪些用户。

l  #PBS -I :以交互方式运行

l  #PBS -l resource_list : 定义资源列表。以下为几个常用的资源种类。
cput=N : 请求N 秒的CPU 时间; N 也可以是hh:mm:ss 的形式。
mem=N[K|M|G][B|W]:请求N {kilo|mega|giga}{bytes|words} 大小的内存。
nodes=N:ppn=M : 请求N 个结点,每个结点M 个处理器。

l  #PBS -m mail_options :mail_option 为
a:作业abort 时给用户发信;
b:作业开始运行发信;
e:作业结束运行时发信。若无此选项,默认为a。

l  #PBS -W additional_attributes : 作业的其它属性。

l  #PBS -z : 指明qsub 命令提交作业后,不在终端显示作业号。

PBS常用命令格式:

l  qsub

命令:用于提交作业

例:# qsub Job_que.sh 提交作名称为Job_que.sh的作业

l  qstat [-f][-a][-i] [-n][-s] [-R] [-Q][-q][-B][-u]

命令:用于查看作业状态

参数说明:

-f jobid 列出指定作业的信息

-a 列出系统所有作业

-i 列出不在运行的作业

-n 列出分配给此作业的结点

-s 列出队列管理员与scheduler所提供的建议

-R 列出磁盘预留信息

-Q 操作符是destination id,指明请求的是队列状态

-q 列出队列状态,并以alternative形式显示

-au userid 列出指定用户的所有作业

-B 列出PBS Server信息

-r 列出所有正在运行的作业

-Qf queue 列出指定队列的信息

-u 若操作符为作业号,则列出其状态。

例# qstat -f 211 查询作业号为211的作业的具体信息。

l  qdel

命令:用于删除已提交的作业

参数说明:

-W 间隔时间

例:# qdel -W 15 211 15秒后删除作业号为211的作业

4、  远程登录工具PuTTY使用方法

1)  PuTTY基本介绍主要内容

·  最简单的使用 -- 登录 SSH 主机

·  中文乱码的处理

·  PuTTY 常用配置的说明

o  复制、粘贴

o  保存会话

o  注销

o  自动登录用户名

o  自动设置环境变量

o  设置代理服务器

o  自动执行命令

o  备份、删除 PuTTY 的设置

·  PuTTY 的 X11 转发

·  如何用 PuTTY 建立 SSH 隧道

·  如何用 PuTTY 建立反向的 SSH 隧道,像个特洛伊木马一样突破防火墙

·  把 PuTTY 作为一个安全的代理服务器

o  安全的上网不被嗅探

o  避免 MSN 等聊天工具被监听

·  怎样用 PSCP、PSFTP 安全的传输文件

o  功能强大的 SFTP 客户端 WinSCP

·  用 PuTTYgen 生成密钥,登录 SSH 主机不再需要口令

·  Pagent 代理密钥,每次开机只需要输入一次密钥口令

·  Plink 简单而又迅速的执行 SSH 主机上的程序

·  常见问题

除了上面的这些,还夹杂了一些 PuTTY 使用上的技巧、服务器配置的一些安全建议。这是一些有关 PuTTY 的使用教程,其实也就是 SSH 的参考教程,绝大多数的内容在其他系统或软件上也都是一样的。不同的是参数、配置、命令行之类的,只要会了PuTTY,其他也就触类旁通了。

2)  基本知识

用户需要使用Baidu了解 SSH、Telnet、Rlogin 基本概念,熟悉后可以进行下一步的阅读。

i.  简介

PuTTY 的官方网站:http://www.chiark.greenend.org.uk/~sgtatham/putty/,截止到2010年3月,发布的最高稳定版本是 0.6。

PuTTY 是一个跨平台的远程登录工具,包含了一组程序,包括:

l  PuTTY (Telnet 和 SSH 客户端)

l  PSCP (SCP 客户端, 命令行下通过 SSH 拷贝文件,类似于 Unix/Linux 下的 scp 命令)

l  PSFTP (SFTP 的命令行客户端,类似于 FTP 的文件传输,只不过使用的是 SSH 的 22 端口,而非 FTP 的 21 端口,类似于 Unix/Linux 下的 sftp 命令)

l  PuTTYtel (仅仅是一个 Telnet 客户端)

l  Plink (命令行工具,执行远程服务器上的命令)

l  Pageant (PuTTY、PSCP、Plink 的 SSH 认证代理,用这个可以不用每次都输入口令了)

l  PuTTYgen (用来生成 RSA 和 DSA 密钥的工具).

虽然包含了这么多,但平时经常见到只是用 PuTTY 登录服务器,完全没有发挥出 PuTTY 的强大功能。PuTTY 作为一个组件也存在于很多的软件中,比如 FileZilla、WinSCP在后面的文字中,如非特别说明,默认的登录的协议是 SSH。毕竟用 PuTTY 主要就是登录 SSH 主机,用 Telnet、RLogin 没法体现出 PuTTY 的强大功能。

ii.  PuTTY安装

PuTTY 是一个准绿色软件,说它绿色是因为直接就能使用,完全没有任何的安装程序。准绿色是指 PuTTY 的所有配置都保存到了注册表,如果不记得备份注册表中的相关内容,下次重装机器所有配置就没了,而且配置也不方便用闪存盘随身携带。但是 PuTTY 的配置删除还是蛮方便的,运行时指定个参数 -cleanup 就可以清除 PuTTY 的所有配置信息。下载地址为:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

iii.  登录远程主机

下载好PuTTY软件后,双机PuTTY图标即可运行 PuTTY 就可以看到下面这个界面:

在这里输入服务器的 IP 或主机名,选择好登录协议,还有协议的端口,如果希望把这次的输入保存起来,以后就不需要再重新输入了,就在第4步输入好会话保存的名称,比如:mail-server,或者干脆就是主机的地址,点击保存就可以了。

最后点下面的 Open 按钮,输入正确的用户名和口令,就可以登录服务器了。

iv.  首次登录一台主机时

第一次登录时,会看到这个对话框:

这是要告诉你登录的主机密钥指纹,点 Yes 就保存起来,以后就不会再弹出这个窗口,然后就正常登录。点 No 不保存,下次还是要提示你,然后也可以正常登录。如果一台主机我们只是临时登录一下,当然就是点 No 了。Cancel 就是取消,也就是取消了这次登录。如果你曾经登录过这台主机,但是又弹出来这个对话框,可能有以下几种情形:

l  主机重新安装了操作系统

l  这台主机可能有多个IP,这次用的是另外一个 IP

l  有其他不怀好意的主机来冒充,诱骗我们登录,窃取隐秘信息

前两个情形很常见,一般点 Yes 就行了。后面这个点 No/Cancel,再去询问相关的主机管理人员。

v.  中文乱码

成功登录主机后,输入命令,有时会出现的屏幕娴熟为乱码。中文乱码是一个老生常谈的问题,提起来就头大。主要原因不外乎字符集、终端编码之类的,基本都是可以解决的。PuTTY 的默认字体和字符集并不适合中文显示, 在窗口标题上点击右键,选择 Change Settings...

在打开的配置窗口左边选择 Appearance,在右边点 Font settings 里面的 Change 按钮,选择好中文字体,比如:宋体、新宋体之类的

字体选择好了,还要确定字符集。

选择配置窗口左边的 Translation,在右边的 Received data assumed to be in which character set 下拉列表中选择最后一个“Use font encoding”,最后点下面的 Apply 按钮就生效了。

重新执行命令 ls -l,就可以正常看到中文了

vi.  乱码

如果还是乱码的话,就执行以下命令,看看系统的字符集

> echo $LANG $LANGUAGE

此时显示系统的字符集是 UTF-8 。重新返回上面选择字符集的那一步, 选择配置窗口左边的 Translation,在右边的 Received data assumed to be in which character set 下拉列表中选择“UTF-8”

vii. 在 PuTTY 里复制和粘贴

在 PuTTY 的窗口里面复制、粘贴可不能用 Windows 里的这些 Ctrl+C, Ctrl+Ins, Ctrl+V 这些快捷键,Ctrl+C 在控制台上可是终止当前的命令执行。PuTTY 的选择、复制、粘贴这些操作都是通过鼠标来完成的。在 Window-Selection 这里可以设置复制和粘贴的方式。

默认的 Action of mouse buttons (鼠标按键的功能)的选项是 Compromise,这种方式下选中有两种方式,一是直接用鼠标左键拖拉选中就可以了,二是用鼠标中键单击选中区域的开头,用滚动条拖拉到期望选中区域 的末尾,再用鼠标中键单击,就可以选中了。选中以后,单击鼠标左键就把选中部分复制到剪贴板了。粘贴也很简单,单击鼠标右键。Action of mouse buttons 的第一个选项是 Windows (Windows 方式的),鼠标中键的操作跟前面提到的一样。右键不是粘贴了,而是打开了右键菜单。

其实这个右键菜单在标题栏上点击,也都可以看得到。

第三个选项是 xterm (xterm 方式),这个跟默认的 Compromise 方式相反的,中键和右键的操作调换了一下,就不多说了。

viii.  实时保存会话

这次更改配置参数了,关闭窗口后,下次使用还是要重新选择的,麻烦。还是回到上面修改配置的哪个地方,选择左边的 Session,在右边选择要覆盖的会话名称,或者重新输入一个新的名称,点击 Save 按钮保存。

ix.  关于注销登录

成功登录主机后,也能正常看到中文了。这样,我们就可以完成大部分的工作。最后要关闭窗口了,该怎么办呢?我见过很多人,包括我们公司负责专职维护的同事,都是直接点击窗口上的关闭按钮,完全没有理会弹出警告窗口,直接点击了 Yes。

这样做是不对的,首先这不是正确的注销方式,应该输入命令 exit 来正常注销; 其次直接关闭窗口后,你的登录其实还在服务器上,如果一连多次的这样强制关闭窗口,用命令 w 或者 who 命令查看时,可以看到很多的用户还在系统上登录,占用了系统的资源。最重要的是,你的这次登录可能只是为了启动一下 WebLogic 或者其他什么应用服务器,直接关闭窗口后,可能会导致你的业务在随后的几分钟内也被终止,这应该不是你所希望看到的吧。

如果上述的理由是每次要输入 exit 然后回车,比较麻烦。你可以用快捷键 Ctrl+d 来注销登录,一般情况下,快捷键一按窗口都直接关闭了,还省了两次鼠标点击。

在前面说道保存会话时,大家或许也注意到,下面有个 Close window on exit 有三个选项:

l  Always (不管怎样,窗口总是要关闭的)

l  Never (无论是否有程序还在运行,都不要关闭窗口)

l  Only on clear exit (这个是默认选中的,只有在本次登录中运行的程序都正常终止或者在后台运行,窗口才关闭)

有的程序在执行时,虽然在命令最后面加上 “&”就能放到后台运行。但是正常注销登录后,窗口没有被自动关闭,还能看到程序的输出,这时强制关闭窗口还是可以的。为了避免这种情形,可以使用 nohup 命令。

用法为: nohup 命令 命令参数,这样就可以了。

x.  窗口保存的输出

执行了一个命令,输出了好多东西,但是默认的配置下,PuTTY只保存了最后200行的内容,满足不了我们的需求。

还是在标题栏上点右键选择 Change settings...,在配置窗口的左边选择 Window,修改右边的 Lines of scrollback,改大点,比如 20000、80000

在上面的 Set the size of the window 里设置的是窗口显示的行数和列数,默认是 24 行、80 列,根据自己的需要来修改吧。

When window is resized 这个选项配置的是,当窗口大小发生改变时该采取什么动作。

l  Change the number of rows and columns(这个是默认的,改变窗口大小时,自动修改行数和列数)

l  Change the size of the font(这个是根据窗口的大小来修改字体的大小,窗口最大化的时候,字都是很大的)

l  Change font size only when maximised(只有在窗口最大化的时候才改变字体大小)

l  Forbid resizing completely(完全禁止改变窗口大小,一了百了)

在现代的 Unix/Linux 主机上,默认选项已经不存在任何问题了。如果是 Solaris 8 这样的老式 Unix 上最好用第2或第4个选项。

第3个选项,要求你的屏幕不是宽屏的,选中这个选项以后,大家可以先把窗口往窄的缩一下,然后最大化窗口。

顺便说一下,在 PuTTY 中的前后翻页,与 Linux 终端一样,用 Shift+PageUp/PageDown 来上下翻页,而 Ctrl+PageUp/PageDown 则是一行一行的。

xi.  保持连接

在 Connection 里面有个 Seconds between keepaliaves,这里就是每间隔指定的秒数,就给服务器发送一个空的数据包,来保持连接。以免登录的主机那边在长时间没接到数据后,会自动断开 SSH 的连接。

默认输入 0 是禁用保持连接,在这里我习惯的设置了 10。

下面的那两个复选框都保持默认选中。

xii. 自动登录用户

在 Connection-Data 里面有个 Auto-login username,可以指定默认的登录用户。如果每次登录主机都是用同一个用户,不妨在这里设置一下。SSH、Telnet、Rlogin 这三种协议都支持,但不是所有的 Telnet 服务器支持自动登录用户

xiii.  自动设置环境变量

还是前面的那个界面,下面有个 Environment variables,在 Variable 输入环境变量的名称,Value里设置上环境变量的值,登录主机后就会自动设置上,但是这个不一定能用,有些主机为了安全,可能会禁用这个特性,一旦登录 就会收到这样一个错误提示:

> Server refused to set environment variables

xiv. 设置代理服务器

这个经常用到,设置方法大同小异,注意选择好 Proxy type(代理服务器的类型)就可以了。

代理服务器的地址填写到 Proxy hostname 这里,Port 就是代理服务的端口(HTTP代理常用端口有 3128、8080,Socks5代理常用端口有 1080)。Exclude Hosts/IPs 这里是填写排除的主机地址和IP,有些地址不需要代理,就在这里填写。

有些代理需要认证,用户名填写到 Username,密码则填写到下面的 Password。

xv.  自动执行一个命令

在 Connection-SSH 里有个 Remote command,在这里面填写上远程服务器上的某个命令,比如:df,登录后就会自动执行。我们在 Unix 上用 ssh 登录主机时用的命令 ssh,在 ssh 的最后面加上远程主机上的命令,就跟这个一样。一旦设置上这个选项,你会发现在登录成功后,窗口一下就关闭。因为命令执行完毕的同时,本次 SSH 登录连接也随之关闭。

你可以把远程自动执行的命令修改成 sleep 10,然后重新登录,再看看效果。
登录成功后,没有出现命令提示符,10秒钟后,窗口自动关闭。这也验证了刚才我说的,命令执行完毕后,SSH 连接自动断开。如果每次登录主机,都是要重新启动一下 tomcat,那这里就可以填写上这样的命令:

> export CATALINA_HOME="~/apache-tomcat-5.5.17";

export JAVA_HOME="~/jdk1.5.0_07";

export PATH=$JAVA_HOME/bin:$PATH ;

cd $CATALINA_HOME/bin;

> ./shutdown.sh;./startup.sh; tail -f $CATALINA_HOME/logs/catalina.out

先自动设置一下环境变量(前面有提到,服务器可能会禁用自动设置环境变量,为了保险起 见,在这里设置了一下),然后进入 tomcat 的 bin 目录,用 shutdown.sh 停止 tomcat,然后再 startup.sh 启动 tomcat,最后 tail 命令持续观察 tomcat 的日志输出,不想看了,就直接 Ctrl+C 就可以终止 SSH 的会话了。

过前面提到的命令 sleep 10,只是建立了 SSH 连接,然后 10 秒钟后自动断开。是不是觉得很无聊没什么用途啊?其实这个命令配合后面提到的 Tunnels(隧道),可以自动保持隧道一定时间的开放,如果指定时间内(在这里就是 10 秒钟)隧道没有被使用,就自动关闭 SSH 连接和隧道。

如果选中了 Don't start a shell or command at all 就禁用了自动执行命令这一个特性,这个主要是配合 Tunnels (隧道)来使用的。因为有时候,我们只需要利用隧道建立一个 VPN,而并不需要登录上去执行命令。用这个方法建立好隧道以后,就一直开放了,除非自己手工关闭。

还有个问题哦,如果一次要执行的命令很多,该怎么办呢?嗯,给 PuTTY 用 -m 选项指定一个包含远程主机上执行的命令的文本文件。不过以后还会说到 Plink,就是专门做这个用的。

xvi. 数据自动压缩传输,变相的提高传输速率

还是前面的那个界面,Protocol options 里面有个 Enable compression,这个选项的意思就是传输时压缩数据,在连接速度不变的情况下,变相的提高了传输速率。一般的 SSH 服务器都会允许这个选项的,所以还是选中好了。

xvii.  无需口令登录

在 Connection ->SSH -Auth 这里面有两个需要了解的,以后在讲到 PuTTYGEN 和 Pagent 时会详细介绍的。

一个是 Allow agent forwarding,作用是允许私钥代理的转发。

另外一个是最下面的 Private key file for authentication,选择私钥认证文件。

这两个可以让你用 SSH 登录不用输入主机口令,但是私钥的口令还是需要输入的,如果使用了私钥代理 Pagent ,私钥口令也可以省略。再配合前面提到的自动指定用户名登录,可以实现自动登录主机。登录到主机上以后,用 SSH 登录另外一个同样配置了相同的私钥认证的主机,也可以不用再次输入口令。

这些可以大大减轻了我们的重复工作,不用单调枯燥的输入用户名和口令,但是这样使用有个后遗症就是如果主机密码没有在另外一个地方记录下来的话,这个密码很快会忘记的,好处嘛,密码可以设置的很长很变态 XD。

xviii.  转发能够让你在 Windows 上使用 Linux 的程序

这里很简单,选中 Enable X11 forwarding 后登录主机,记得在我们本地运行 X 服务端程序(比如:免费好用的 Xming)。

然后在控制台直接输入 X 环境下运行的程序,比如:xlogo,我们就可以看到 Linux 上的GUI界面的程序在Windows桌面上打开了。

运行个复杂的,比如 gnome-session,这个是 GNOME 的启动命令,如果想打开KDE就是 startkde

这样跟在本地使用 X Window 几乎是一样的了,而且还是运行在 Windows 的桌面上。或许你会问这样用跟 vnc 那还不一样了?答案是,不一样。如果网络环境不好,还是用vnc吧,否则迟钝的图形响应速度会让你抓狂的。

打开了 GNOME 桌面,怎么关闭呢?点菜单的注销吧

5、  Linux常用命令说明

1.  VI命令(文本编辑器VI):

Vi 是Unix世界里极为普遍的全屏幕文本编辑器,VIM是它的改进版本Vi IMproved的简称。几乎可以说任何一台Unix机器都会提供这套软体。Linux当然也有,它的 vi 其实是 elvis(版权问题),不过它们都差不多。熟悉 DOS 下的文书处理后,也许会感到 vi 并不好用;Unix 上也已经发展出许多更新、更好用的文书编辑器,但是并不一定每一台Unix机器上都会安装这些额外的软体。所以,学习 vi 的基本操作还是有好处,让你在各个不同的机器上得心应手。

Unix 提供一系列的 ex 编辑器,包括 ex, edit 和 vi 。相对于全屏幕编辑器,现在可能很难想像如何使用 ex, edit 这种行列编辑器。 Vi 的原意是 "Visual",它是一个立即反应的编辑程序,也就是说可以立刻看到操作结果。

也由于 vi 是全屏幕编辑器,所以它必须控制整个终端屏幕哪里该显示些什么。而终端机的种类有许多种,特性又不尽相同,所以 vi 有必要知道现在所使用的是哪一种终端机。这是由 TERM 这个环境变数来设定,设定环境变数方面请查看所使用shell的说明。

只要简单的在Shell下执行vi就可以进入 vi 的编辑环境。在实际操作之前先对它有个了解会比较好。Vi 有两种模式,输入模式以及指令模式。输入模式即是用来输入文字资料,而指令模式则是用来下达一些编排文件、存档、以及离开 vi 等等的操作指令。当执行 vi 后,会先进入指令模式,此时输入的任何字元都视为指令。对于vi的详细操作,可参考相关的Unix教程。

VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后 加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种方法。本文旨在介绍VI的一些最常用命令和高级应用技巧。

l  进入vi命令

> vi filename :打开或新建文件,并将光标置于第一行首

> vi +n filename :打开文件,并将光标置于第n行首

> vi + filename :打开文件,并将光标置于最后一行首

> vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

> vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename

> vi filename....filename :打开多个文件,依次进行编辑

l  基本命令介绍

1.光标命令

k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Linux中使用键盘右边的4个 光标键,但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。

nG——跳转命令。n为行数,该命令立即使光标跳到指定行。

Ctrl+G——光标所在位置的行数和列数报告。

w、b——使光标向前或向后跳过一个单词。

2.编辑命令

i、a、r——在光标的前、后以及所在处插入字符命令(i=insert、a=append、 r=replace)。

cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。

x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。

3.查找命令

/string、?string——从光标所在处向后或向前查找相应的字符串的命令。

4.拷贝复制命令

yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。

l  常见问题及应用技巧

1.在一个新文件中读/etc/passwd中的内容,取出用户名部分。

> vi file

> :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd

> :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。

您也可以在指定的行号后读入文件内容,例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。

我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。

> #cat squid.conf.default | grep -v ^$ | grep -v ^#

2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。

> vi file

> :w /tmp/1 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。

> vi file

> :20,59w /tmp/1

3.用VI编辑一个文件,但需要删除大段的内容。

首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。

> :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:a,bd”命令删 除。

4.在整个文件的各行或某几行的行首或行尾加一些字符串。

> vi file

> :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。

> :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。

> :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。

> :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。

注意: 其中s为substitute,%表示所有行,g表示global。

5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。

> vi file1 file2

yy 在文件1的光标处拷贝所在行

:n 切换到文件2 (n=next)

p 在文件2的光标所在处粘贴所拷贝的行

:n 切换回文件1

6.替换文件中的路径。

使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin //bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。

l  更多高级命令和使用:

i.  光标移动:

h :光标左移一个字符

l :光标右移一个字符

space:光标右移一个字符

Backspace:光标左移一个字符

k或Ctrl+p:光标上移一行

j或Ctrl+n :光标下移一行

Enter :光标下移一行

w或W :光标右移一个字至字首

b或B :光标左移一个字至字首

e或E :光标右移一个字至字尾

) :光标移至句尾

( :光标移至句首

}:光标移至段落开头

{:光标移至段落结尾

nG:光标移至第n行首

n+:光标下移n行

n-:光标上移n行

n$:光标移至第n行尾

H :光标移至屏幕顶行

M :光标移至屏幕中间行

L :光标移至屏幕最后行

0:(注意是数字零)光标移至当前行首

$:光标移至当前行尾

ii.  屏幕翻滚类命令

Ctrl+u:向文件首翻半屏

Ctrl+d:向文件尾翻半屏

Ctrl+f:向文件尾翻一屏

Ctrl+b;向文件首翻一屏

nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

iii.  插入文本类命令

i :在光标前

I :在当前行首

a:光标后

A:在当前行尾

o:在当前行之下新开一行

O:在当前行之上新开一行

r:替换当前字符

R:替换当前字符及其后的字符,直至按ESC键

s:从当前光标位置处开始,以输入的文本替代指定数目的字符

S:删除指定数目的行,并以所输入文本代替之

ncw或nCW:修改指定数目的字

nCC:修改指定数目的行

iv.  删除命令

ndw或ndW:删除光标处开始及其后的n-1个字

do:删至行首

d$:删至行尾

ndd:删除当前行及其后n-1行

x或X:删除一个字符,x删除光标后的,而X删除光标前的

Ctrl+u:删除输入方式下所输入的文本

v.  搜索及替换命令

/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替换

vi.  选项设置

all:列出所有选项设置情况

term:设置终端类型

ignorance:在搜索中忽略大小写

list:显示制表位(Ctrl+I)和行尾标志($)

number:显示行号

report:显示由面向行的命令修改过的数目

terse:显示简短的警告信息

warn:在转到别的文件时若没保存当前文件则显示NO write信息

nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符

nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始

mesg:允许vi显示其他用户用write写到自己终端上的信息

vii.  最后行方式命令

: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

:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输 入

:r!command:将命令command的输出结果放到当前行

viii. 寄存器操作

"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字

"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字

"?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字

ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

tags 用法

在函数中移动光标

[{ 转到上一个位于第一列的"{"

}] 转到下一个位于第一列的"{"

{ 转到上一个空行

} 转到下一个空行 ([ and ] 也分别是两个指令)

ctrl+t 跳回

gd 转到当前光标所指的局部变量的定义

* 转到当前光标所指的单词下一次出现的地方

# 转到当前光标所指的单词上一次出现的地方

l  Mail命令

如果使用test用户帐号登录IBM HPC Platform集群,在终端经常出现:

You have new mail in /var/spool/mail/test

这肯定是系统给test员发的一些通知邮件,我常用mail命令来查看。

l  IBM HPC Platform用户使用

i.  进入系统查看邮件:

>mail 进入mail系统

ii.  如果希望查看已经阅读过的mail:

> mail –f ~/mbox

l  Mail使用说明:

> mail 进入mail系统

【注意】下面mail命令的help帮助是我个人随便翻译的,准确的请看英文说明

& help //如果不会使用或者忘记了什么命令,就输入 help 或者 ? 来获取帮助

Mail Commands

t <message list> 打印出信息 【注意】多个信息用空格分开,如 t 1 7

n 打印出下一条信息

e <message list> 编辑信息

f <message list> 输出信息的头行

d <message list> 删除信息

s <message list> file 追加信息到文件file

u <message list> 不删除某信息

R <message list> 回复发件人

r <message list> 回复发件人和本信息所有的收件人

pre <message list> 保留信息在 /usr/spool/mail 1*

m <user list> 发邮件,多个收件人用空格分开【需要sendmail支持】

q quit, saving unresolved messages in mbox 2*

x quit, do not remove system mailbox

h print out active message headers

! 让shell执行某命令,如 !ls 输出ls命令结果

cd [directory] 改变目录,这里不用 !cd,但打印当前目录需要 !pwd

1* 如果阅读过某信息,执行q退出时候,mail会把阅读过的信息“取回”放在 ~/mbox,执行pre后就不取回。如果退出时执行x命令则不会取回信息。

2* 这三句不难理解,但不好翻译(本人水平问题),也就保留原文了

l  Example:

& t 7 //阅读第7封信息,阅读时,按空格键就是翻页,按回车键就是下移一行

& d 10 //删除第10封信息

& d 10-100 //删除第10-100封信息

& top //显示当前指针所在的邮件的邮件头

& file // //显示系统邮件所在的文件,以及邮件总数等信息

& x //退出mail命令平台,并不保存之前的操作,比如删除邮件

& q //退出mail命令平台,保存之前的操作,比如删除

2.  Linux常用命令

l  cd directory 进入指定的目录

l  cd .. 进入上一级目录

l  cd /directory 进入目录

l  cd 进入用户自己的目录

l  cp file_from file_to 拷贝文件

l  ln [-s] source linkname 为一个文件建立连结

l  ls [directory] 查看指定目录下的文件

l  ls -l [directory] 查看指定目录下文件的详细

l  ls -a [directory] 查看指定目录下的所有文件

l  mkdir new_directory 建一个新目录

l  more file 查看一个文本文件的内容

l  rm file 删除一个文件

l  rm -r directory 删除一个目录

l  rmdir directory 删除一个目录

l  find . -name "file" 从当前目录开始查找指定的文件

l  adduser 创建新用户

l  alias 设置别名或替代名

l  bg fg 使挂起的进程继续运行

l  ps ax 查询当前进程

l  mount 连接文件系统

l  more 浏览文件内容

l  less 浏览文件内容

l  chown chgrp 改变文件的拥有者

l  chmod 改变文件属性

l  halt 关闭系统

l  man 显示手册页

l  passwd 改变用户口令

l  grep 查找字符串

l  find 查找文件

l  dd 复制磁盘或文件系统

l  kill 杀掉一个进程

l  killall 杀掉进程


6、  IBM HPC Platform集群MPI作业提交说明

在使用HPC集群中,提交使用MPI的作业往往是最多的,同时也是最普遍的。为此,用户需要熟悉了解MPI相关的知识和相应的命令。

在此,特别就MPI使用中会出现的问题进行讨论。

a.  使用不同的MPI编译环境

目前大量使用和MPI环境主要有:OpenMPI,MPICH1,MPICH2,MVAPICH1,MVAPICH2,Intel MPI,hpmpi。

其中支持Infiniband和iwarp万兆等高速网络的MPI环境为:Intel MPI, MVAPICH2, OpenMPI。

一般应用中,从效率的角度而言,编译后运行程序的性能一般为:

Intel MPI > OpenMPI = MVAPICH2 > hpmpi= MVAPICH1=MPICH2

具体的使用情况,请用户根据应用的情况自己选择。一般情况下,初级用户可以考虑使用OpenMPI(方便简单,效率也较高),对性能要求比较高的用户可以考虑使用Intel MPI或者OpenMPI(效率较高),某些商业软件只能支持mpich2和hpmpi。

b.  一般的使用命令

一般情况下,所有的MPI的执行命令基本相同,只是部分参数变量和参数的位置会略有不同,都主要为:

mpirun/mpiexec –np 运行核数 –machinefile 节点文件 + 可执行文件

具体的、详细的命令请参考不同的MPI环境命令的帮助文件:mpirun –help

特别需要说明的是:Intel MPI中的mpirun命令对参数的位置非常敏感,请用户注意;参数位置如果出现不符合要求时会无法正常运行MPI命令。

c.  mpdboot MPI计算环境启动问题

在MPI2的标准中,用户开始需要在运行MPI程序之前需要启动mpd运行环境,这个为集群中作业提交和运行带来了麻烦。如果用户不希望有此麻烦可以使用OpenMPI,因为OpenMPI无需启动mpd运行环境。

使用MPICH2和MVAPICH2时,在启动mpd运行环境前需要配置mpd.conf文件。具体的配置方法请参考这些MPI软件的配置和安装文件。这里就不做具体说明。

在启动mpd运行环境时,需要写一个包含mpd运行节点的文件host.mpd,例如:

例如host.mpd文件中包含12个mpd运行环境节点名称,使用ssh启动mpd环境的命令为:

> mpdboot –n 12 –f host.mpd –r ssh

正常启动后,就可以在这个mpd节点上提交MPI作业了。

d.  mpd运行环境和PBS作业提交系统

由于像MPICH2和Intel MPI这样的MPI软件在执行MPI任务时,只能在包含已启动mpd的节点中,所以在使用PBS作业调度系统时往往出现一些麻烦。主要会遇到的问题为:

l  如果某些用户将所有计算节点采用一个mpd运行环境启动后,出现网络故障后,某些节点将出现故障后不包含在mpd环境中;不包含在mpd环境中的这些节点仍是PBS作业调度系统可执行作业节点,此时,用户将无法正常提交作业;

l  如果用户只将部分节点启动mpd运行环境后,如果不在运行结束后关闭mpd,这些节点将可能成为以后计算mpd启动的障碍节点,导致后续作业无法正常提交。;

l  如果用户只将部分节点启动mpd运行环境后,在MPICH2中,某个节点只能在一个mpd环境中被包含,所以在一个节中不能同时提多个MPI作业;否则会出现之前作业的mpd环境自动退出的情况,导致作业的非常退出;

根据以上的一些情况,建议用户:

l  如果用户不熟悉MPI软件的情况,请使用OpenMPI,可以避免以上的问题

l  请用户根据自己的情况来确定mpd环境的使用情况

l  请用户熟练掌握mpd的命令给集群带来的影响

e.  mpd运行环境自动运行脚本

如果用户希望独立的提交任务时采用独立的mpd环境,请参考

7、  IBM HPC Platform常见问题说明

1)  普通用户无法使用SSH登录集群

a.  请查看远程主机IP是否输入正确

b.  请检查用户名和密码是否输入正确

c.  在远程主机IP和用户名、密码输入正确的情况下,如果仍然无法登陆远程主机,请使用ping命令,查看是否能ping通远程主机

d.  如果可以ping通远程主机,请联系管理员,请管理员检查文件系统是否挂载正确(恢复方法请参考问题6)

e.  如果无法ping通远程主机,请联系管理员,请管理员检查集群是否开启,网络是否正常

2)  普通用户SSH登录集群密码错误

a.  请联系管理员,请管理员检查文件系统是否挂载正确(恢复方法请参考问题6)

b.  如果文件系统挂载正确,请管理员重置用户密码

3)  普通用户SSH登录集群后,用户家目录下无文件

a.  请联系管理员,请管理员检查文件系统是否挂载正确(恢复方法请参考问题6)

4)  普通用户SSH登录集群后,登录计算节点和提交作业需要密码

a.  请联系管理员,请管理员检查文件系统是否挂载正确(恢复方法请参考问题6)

5)  普通用户提交MPI作业后,无法正常运行

a.  请检查MPI环境变量是否设置,关于系统使用MPI情况,请查看/opt/文件下已安装的MPI;如果没有用户所需的MPI程序,请联系管理员协助安装

b.  设置MPI环境变量后,仍然无法提交MPI作业,请使用非OpenMPI的用户检查MPI运行环境是否启动(使用mpdboot)

c.  如果仍无法解决MPI提交作业问题,请用户首先执行mpdallexit命令,然后重行启动mpdboot MPI运行环境,尝试后提交作业

d.  如果仍无法解决MPI提交作业问题,请联系管理员,删除所有节点/tmp/mpd2.console_用户名和/tmp/mpd2.logfile_用户名文件,尝试后提交作业

6)  由于GPFS文件系统非正常挂载导致集群无法正常运行

a.  首先启动所有节点的gpfs进程

> mmstartup -a

b.  在所有节点上挂在fs1文件夹

> mmmount fs1 -a

8、  IBM HPC Platform集群使用技巧

l  用户延迟提交作业

sleep 30 & qsub Job_que.sh &

延迟30秒提交qsub作业

2

Recommended publications