概述
Linux运维中常用的网络命令
命令
ping
ping命令最简单也最常用,Windows和Linux上都有该命令可用,功能基本一致,只不过默认的一些配置不同。ping命令主要用于探测某个地址的连通性,同时支持IPv4和IPv6的地址探测。
在windows下使用ping命令,默认发送4次发包后停止,但是在Linux上使用ping命令时,必须加上 -c
选项指定发包个数后终止进程。
以下是ping命令的一些常用选项:
-4
: 探测IPv4的地址,默认值-6
: 探测IPv6的地址-c
: 发送指定数目的icmp包后停止-i interval
: 指定每个包发送的间隔时间-W timeout
: 指定等待响应的时间,单位为s
以下是关于ping命令的一些使用实例
[root@ks2p-hadoop01 ~]# time ping ks2p-hadoop04 -c4
PING ks2p-hadoop04 (10.57.12.20) 56(84) bytes of data.
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=1 ttl=64 time=0.112 ms
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=2 ttl=64 time=0.113 ms
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=3 ttl=64 time=0.147 ms
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=4 ttl=64 time=0.110 ms
--- ks2p-hadoop04 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.110/0.120/0.147/0.018 ms
real 0m3.008s
user 0m0.004s
sys 0m0.002s
[root@ks2p-hadoop01 ~]#
# 可以看到,ping命令默认发包间隔时间为1秒,当通过 `-i` 选择指定发包间隔后,对于4个包的总时间
# 就为(4-1)*3=9s,加上一些其它的耗时,正好9s多
[root@ks2p-hadoop01 ~]# time ping ks2p-hadoop04 -c4 -i 3
PING ks2p-hadoop04 (10.57.12.20) 56(84) bytes of data.
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=1 ttl=64 time=0.110 ms
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=2 ttl=64 time=0.187 ms
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=3 ttl=64 time=0.120 ms
64 bytes from ks2p-hadoop04 (10.57.12.20): icmp_seq=4 ttl=64 time=0.121 ms
--- ks2p-hadoop04 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 8999ms
rtt min/avg/max/mdev = 0.110/0.134/0.187/0.032 ms
real 0m9.004s
user 0m0.000s
sys 0m0.005s
[root@ks2p-hadoop01 ~]#
netstat
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般会用该命令查看系统是否正在监听某些端口,据此判断对应服务是否正常运行。
以下是该命令的一些常用选项:
-a
: 显示所有监听和非监听的套接字-l
: 只显示监听套接字-p
: 显示对应套接字所属进程的PID和名称-n
: 显示数字形式的地址-e
: 显示一些额外信息-t|--tcp
: 显示tcp连接的套接字信息-u|--udp
: 显示udp连接的套接字信息
通常netstat命令会与grep命令配合使用,找出某个监听的端口,示例如下:
[root@ks2p-hadoop01 ~]# netstat -alntp | grep redis
tcp 0 0 10.57.12.18:26379 0.0.0.0:* LISTEN 61840/redis-server
tcp 0 0 10.57.12.18:16379 0.0.0.0:* LISTEN 61840/redis-server
tcp 0 0 10.57.12.18:26379 10.57.12.22:7422 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:9952 10.57.12.21:26379 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:16191 10.57.12.20:26379 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:7680 10.57.12.19:26379 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:26379 10.57.12.20:26529 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:26379 10.57.12.23:31119 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:26379 10.57.12.21:31010 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:26379 10.57.12.19:18758 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:17910 10.57.12.23:26379 ESTABLISHED 61840/redis-server
tcp 0 0 10.57.12.18:15097 10.57.12.22:26379 ESTABLISHED 61840/redis-server
[root@ks2p-hadoop01 ~]#
[root@ks2p-hadoop01 ~]# netstat -alntp | grep 222
tcp 0 0 10.57.12.18:8031 10.57.12.20:57222 ESTABLISHED 58749/java
tcp6 0 0 10.57.12.18:10050 10.58.1.15:51222 TIME_WAIT -
nc
nc工具号称网络界的 瑞士军刀
。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具。
它的基本功能如下:
- 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
- 端口的扫描,nc可以作为client发起TCP或UDP连接
- 机器之间传输文件
- 机器之间网络测速
它的常用选项如下:
-l,--listen
: 监听某个端口并等待连接,而不是连接远端节点-v
: 显示详情-u
: 指定使用udp协议-t
: 指定使用tcp协议,默认值-w
: 连接超时时间-z
: 在作为客户端连接时,不发送任何数据
扫描端口示例:
[root@ks2p-hadoop01 ~]# nc -v -z -w2 ks2p-hadoop04 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.57.12.20:22.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
[root@ks2p-hadoop01 ~]# nc -v -z -w2 ks2p-hadoop04 21
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.
[root@ks2p-hadoop01 ~]#
作为服务实例:
# nc -l 5000 会卡住
[root@ks2p-hadoop01 ~]# nc -l 5000
接着打开另一个终端,使用netstat命令查看5000的连接情况:
[root@ks2p-hadoop01 ~]# netstat -anltp | grep 5000
tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 75469/nc
tcp6 0 0 :::5000 :::* LISTEN 75469/nc
如果想启动一个监听udp连接的服务,使用 -u
选项即可:
nc -l -u 5000
# 打开另一个终端,使用netstat命令查看,同上
netstat -anltp | grep 5000
在新的终端可以使用nc工具作为客户连接,这样还可以传文字到nc启动的服务上:
# 客户端一次输入hello和world字符串
[root@ks2p-hadoop01 ~]# nc 10.57.12.18 5000 -v
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.57.12.18:5000.
hello
world
# 服务端收到了hello和world字符串并打印在控制台
[root@ks2p-hadoop01 ~]# nc -l 5000
hello
world
使用nc完成文件的传输:
后续补充
lsof
一般运维上会使用 lsof
命令获取监听某个端口的进程,用法如下:
[root@ks2p-hadoop01 ~]# lsof -i :22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 23797 root 3u IPv4 100580 0t0 TCP *:ssh (LISTEN)
sshd 23797 root 4u IPv6 100582 0t0 TCP *:ssh (LISTEN)
sshd 200115 root 3u IPv4 14151447 0t0 TCP ks2p-hadoop01:ssh->172.24.4.90:61300 (ESTABLISHED)
ssh 200181 root 3u IPv4 14146690 0t0 TCP ks2p-hadoop01:45050->10.32.44.20:ssh (ESTABLISHED)
sshd 200324 root 3u IPv4 14153933 0t0 TCP ks2p-hadoop01:ssh->10.35.232.134:50132 (ESTABLISHED)
上述命令检查占用22端口的进程信息,可以清楚地看到ssh 服务占用了系统的22端口。
lsof命令主要是显示打开的文件情况,正如官方文档所述:
lsof -list open files
常用选项有:
-i
: 列出符合条件的进程-c
: 列出指定进程所打开的文件-g
: 列出PGID号-p
: 列出指定进程号所打开的文件
示例如下:
[root@ks2p-hadoop01 ~]# lsof -c grafana-server
[root@ks2p-hadoop01 ~]#
[root@ks2p-hadoop01 ~]# lsof -g -c grafana-server
[root@ks2p-hadoop01 ~]#
tcpdump
此工具非常强大,也非常有用,一般做网络排查时会用到,它就是tcpdump
命令,用来进行网络抓包。
以下是该命令最常用的选项:
-e
: 输出的每行中都将包括数据链路层头部信息-c
: 指定收包数-i interface
: 指定工具监听的网卡,后面直接跟网卡名-n
: 对地址以数字方式显式,否则显式为主机名-nn
: 除了-n选项的作用外,还会将协议、端口等显示为数值-v|-vv|-vvv
: 显示更多详情-w
: 将抓包数据输出到文件中而不是标准输出
以下是关于 tcpdump
命令的一些示例:
# 截获所有从ks2p-hadoop01发向ks2p-hadoop04节点且经过网卡ens33的包
[root@ks2p-hadoop01 ~]# tcpdump -i ens33 src host ks2p-hadoop01 and dst ks2p-hadoop04
tcpdump: ens33: No such device exists
(SIOCGIFHWADDR: No such device)
[root@ks2p-hadoop01 ~]#
[root@ks2p-hadoop01 ~]# tcpdump -i em1 src host ks2p-hadoop01 and dst ks2p-hadoop04
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on em1, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
[root@ks2p-hadoop01 ~]#
结束
后续会如有遗漏,会再补充。