运维常用linux命令

查询连接数

  1. netstat常用参数
    -a (all)显示所有选项
    -t (tcp)仅显示tcp协议 (一般都是tcp连接)
    -n 拒绝显示别名,能显示数字的全部转化成数字。(便于匹配ip地址和端口号)
    -p 显示进程号

  2. 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

  • 三次握手
  1. client发送syn: closed -> syn-send
  2. server 收到syn后为这次连接分配资源,然后回复syn+ack: listen -> syn-rcvd (为什么不能在这一步直接established,因为这个建连请求很可能过了很长一段时间才过来,这时候client已经死了,这个连接就变成一个单向连接,凭空占用了server的一个连接资源;为了确认client还活着,就得等待client的ack)
  3. client收到后回复Ack: syn-send -> established
  4. server收到ack后: syn-rcvd -> established
  • 四次挥手
  1. client发送完最后一个请求后,发送fin,意思是我client没有数据要发给你了,established -> fin-wait1
  2. server 收到fin后,如果还有应答没有完成不必急着关闭连接,发送ack,告诉client,你的请求收到了但是我还有应答没发完,请你等我的消息(这里比建立连接场景多了一次挥手,因为server有可能没法马上回复fin) established -> close-wait
  3. client收到ack后,继续等待server的消息:fin-wait1 -> fin-wait2(这一步一般很快,因为ack正常情况是立即回复的)
  4. server确定应答都处理完了,发送fin告诉client,我已经发完数据准备关闭连接了,close-wait -> last-ack
  5. 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 查看当前正在写操作的所有进程信息

你可能感兴趣的:(运维常用linux命令)