strace常用来跟踪进程执行时的系统调用和所接收的信号。你不仅可以调试一个新开始的程序,也可以调试一个已经在运行的程序(把strace绑定到一个已有的PID上 面)。

通用语法:

strace -o output.txt -T -tt -e trace=all -p 28979

上面的含义是 跟踪28979进程的所有系统调用(-e trace=all),并统计系统调用的花费时间,以及开始时间(并以可视化的时分秒格式显示),最后将记录结果存在output.txt文件里面。


root@ubuntu:/usr# strace cat /dev/ 
execve(, [, ], []) = 
brk()                                  = 
access(, F_OK)      = - ENOENT (No such file or directory)
mmap(NULL, , PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -, ) = 
access(, R_OK)      = - ENOENT (No such file or directory)
...
brk() = 
brk() = 
fstat(, {st_mode=S_IFCHR|, st_rdev=makedev(, ), ...}) = 
open(, O_RDONLY) = 
fstat(, {st_mode=S_IFCHR|, st_rdev=makedev(, ), ...}) = 
read(, , ) = 
close() = 
close() = 
close() = 
exit_group() = ?

每一行都是一条系统调用,等号左边是系统调用的函数名及其参数,右边是该调用的返回值。
strace 显示这些调用的参数并返回符号形式的值。strace 从内核接收信息,而且不需要以任何特殊的方式来构建内核。


starce 的另一个用处是解决和动态库相关的问题。当对一个可执行文件运行ldd时,它会告诉你程序使用的动态库和找到动态库的位置。但是,ldd并不能把所有程序依赖的动态库列出来。


strace跟踪程序使用的底层系统调用,可输出系统调用被执行的时间点以及各个调用耗时;pstack工具对指定PID的进程输出函数调用栈

strace + pstack + ldd


ssh:

/etc/ssh/sshd_config

PermitRootLogin    no;

MaxStartups 10; #最大的未登录的联机画面数

service sshd restart

ssh user@hostname 'command_list'    #ssh执行远程命令,command_list=ls;hostname;uptime;env

ssh user@hostname < script_name    #ssh登录后执行本地的script_name

ssh user@hostname < script_name > local.out   #ssh登录后执行本地的script_name

ssh user@hostname 'bash -s' < script_name  para1 para 2#script_name有参数的话,要有-s选项,表示从standard input读入

ssh -t user@hostname 'ssh hostname_2'   #ssh作为跳板隧道,-t表示伪终端,因为ssh hostname_2涉及到登录,需要有终端输入


cat batch.sh

#!/bin/bash


#############################################################

###Created by Danny Zhu

###usage:

###./batch.sh ipList.txt js.sh

###ipList.txt contains the ip list you need to connect to

###js.txt is a script file which will run on the target ip

###this bash script can only be performed one by one

###this bash script can not be  peformed on ip in parallel

############################################################


ip_list=$1

js_file=$2


for ip in `cat $ip_list`

do


echo $ip

echo ""

sudo ssh -o StrictHostKeyChecking=no $ip 'bash -s' < $js_file 


done


cat ipList.txt


10.102.142.57

10.102.142.58

10.102.142.59

10.102.142.60

10.102.142.61

10.102.142.45

10.102.142.44

10.102.142.43

10.102.142.42

10.102.142.41

10.102.142.40

10.102.142.39



cat js.sh

vgcreate datavg /dev/vdb


lvcreate -L 50G -n omsarchlv datavg

mkfs.ext3 /dev/datavg/omsarchlv

mkdir -p /omsarch

echo "/dev/datavg/omsarchlv /omsarch ext3 defaults 0 0" >> /etc/fstab


lvcreate -L 50G -n omsloglv datavg

mkfs.ext3 /dev/datavg/omsloglv

mkdir -p /omslog

echo "/dev/datavg/omsloglv /omslog ext3 defaults 0 0" >> /etc/fstab


lvcreate -L 1024G -n omsdatalv datavg

mkfs.ext3 /dev/datavg/omsdatalv

mkdir -p /omsdata

echo "/dev/datavg/omsdatalv /omsdata ext3 defaults 0 0" >> /etc/fstab


mount -a

df -lh