Linux中nc命令是一个功能强大的网络工具,全称是netcat。
yum install nc -y
yum install nmap -y
语法:nc 选项 参数
选项:
-g: <网关>:设置路由器跃程通信网关,最多设置8个
-G: <指向器数目>:设置来源路由指向器,其数值为4的倍数
-h:在线帮助
-i: <延迟秒数>:设置时间间隔,以便传送信息及扫描通信端口
-l:使用监听模式,监控传入的资料
-n:直接使用ip地址,而不通过域名服务器;
-o: <输出文件>:指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存
-p: <通信端口>:设置本地主机使用的通信端口
-r:指定源端口和目的端口都进行随机的选择
-s: <来源位址>:设置本地主机送出数据包的IP地址
-u:使用UDP传输协议
-v:显示指令执行过程
-w: <超时秒数>:设置等待连线的时间
-z:使用0输入/输出模式,只在扫描通信端口时使用
使用命令cat /etc/shells
可以查看mac系统下拥有的shell,大概有以下几种。
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
本篇关于mac系统下自带的zsh,其他Linux系统的安装zsh命令如下
yum install zsh
apt-get install zsh
使用zsh作为shell的原因主要是看上了他的高亮颜色显示和可以拓展的插件。
mac下的默认shell是bash,需要用chsh -s /bin/zsh
切换成zsh
(思考,写专门为mac的shell脚本的时候,开头也可以改成#!/bin/zsh
了)
Github有个名为ohmyzsh的项目,地址:https://github.com/ohmyzsh/ohmyzsh
一句话安装
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
先下载zsh-autosuggestions
插件
cd ~/.oh-my-zsh/custom/plugins/
git clone https://github.com/zsh-users/zsh-autosuggestions
再编辑~/.zshrc
找到plugins,添加上这个插件的名称即可
plugins=(git
zsh-autosuggestions)
根据官方的演示,使用下面这条命令也可以
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
这样子在输入命令的时候,后面就会有浅色的提示,如果真好猜对了,摁方向键→即可
cd ~/.oh-my-zsh/custom/plugins/
wget http://mimosa-pudica.net/src/incr-0.2.zsh
source incr-0.2.zsh
在命令的下方给出提示
d
会给出跳转的提示,一般是最近访问过的文件夹,直接输入数字即可跳转。如下图所示。
Alias | Command |
---|---|
alias | list all aliases |
.. | cd .. |
… | cd ../.. |
/ | cd / |
~ | cd ~ |
cd +n | switch to directory number n |
- | cd - |
1 | cd - |
2 | cd -2 |
3 | cd -3 |
md | mkdir -p |
rd | rmdir |
d | dirs -v (lists last used directories) |
Alias | Command |
---|---|
g | git |
ga | git add |
gcmsg | git commit -m |
gco | git checkout |
gf | git fetch |
gfo | git fetch origin |
gl | git pull |
glo | git log –oneline –decorate –color |
glog | git log –oneline –decorate –color –graph |
gm | git merge |
gp | git push |
gst | git status |
头文件:
int pthread_create(pthread_t * thread, const pthread_arrt_t* attr,void*(*start_routine)(void *), void* arg);
线程id的类型是thread_t,它只在当前进程中保证是唯一的,在不同的系统中thread_t这个类型有不同的实现,调用pthread_self()可以获得当前线程的id。
进程id的类型时pid_t,每个进程的id在整个系统中是唯一的,调用getpid()可以获得当前进程的id,是一个正整数值。
线程的函数执行到return,线程也就随着结束了
int pthread_cancel(pthread_t thread);
void pthread_exit(void * retval);
void pthread_join(pthread_t thread,void ** retval);
线程有两种状态,分别是
默认线程都是可结合的,如果在线程结束的时候没有被join函数调用,那么这个线程的部分资源(堆栈和线程描述符)就没有被系统回收。如果线程是可分离的,那么在线程结束时资源会被回收。
int pthread_detach(pthread_t tid);
在使用的时候可以在主函数中pthreqd_detach(pid)
或者直接在线程的函数中使用pthread_detach(pthread_self())
因为之前在工作时接触到的就是pbs调度系统,但是一直没有系统的去学习过,只满足于简单的命令提交。转载的原因是因为有一个用旧的安卓搭一个集群的想法,先转着以备用。
转自:http://blog.sciencenet.cn/blog-355217-464900.html
PBS(Portable Batch System)最初由NASA的Ames研究中心开发,主要为了提供一个能满足异构计算网络需要的软件包,用于灵活的批处理,特别是满足高性能计算的需 要,如集群系统、超级计算机和大规模并行系统。PBS的主要特点有:代码开放,免费获取;支持批处理、交互式作业和串行、多种并行作业,如MPI、 PVM、HPF、MPL;PBS是功能最为齐全, 历史最悠久, 支持最广泛的本地集群调度器之一. PBS的目前包括openPBS, PBS Pro和Torque三个主要分支. 其中OpenPBS是最早的PBS系统, 目前已经没有太多后续开发, PBS pro是PBS的商业版本, 功能最为丰富. Torque是Clustering公司接过了OpenPBS, 并给与后续支持的一个开源版本.
PBS的应用不同于一般的直接运行: mpirun –np number ./executable_file
直接运行上句,则只能在单个节点上进行并行计算。如果要在多个节点上并行执行则要写machinefile或p4pgfile,两种文件的具体写法参考张林波等《并行计算导论》。运行命令分别为:
mpirun –machinefile filename
mpirun –p4pg filename
应用PBS提交任务则会形成任务队列,依次执行,有效分配资源,避免资源竞争。否则CPU时间片会轮流分配给各个人的任务,从而影响所有人的正常作业。
torque PBS 提供对批处理作业和分散的计算节点(Compute nodes)的控制。
在集群的所有节点上指定一个cluster name作为property。这可以用qmgr命令做到。比如:
qmgr -c "set node node properties=cluster-name"
echo "sleep 30" | qsub -l nodes=3
tar -zxvf torque-2.3.0.tar.gz
./configure --with-default-server=master`
make
make install
[root@master torque-2.3.0]# ./torque-package-clients-linux-x86_64.sh -install
[root@master torque-2.3.0]# ./torque-package-mom-linux-x86_64.sh -install
4)编辑/var/spool/torque/server_priv/nodes (需要自己建立)加入如下内容
master np=4
node01 np=4
...
...
node09 np=4
5)启动pbs_server,pbs_sched,pbs_mom,并把其写到/etc/rc.local里使其能开机自启动。
6)创建队列
[root@master ~]# qmgr
create queue students
set queue students queue_type = Execution
set queue students Priority = 40
set queue students resources_max.cput = 96:00:00
set queue students resources_min.cput = 00:00:01
set queue students resources_default.cput = 96:00:00
set queue students enabled = True
set queue students started = True
[root@node0x torque-2.3.0]# ./torque-package-clients-linux-x86_64.sh --install
[root@node0x torque-2.3.0]# ./torque-package-mom-linux-x86_64.sh --install
然后启动pbs_mom ,把pbs_mom写入/etc/rc.local
useradd test
passwd test
输入test密码
到/var/yp下make
一下
su test
ssh-keygen -t dsa
cd .ssh
cat id_pub.dsa >> authorized_keys
chmod 600 authorized_keys
编写作业脚本,见下文
mpdboot -n 10 -f mfa
mfa内容:
master:4
node01:4
...
...
node09:4
qsub pbsjob
[test1@master pbstest]$ qsub pbsjob
48.master 作业提交后会有一个作业号
qstat
[test1@master pbstest]$ qstat
qdel
作业号
[test1@master pbstest]$ qdel 48
1) 在主节点上打开PBS服务
/etc/init.d/pbs_server start
2) 在主节点和其他节点打开PBS客户端。主节点虽是服务端,但也可参加计算,因而要打开客服。依次执行如下:
/etc/init.d/pbs_mom start
3) 在所有节点上打开调度器
/etc/init.d/maui.d start
对于这些PBS的功能开启有几个相同的参量:
status 查看状态
restart 重启
stop 终止
start 开启
4) 接下来是检查是否可以提交作业
pbsnodes –a
返回free即表示可以提交作业。
5) 写脚本vim pbs_ fdtd_TE_xyPML_MPI_OpenMP
#!/bin/bash
#PBS -l nodes=5:ppn=4 规定使用的节点数nodes以及每个节点能跑多少核ppn
#PBS –N taskname 任取一作业任务名taskname
cd $PBS_O_WORKDIR 到工作目录下(此为PBS提供的环境变量)
mpirun -np 20 ./fdtd_TE_xyPML_MPI_OpenMP
执行mpirun一句可以用-machinefile或-p4pg 命令参量制定
6) 提交
qsub pbs_ fdtd_TE_xyPML_MPI_OpenMP
7) 可用qstat
查看作业任务,具体参量参看下文。流程终结!
PBS是Protable Batch System的缩写,是一个任务管理系统。当多个用户使用同一个计算资源时,每个用户用PBS脚本提交自己的任务,由PBS对这些任务进行管理和资源的分配。下面是一个简单的PBS脚本:
#!/bin/bash
#PBS -l nodes=20
#PBS -N snaphu
#PBS -j oe
#PBS -l walltime=24:00:00
#PBS -l cput=1:00:00
#PBS -q dque
cd $PBS_O_WORKDIR
cat PBSNODEFILEPBS_NODEFILE> NODEFILE
mpirun -np ./mpitest
将这个脚本保存成submit然后qsub submit就将这个mpitest的任务提交给了系统。脚本中#PBS为脚本选项,用于设置一些参数。
PBS -l表示资源列表,用于设定特定任务所需的一些参数。这里的nodes表示并行环境下可以使用的节点数,而walltime表示任务最大时限,而cput 表示cpu时间的最大时限,运行时间和cpu使用时间超过对应的时限,任务就会以超时退出。这三个参数不是PBS脚本参数,而是并行环境所需的参数。
PBS -N表示任务名称。
PBS -j表示系统输出,如果是oe,则标准错误输出(stderr)和标准输出(stdout)合并为stdout,如果是eo,则合并为stderr,如果没有设定或设定为n,则stderr和stdout分开。
PBS -q表示当前任务选用的队列。在并行环境下,一个系统中往往有多个队列,任务提交后,将在所选的队列中排除等候。系统中有哪些队列可以用qstat -q
查看。
PBS脚本文件由脚本选项和运行脚本两部分组成。
1) PBS作业脚本选项(若无-C选项,则每项前面加‘#PBS’)
2) 运行脚本同LINUX下一般的运行脚本文件格式如下:
mpirun –np 进程数 ./可执行程序名
PBS提供的4条命令用于作业管理
qsub [-a date_time]
[-e path] [-I] [-l resource_list]
[-M user_list] [-N name]
[-S path_list] [-u user_list] [-W additional_attributes]
例: qsub aaa.pbs
提交某作业,系统将产生一个作业号
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 若操作符为作业号,则列出其状态。
若操作符为destination id,则列出运行在其上的属于user_list中用户的作业状态。
例:qstat -f 211
查询作业号为211的作业的具体信息。
qdel [-W 间隔时间] 作业号
例:qdel -W 15 211
15秒后删除作业号为211的作业
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"
if a>b:
print(a)
else:
print(b)
print(a if a>b else b)
原理,利用二维数组的0,1作为索引
print([b,a][a>b])
主要利用逻辑运算符的返回值进行操作,还挺绕的
and语句
# 从前往后找,找假的
# 前真返后,前假返前
a and b
or语句
# 找真的
# 前真返前,前假返后
a or b
所以可以这样写
print(a>b and a or b)