服务器上起了一堆服务,刚来公司没多久还搞不清谁和谁交互,设计文档/架构文档,什么?没有!服务都是通过socket通讯的,为了可以分别部署在多台物理服务器上。于是乎想基于netstat命令统计一下交互关系,肉眼看太费劲,用awk搞了半天最后放弃了。
最后发现一个join命令,很好使,记录一下。
netstat -tp | awk '{ print $4$5,$7 }' |sort -k 1 > netstat1.txt
netstat -tp | awk '{ print $5$4,$7 }' |sort -k 1 > netstat2.txt
join -1 1 -2 1 netstat1.txt netstat2.txt | \
cut -d" " -f2,3 | sed 's#[0-9/\.]##g' |sort -u
前两行命令把第4,5,7列输出到netstat1.txt和netstat2.txt里,不同的是Local Address(4列)和Foreign Address(5列),netstat1.txt和netstat2.txt里调换下位置,而且4,5列合并在一起了。如果netstat1.txt和netstat2.txt第一列相同说明两个程序在交互。
接下来解释join命令大显身手的时候了,像sql语句里的join一样, 命令join把文件结合在一起根据: -1 1指的是第一个文件的第一列,-2 1指的是第二个文件 的第一列。cut -d” ” -f2,3只取第2,3列,sed ‘s#[0-9/.]##g’删除pid和. ,sort -u排序去重。
这样就可以一目了然smserver在和谁交互、imlprocess在和谁交互。