运维速查
根据进程名字查询pid并通过top显示
$ sudo pidof bioset | tr " " ',' | xargs top -bp
-b : Batch mode operation
Starts top in <A1><AF>Batch mode<A1><AF>, which could be useful for sending output from top to other programs or to a file. In this mode, top will not accept input and runs until the iterations limit you<A1><AF>ve set with the <A1><AF>-n<A1><AF> command-line option or until killed.
$ sudo nmcli general hostname hollyshit
$ sudo hostnamectl set-hostname hollyshit
配置主机名
$ sudo nmcli general hostname sweeteriri
$ sudo hostnamectl set-hostname sweeteriri
配置 IP 地址
IPADDR=$IP
DNS=$DNS
GATEWAY=$GATEWAY
NETMASK=255.255.255.0
ZONE=public
ONBOOT=yes
$ sudo systemctl restart network
查看当前最大并发数的配置
$ ulimit -n
配置主机名
修改 /etc/security/limits.conf
* soft nofile 10240
* hard nofile 10240
neo hard nofile 10240
第一列可以指定用户或组,也可使用 *
和 %
通配符。指定组时,组名前面加 @
,如 @admin
。修改后需 重启 系统才能生效。
*
代表作用于所有用户,第三行的 neo
是指定用户名。
hard
限定的值只能由管理员配置,对于用户来说,该值是上限,不可逾越。
soft
所限定的值用户自己可以用 ulimit -S -n 1024
调整,但不可超过 hard 值。
nofile
:Number of Open file descriptors,即文件描述符总数的上限。
添加主机路由
$ route add -host $IP dev etho
添加默认网关
$ route add default gw 192.168.197.1
添加网络路由
$ route add -net 192.168.1.0 netmask 255.255.255.0 dev eth1
$ route add -net 192.168.1.0 netmask 255.255.255.0 gw $IP
SS与NETSTATS
$ ss -a 查看机器的socket连接数
$ ss -l 查看机器的端口情况
$ ss -s 查看机器的网络连接数
$ netstat -n | awk '/^tcp/{a[$NF]++} END{for(i in a){print i,a[i]}}' #查看 http 并发请求数以及 TCP 连接状态
如果只想查看TCP sockets,那么使用-ta选项; 如果只想查看UDP sockets,那么使用-ua选项; 如果只想查看RAW sockets,那么使用-wa选项; 如果只想查看UNIX sockets,那么使用-xa选项。
CLOSED 初始(无连接)状态。 LISTEN 侦听状态,等待远程机器的连接请求。 SYN_SEND 在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。 SYN_RECV 在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。 ESTABLISHED 完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。 FIN_WAIT_1 在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。 FIN_WAIT_2 在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。 TIME_WAIT 在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。 CLOSING 在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。 CLOSE_WAIT 在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。 LAST_ACK 在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。
主动连接端可能的状态有: CLOSED SYN_SEND ESTABLISHED 主动关闭端可能的状态有: FIN_WAIT_1 FIN_WAIT_2 TIME_WAIT 被动连接端可能的状态有: LISTEN SYN_RECV ESTABLISHED 被动关闭端可能的状态有: CLOSE_WAIT LAST_ACK CLOSED
在Linux下,如果连接数比较大,可以使用效率更高的ss来替代netstat
。
查看tomcat的并发数:netstat` `-an|
grep10050|
`awk
`'{count[$6]++} END{for (i in count) print(i,count[i])}'
查看哪个地址对 80 端口的访问次数最多
用 tcpdump
嗅探 80 端口的访问,看谁最高。
$ sudo tcpdump -i venet0 -tnn dst port 80 -c 1000 \
| awk '/^IP/{print $2}' \
| awk -F. '{print $1 "." $2 "." $3 "." $4}' \
| uniq -c \
| sort -rn
使用 tcpdump 监听 “目标主机为 192.168.1.1,目标端口为 tcp/80” 的数据,同时将输出结果保存到 tcpdump.log
$ sudo tcpdump -i ens33 'host 192.168.1.1 and port 80' > tcpdump.log
用 tcpdump 嗅探对本地 80 端口的访问流量,列出访问量最大的 IP 地址
$ sudo tcpdump -i ens33 -tnn dst port 80 -c 1000 \
| awk '/^IP/{print $2}' \
| awk -F. '{print $1 "." $2 "." $3 "." $4}' \
| uniq -c | sort -rn
-i
:指定监听的网卡
-t
:不显示每行的时间戳
-n
:不转换地址,如把 IP 地址转换为主机名,把端口号转换为服务名
-nn
:不转换协议和端口号,不把地址转换为主机名
-c
:count,抓包数量
用脚本 ping 多个 IP 地址
连续 IP 地址
#!/bin/bash
for ip in `seq 1 255`
do
ping -c 1 192.168.1.$ip > /dev/null 2>&1
if [ $? -eq 0]; then
echo 192.168.1.$ip is ONLINE
else
echo 192.168.1.$ip is OFFLINE
fi
done
wait
不连续 IP 地址
将IP地址写入list.txt
#!/bin/bash
cat /path/to/list.txt | while read output
do
ping -c 1 "$output" > /dev/null
if [ $? -eq 0 ]; then
echo "node $output is up"
else
echo "node $output is down"
fi
done
三次握手与四次挥手
所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect()
时。将触发三次握手。
- 第一次握手(SYN=1, seq=x):
客户端发送一个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端口,以及初始序号 X,保存在包头的序列号(Sequence Number)字段里。
发送完毕后,客户端进入 SYN_SEND
状态。
- 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):
服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD
状态。
- 第三次握手(ACK=1,ACKnum=y+1)
客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
发送完毕后,客户端进入 ESTABLISHED
状态,当服务器端接收到这个包时,也进入 ESTABLISHED
状态,TCP 握手结束。
三次握手的过程的示意图如下:
TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close()
操作即可产生挥手操作。
- 第一次挥手(FIN=1,seq=x)
假设客户端想要关闭连接,客户端发送一个 FIN 标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接受数据。
发送完毕后,客户端进入 FIN_WAIT_1
状态。
- 第二次挥手(ACK=1,ACKnum=x+1)
服务器端确认客户端的 FIN 包,发送一个确认包,表明自己接受到了客户端关闭连接的请求,但还没有准备好关闭连接。
发送完毕后,服务器端进入 CLOSE_WAIT
状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2
状态,等待服务器端关闭连接。
- 第三次挥手(FIN=1,seq=y)
服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN 置为1。
发送完毕后,服务器端进入 LAST_ACK
状态,等待来自客户端的最后一个ACK。
- 第四次挥手(ACK=1,ACKnum=y+1)
客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT
状态,等待可能出现的要求重传的 ACK 包。
服务器端接收到这个确认包之后,关闭连接,进入 CLOSED
状态。
客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED
状态。
四次挥手的示意图如下:
评论列表,共 2 条评论