适合初学者的 17 个最佳 Linux 网络和故障排除命令

好文翻译 2024年7月17日

网络配置、诊断和一般Linux 故障排除是 系统管理的重要组成部分。即使对于使用 Linux 系统的开发人员来说,了解Linux 网络命令也是一个优势。

具体来说,如果您想成为 DevOps 工程师或成为 SRE 的一员,则必须了解所有 Linux 排障命令,因为它们将成为您日常活动的一部分。这篇文章将介绍 Linux 系统中原生可用的重要 Linux 网络排障命令。

1. hostname

Hostname命令用于查看服务器的主机名和设置主机名。

hostname

您可以使用 hostname 命令为服务器设置新的主机名。例如,

hostnamectl set-hostname aliyun01-2c2g40g3m

2. host

Host 命令用于反向查找 IP 或 DNS 名称。例如,如果您想查找附加了 IP 的 DNS,您可以使用主机命令,如下所示:

host 8.8.8.8

您也可以执行相反的操作来查找与域名关联的 IP 地址。例如,

host flashcat.cloud

3. ping

ping 网络实用程序用于检查远程服务器是否可达。它主要用于检查连接性和排除网络故障。它提供以下详细信息。

  • 发送和接收的字节数
  • 发送、接收和丢失的数据包
  • 大约往返时间(以毫秒为单位)

Ping 命令具有以下语法。

ping <IP 或 DNS>

例如,

ping flashcat.cloud
ping 8.8.8.8

如果您想在不使用 ctrl+c 的情况下限制 ping 输出,则可以使用带有数字的 -c 参数,用于控制发多少个探测包,如下所示。

ping -c 10 flashcat.cloud

4. curl

Curl 实用程序主要用于从服务器传输数据或向服务器传输数据。但是,您可以使用它来排除网络故障。

对于网络故障排除,curl 支持 DICT FILE FTP FTPS GOPHER HTTP HTTPS IMAP IMAPS LDAP LDAPS MQTT POP3 POP3S RTMP RTMPS RTSP SCP SFTP SMB SMBS SMTP SMTPS TELNET TFTP 等协议。

例如,curl 可以使用 telnet 检查端口 22 上的连接:

curl -v telnet://192.168.33.10:22

您可以使用 curl 检查 FTP 连接。

curl ftp://ftptest.net

您还可以对 Web 服务器连接进行故障排除。

curl https://flashcat.cloud

5. wget

wget命令主要用于获取网页,也可以使用它来解决网络问题。例如,您可以使用 wget 对代理服务器连接进行故障排除。

wget -e use_proxy=yes http_proxy=<proxy_host:port> http://externalsite.com

您可以通过获取文件来检查网站是否已启动。

wget flashcat.cloud

6. ip (ifconfig)

ip 命令用于显示和操作路由和网络接口。ip 命令是 的 ifconfig 较新版本。ifconfig 适用于所有系统,但最好使用 ip 命令而不是 ifconfig。下面让我们看一下命令的几个 ip 示例。

显示网络设备和配置:

ip addr

您可以将此命令与管道和 grep 结合使用以获得更精细的输出,例如 eth0 接口的 IP 地址。当您使用需要动态获取 IP 的自动化工具时,它非常有用。

以下命令获取eth0网络接口的 IP 地址:

ip a | grep eth0 | grep "inet"| awk -F" " '{print $2}'

获取特定接口的详细信息:

ip show eth0

您可以列出路由表:

ip route
ip route list

7. arp

ARP(地址解析协议)显示系统与之交互的本地网络IP地址和MAC地址的缓存表。

[root@aliyun01-2c2g40g3m ~]# arp
Address          HWtype  HWaddress           Flags Mask     Iface
192.168.16.4     ether   02:42:c0:a8:10:04   C              br-09ee572b74a4
_gateway         ether   ee:ff:ff:ff:ff:ff   C              eth0
192.168.16.2     ether   02:42:c0:a8:10:02   C              br-09ee572b74a4
192.168.16.6     ether   02:42:c0:a8:10:06   C              br-09ee572b74a4

8. ss

ss命令是netstat的替代命令. 您仍然可以在所有系统上使用netstat命令。使用ss命令,可以获得比netstat命令更多的信息。而且ss 命令速度很快,因为它从内核用户空间获取所有信息。现在让我们看一下ss命令的一些用法。

[root@aliyun01-2c2g40g3m ~]# ss | head -n 5
Netid State    Recv-Q Send-Q                   Local Address:Port         Peer Address:Port     Process
u_str ESTAB    0      0          /run/dbus/system_bus_socket 44778775                * 44778774
u_str ESTAB    0      0          /run/systemd/journal/stdout 19742                   * 19703
u_str ESTAB    0      0                                    * 35688                   * 35689
u_str ESTAB    0      0          /run/dbus/system_bus_socket 24539                   * 24538

因为内容输出的比较多,这里只取了前面 5 行,如果要查看所有内容,可以这样写:ss | less

过滤掉 TCP、UDP 和 Unix 套接字

如果要过滤掉 TCP、UDP 或 UNIX 套接字详细信息,请在“ss”命令中使用“-t”、“-u”和“-x”标志。它将显示到特定端口的所有已建立的连接。如果您想使用“a”和特定标志来列出已连接和正在侦听的端口,如下所示。

SS -ta
SS -ua
SS -xa

列出所有监听端口

要列出所有侦听端口,请在 ss 命令中使用“-l”标志。要列出特定的 TCP、UDP 或 UNIX 套接字,请使用“-t”、“-u”和“-x”标志以及“-l”,如下所示。

[root@aliyun01-2c2g40g3m ~]# ss -lt
State      Recv-Q      Send-Q      Local Address:Port       Peer Address:Port    Process
LISTEN     0           4096              0.0.0.0:51285           0.0.0.0:*
LISTEN     0           128               0.0.0.0:ssh             0.0.0.0:*
LISTEN     0           5                 0.0.0.0:61208           0.0.0.0:*
LISTEN     0           4096              0.0.0.0:20090           0.0.0.0:*

列出所有已建立的

要列出所有已建立的连接:

ss -t -r state established

要列出所有处于侦听状态的:

ss -t -r state listening

9. traceroute

traceroute是一个网络故障排除实用程序。使用跟踪路由,您可以找到特定数据包到达目的地所需的跳数。您基本上可以跟踪数据包从服务器到远程主机的路径。

例如,

traceroute google.com

输出:

traceroute to google.com (173.194.33.163), 30 hops max, 60 byte packets
 1  ec2-50-112-0-84.us-west-2.compute.amazonaws.com (50.112.0.84)  1.974 ms  1.895 ms  1.899 ms
 2  100.64.1.247 (100.64.1.247)  1.414 ms 100.64.1.137 (100.64.1.137)  1.127 ms 100.64.1.97 (100.64.1.97)  1.313 ms
 3  100.64.0.198 (100.64.0.198)  1.443 ms 100.64.0.62 (100.64.0.62)  2.160 ms 100.64.0.60 (100.64.0.60)  2.116 ms
10  66.249.94.214 (66.249.94.214)  6.313 ms  7.104 ms 209.85.249.34 (209.85.249.34)  5.986 ms
11  209.85.244.65 (209.85.244.65)  6.157 ms  6.341 ms  6.574 m.
.
12  sea09s18-in-f3.1e100.net (173.194.33.163)  6.302 ms  6.517 ms  6.071 ms

上面的输出显示了从 devopscube AWS ec2 服务器到达 google.com 的跃点计数 (12)。当您想要解决与网络数据包未到达主机相关的问题时,此实用程序会派上用场。

10. mtr

该mtr实用程序是一个网络诊断工具,用于解决网络瓶颈问题。它结合了ping两者的功能traceroute 例如,以下命令traceroute实时显示输出。

mtr google.com

输出如下:

mtr report

您可以使用 –report 标志生成报告。当您运行 mtr 报告时,它会向目标发送 10 个数据包并创建报告。

mtr -n --report google.com

11. dig

如果您有任何与 DNS 查找相关的任务,您可以使用“ dig”命令来查询 DNS 名称服务器。

以下命令返回 twitter.com 的所有 DNS 记录和 TTL 信息:

dig twiter.com ANY

通过 +short 可以简化输出:

dig google.com ANY +short

使用 dig 获取特定 DNS 记录

例如,如果您想获取A record特定域名的 ,您可以使用 dig 命令:

dig www.google.com A +short

同样,您可以使用以下命令分别获取其他记录信息。

dig google.com CNAME +short
dig google.com MX +short
dig google.com TXT +short
dig google.com NS +short

使用 dig 进行反向 DNS 查找

您可以使用以下命令通过 dig 执行反向 DNS 查找。替换8.8.8.8为需要的IP

dig -x 8.8.8.8

12. nslookup

Nslookup (名称服务器查找)实用程序用于检查 DNS 条目。它类似于 dig 命令。

要检查域的 DNS 记录,可以使用以下命令。

nslookup google.com

您还可以使用 IP 地址进行反向查找。

nslookup 8.8.8.8

要获取某个域名的所有 DNS 记录,可以使用以下命令。

nslookup -type=any google.com

同样,您可以查询诸如 mx、soa 的记录。

13. nc( netcat )

(netcat)命令nc被称为网络命令的瑞士军刀。使用nc,您可以检查特定端口上运行的服务的连接性。例如,要检查ssh端口是否打开,可以使用以下命令。

nc -v -n 192.168.33.10 22

netcat还可用于通过 TCP/UDP 进行数据传输和端口扫描。

不建议在云环境中进行端口扫描。您需要请求云提供商在您的环境中执行端口扫描操作。

14. telnet

telnet命令用于排除端口上的TCP连接故障。要使用 telnet 检查端口连接,请使用以下命令。

telnet 10.4.5.5 22

15. route

“route”命令用于获取系统路由表的详细信息并对其进行操作。让我们看几个示例。

列出所有路由

执行不带任何参数的“route”命令,列出系统或服务器中所有的路由。

[root@aliyun01-2c2g40g3m ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.28.192.0    0.0.0.0         255.255.240.0   U     100    0        0 eth0
192.168.16.0    0.0.0.0         255.255.240.0   U     0      0        0 br-09ee572b74a4
[root@aliyun01-2c2g40g3m ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.28.207.253  0.0.0.0         UG    100    0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.28.192.0    0.0.0.0         255.255.240.0   U     100    0        0 eth0
192.168.16.0    0.0.0.0         255.255.240.0   U     0      0        0 br-09ee572b74a4

如上,如果您想获得不带任何主机名的数字形式的完整输出,可以在路由命令中使用“-n”标志。

16. tcpdump

该 tcpdump 命令主要用于对网络流量进行故障排除。

注意:分析命令的 tcpdump 输出需要一些学习,因此解释它超出了本文的范围。

tcpdump 命令适用于系统的网络接口。因此,您需要使用管理权限来执行该命令。

列出所有网络接口

sudo  tcpdump --list-interfaces

在特定接口上捕获数据包

要获取特定接口上的数据包转储,您可以使用以下命令。

注意:按下 ctrl + c 可停止捕获数据包。

sudo tcpdump -i eth0

要限制数据包捕获,您可以使用带有数字的标志 -c 。比如,要捕获 10 个数据包,可以使用以下命令。

sudo tcpdump -i eth0 -c 10

捕获所有接口上的数据包

要捕获所有接口上的数据包,请使用如下所示 any 的标志。

sudo tcpdump -i any

17. lsof

lsof 是用于日常 Linux 故障排除的命令。此命令对于使用 Linux 系统的任何用户都同样重要。要列出所有打开的文件,请执行该 lsof 命令。

lsof

开发人员和DevOps工程师面临的常见错误之一是“绑定失败错误:地址已在使用中”。您可以使用以下命令查找与端口关联的进程 ID。您可以终止进程以释放端口。

lsof -i :8080

本文翻译自:https://devopscube.com/list-linux-networking-troubleshooting-and-commands-beginners/

标签: 网络排障
开源版
Flashcat
Flashduty