查询连接数
netstat常用参数
-a (all)显示所有选项
-t (tcp)仅显示tcp协议 (一般都是tcp连接)
-n 拒绝显示别名,能显示数字的全部转化成数字。(便于匹配ip地址和端口号)
-p 显示进程号egrep = grep -E 可以使用基本的正则表达外, 还可以用扩展表达式. 注意区别.
扩展表达式:
加号+ 匹配一个或者多个先前的字符, 至少一个先前字符.
? 匹配0个或者多个先前字符.
a|b|c 匹配a或b或c
() 字符组, 如: love(able|ers) 匹配loveable或lovers.
(..)(..)\1\2 模板匹配. \1代表前面第一个模板, \2代第二个括弧里面的模板.
x{m,n} =x{m,n} x的字符数量在m到n个之间.
3
- 三次握手
- client发送syn: closed -> syn-send
- server 收到syn后为这次连接分配资源,然后回复syn+ack: listen -> syn-rcvd (为什么不能在这一步直接established,因为这个建连请求很可能过了很长一段时间才过来,这时候client已经死了,这个连接就变成一个单向连接,凭空占用了server的一个连接资源;为了确认client还活着,就得等待client的ack)
- client收到后回复Ack: syn-send -> established
- server收到ack后: syn-rcvd -> established
- 四次挥手
- client发送完最后一个请求后,发送fin,意思是我client没有数据要发给你了,established -> fin-wait1
- server 收到fin后,如果还有应答没有完成不必急着关闭连接,发送ack,告诉client,你的请求收到了但是我还有应答没发完,请你等我的消息(这里比建立连接场景多了一次挥手,因为server有可能没法马上回复fin) established -> close-wait
- client收到ack后,继续等待server的消息:fin-wait1 -> fin-wait2(这一步一般很快,因为ack正常情况是立即回复的)
- server确定应答都处理完了,发送fin告诉client,我已经发完数据准备关闭连接了,close-wait -> last-ack
- client收到fin后回复ack ,担心这个ack没有送到server那里,就等着server,最多等2分钟: fin-wait2 -> time-wait,等待超时后 closed
6 server如果长时间没有收到ack可以重发给client,有可能是因为网络原因client的ack没有收到,这时候client还是time-wait状态能够处理server的ack重发,如果收到了ack就知道可以关闭连接了,last-ack -> close
netstat -anpt | grep 机器地址:端口号 | egrep "TIME_WAIT|CLOSE_WAIT|ESTABLISHED"
打包备份目录,排除指定子目录
tar -zcvf /opt/back/xxx.tar.gz -exclude /opt/web/useless/ /opt/web
查询线程数
ps 选项:
-e 显示所有进程(默认显示当前用户进程)
-L 显示线程
-f 显示详细信息,如果是线程会显示线程号LWP,和线程数量NLWP
ps -eLf | wc -l
查找大日志文件
find 路径 -name '文件名正则' -size +1000M -exec du -h {} ;
显示文件内容,过滤注释
grep -v "注释符号" 文件名
磁盘IO异常排查
iotop -o 查看当前正在写操作的所有进程信息