集群和Linux相关

PBS^usage

PBS是公开源代码的作业管理系统,在此环境下运行,用户不需要指定程序在哪些节点上运行,程序所需的硬件资源由PBS管理和分配。

PBS(Portable Batch System)是由NASA开发的灵活的批处理系统。它被用于集群系统、超级计算机和大规模并行系统。PBS主要有如下特征:

  • 易用性:为所有的资源提供统一的接口,易于配置以满足不同系统的需求,灵活的作业调度器允许不同系统采用自己的调度策略。
  • 移植性:符合POSIX 1003.2标准,可以用于shell和批处理等各种环境。
  • 适配性:可以适配与各种管理策略,并提供可扩展的认证和安全模型。支持广域网上的负载的动态分发和建立在多个物理位置不同的实体上的虚拟组织。
  • 灵活性:支持交互和批处理作业。

常用命令

Linux之三剑客,awk、sed、grep的用法^edit

awk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
eth0      Link encap:Ethernet  HWaddr 00:0C:29:18:4C:35  
inet addr:192.168.75.130 Bcast:192.168.75.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe18:4c35/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1322 errors:0 dropped:0 overruns:0 frame:0
TX packets:1093 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:147531 (144.0 KiB) TX bytes:134582 (131.4 KiB)

ifconfig eth0 |grep 'inet addr' |awk -F ":" '{print $2}'
192.168.75.130 Bcast
#可以看到后面多出来了一个Bcarst,可以打印出第一列
ifconfig eth0 |grep 'inet addr' |awk -F ":" '{print $2}'|awk '{print $1}'
192.168.75.130

sed

stream editor 流编辑器

sed 从输入读取一行,将之拷贝到一个编辑缓冲区,按指定的sed命令编辑完之后,将其发送到屏幕,然后将这行删除,读取下一行。(注意,输出的是编辑之后的结果,如果是删除,输出中部包含删除的结果。重定向之后,部打印到屏幕上。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#语法结构
sed [options] ‘[command]’ filename

# 输出前三行以外的内容,-n flush output on every line,每行刷新输出,默认
sed -n '1,3!p' passwd

# 把文件第三行替换成“bbb”
sed '3cbbb' b.txt
# 删除空行 将匹配的行记录到新的文件中
sed '/^$/d' passwd > c.txt

# 把passwd中包含FORMAT=的记录(行)写入新的文件中
sed '/FORMAT=/w newpasswd' passwd
# sed 的-i选项可以直接修改文件中的内容
sed -i 's/root/rm/' passwd

grep

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。

  • pattern 可以是正则表达式(用单引号)、或字符串(双引号)、或一个单词(没有引号)
1
2
3
4
5
6
7
8
9
10
 ls -l | grep \'^a\'
#通过管道过滤ls -l输出的内容,只显示以a开头的行。
grep \'test\' d*
#显示所有以d开头的文件中包含test的行。
grep \'test\' aa bb cc
#显示在aa,bb,cc文件中匹配test的行。
grep \'[a-z]{5}\' aa
#显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep \'w(es)t.*1\' aa
#如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成\'w(es)t.*1\'就可以了。
1
2
 ls -thl | grep 'snakejob.star_2pass_align.*o.*' | awk '{print $7,$8,$9}' | head -n 36
# 一个实例,文件排序

其他

pestat

节点状态:

  • Excl 所有CPU资源已被占用;
  • Busy CPU已接近满负荷运行;
  • free 全部或部分CPU空闲;
  • offl 管理员手动指定离线状态;

此外,还可以使用另外一个命令pnodes来查看每个节点被占用的cpu核心数,用户可以根据剩余cpu资源合理地指定自己作业中使用的cpu核心数,以免作业处于长期等待状态。该命令有个缺点,就是运行时间比较长,大概要3s才出结果,其原因是这套系统节点数太多,命令执行时间太长。^keylabwiki

1
qsub -I -l nodes=node18 # 以交互方式运行
1
2
3
4
5
6
7
8
9
10
#压缩
tar -czvf ***.tar.gz
tar -cjvf ***.tar.bz2
#解压缩
tar -xzvf ***.tar.gz
tar -xjvf ***.tar.bz2

# du,disk usage
# df,disk free
du -sh *** # 某个目录中的所有文件占了多少磁盘空间
1
./configure --prefix=/opt/software # 利用软件编译安装软件,指定目录

MPI

MPI是一种用于节点间通信的方法。^wikipedia

我觉得「消息传递接口」(Message Passing Interface, MPI)就是这样一项技术,而且学习它确实可以让你的并行编程知识变得更深厚。^tutorials

makefile简介

Makefile文件

  • 软件程序的管理工具
  • 定义规则,实现自动化编译
  • 处理源代码、目标文件、头文件、库文件等依赖关系
  • 根据规则和依赖关系,结合时间戳实现精细化控制

make命令

  • make命令执行 Makefile 中的定义的编译流程
  • make命令默认读取当前目录 Makefile 或 makefile 文件,也可用 -f 参数指定 Makefile 文件