网络配置、诊断和一般 Linux 故障排除是系统管理的重要组成部分。即使对于使用 Linux 系统的开发人员来说,了解 Linux 网络命令也是一个额外的优势。
这篇文章将介绍 Linux 系统中本机可用的重要 linux 网络和故障排除命令。
以下是可用的故障排除命令列表。
命令 | 描述 |
hostname |
检查并设置服务器的主机名。 |
host |
获取主机 DNS 详细信息 |
ping |
检查是否可以使用 ICMP 协议访问远程服务器。它还显示数据包的往返时间。 |
curl |
用于传输数据的跨平台实用程序。它可用于解决多个网络问题。 |
wget |
用于下载文件的实用程序。可用于对代理连接和连接进行故障排除。 |
ip |
ifconfig 的替代品。可用于配置和检索有关系统网络接口的信息 |
arp |
用于查看和管理 arp 缓存的实用程序。 |
ss/netstat |
主要用于检查端口和 Unix 套接字上的连接和 PID。 |
tracerout e |
此实用程序使用 ICMP 协议,并查找读取目标服务器所涉及的跃点。它还显示跃点之间所需的时间。 |
mtr |
MTR 是 和 ping traceroute 的混合体。它还提供其他信息,例如中间主机和响应能力。 |
dig |
帮助您获取与域名关联的 DNS 记录。 |
nslookup |
类似于 dig 的命令。 |
nc |
实用程序来调试 TCP/UDP 套接字。 |
telnet |
它可用于测试端口上的远程连接 |
route |
帮助您获取所有路由表信息 |
tcpdump |
此实用程序可帮助您捕获网络数据包并分析它们是否存在网络问题。 |
lsof |
列出所有打开的文件以及打开它的进程信息 |
让我们了解每个命令,看看如何使用它对 Linux 进行故障排除。
重要提示:这篇文章中提到的每个命令/实用程序都有许多选项和标志。每个命令都有一个手册页,您可以使用它来标识用例所需的标志和选项。例如,对于命令,您只需在终端中键入它即可获取有关该命令的所有详细信息。
ip
man ip
Hostname 命令用于查看计算机的主机名并设置主机名。
hostname
可以使用 hostname 命令为计算机设置新的主机名。例如
sudo hostname temp.com
如果使用上面命令设置主机名,则重新启动计算机时,主机名将重新更改为主机名文件中指定的名称(例如:/etc/hostname)
因此,如果要永久更改主机名,可以使用服务器上存在的文件或相关主机名文件。
etc/hostname
文件中更改它。etc/sysconfig/network
文件中更改它。Host 命令用于反向查找 IP 或 DNS 名称。
例如,如果要查找附加了 IP 的 DNS,可以使用 host 命令,如下所示。
host 8.8.8.8
您也可以执行相反的操作来查找与域名关联的 IP 地址。例如
host devopscube.com
ping 网络实用程序用于检查远程服务器是否可访问。它主要用于检查连接和排除网络故障。
它提供了以下详细信息。
Ping 命令的语法如下。
ping
例如
ping baidu.com
ping IP 地址
ping 8.8.8.8
如果要在不使用 ctrl+c 的情况下限制 ping 输出,则可以使用带有数字的“-c”标志,如下所示。
ping -c 1 devopscube.com
curl 实用程序主要用于从服务器传输数据或向服务器传输数据。但是,您可以使用它进行网络故障排除。
例如,可以使用 telnet 检查端口 22 上的连接。curl
curl -v telnet://192.168.33.10:22
您可以使用 curl 检查 FTP 连接。
curl ftp://ftptest.net
您还可以对 Web 服务器连接进行故障排除。
curl http://devopscube.com -I
该命令主要用于获取网页。wget
您也可以使用它来解决网络问题。wget
例如,您可以使用 wget 对代理服务器连接进行故障排除。
wget -e use_proxy=yes http_proxy= http://externalsite.com
您可以通过获取文件来检查网站是否正常运行。
wget www.google.com
ip
命令用于显示和操作路由和网络接口。ip 命令是 ifconfig 的较新版本。 ifconfig 适用于所有系统,但最好使用 ip 命令而不是 ifconfig
。
让我们看一下 ip
命令的几个例子。
ip addr
您可以将此命令与管道和 grep 一起使用,以获得更精细的输出,例如 eth0 接口的 IP 地址。当您使用需要动态获取 IP 的自动化工具时,它非常有用。
以下命令获取网络接口的 IP 地址。
ip a | grep eth0 | grep "inet" | awk -F" " '{print $2}'
获取特定接口的详细信息
ip a show eth0
您可以列出路由表。
ip route
ip route list
ARP(地址解析协议)显示与系统交互的本地网络 IP 地址和 MAC 地址的缓存表。
arp
示例输出,
vagrant@dcubelab:~$ arp
Address HWtype HWaddress Flags Mask Iface
10.0.2.3 ether 52:54:00:12:35:03 C eth0
192.168.33.1 ether 0a:00:27:00:00:00 C eth1
10.0.2.2 ether 52:54:00:12:35:02 C eth0
该命令是 netstat 的替代。您仍然可以在所有系统上使用该命令
使用命令,您可以获得比命令更多的信息。ss 命令速度很快,因为它从内核用户空间获取所有信息。
现在让我们看一下 ss
命令的几种用法。
“ss” 命令将列出计算机上的所有 TCP、UDP 和 Unix 套接字连接。
ubuntu@devopscube:~$ ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str ESTAB 0 0 * 7594 * 0
u_str ESTAB 0 0 @/com/ubuntu/upstart 7605 * 0
u_str ESTAB 0 0 * 29701 * 0
u_str ESTAB 0 0 /var/run/dbus/system_bus_socket 29702 * 0
tcp ESTAB 0 400 172.31.18.184:ssh 1.22.167.31:61808
该命令的输出将很大,因此您可以使用“ ss
ss | less
”命令使输出可滚动。
如果要过滤掉 TCP、UDP 或 UNIX 套接字详细信息,请在 “ss” 命令中使用 “-t” “-u” 和 “-x” 标志。它将显示与特定端口的所有已建立连接。如果要使用带有特定标志的“a”列出连接的端口和侦听端口,如下所示。
ss -ta
ss -ua
ss -xa
要列出所有侦听端口,请使用带有 ss 命令的“-l”标志。要列出特定的 TCP、UDP 或 UNIX 套接字,请使用带有“-l”的“-t”、“-u”和“-x”标志,如下所示。
ubuntu@devopscube:~$ ss -lt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:*
LISTEN 0 50 :::http-alt :::*
LISTEN 0 50 :::55857 :::*
LISTEN 0 128 :::ssh :::*
LISTEN 0 50 :::53285 :::*
ubuntu@devopscube:~$
若要列出所有已建立的端口,请使用如下所示的标志。state established
ss -t -r state established
要列出处于侦听状态的所有套接字,
ss -t -r state listening
如果您的系统或服务器中没有实用程序,则可以从本机存储库安装它。traceroute
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
ubuntu@devopscube:~$
上面的输出显示了从 devopscube AWS ec12 服务器到达 google.com 的跃点计数 (2)。
当您想要解决与网络数据包未到达主机相关的问题时,此实用程序会派上用场。
该实用程序是一种网络诊断工具,用于解决网络瓶颈问题。它结合了两者和mtr
ping
traceroute
例如,以下命令实时显示输出。traceroute
mtr google.com
这是输出。
mtr report
您可以使用 –report 标志生成报告。运行 mtr report时,它会向目标发送 10 个数据包并创建报告。
mtr -n --report google.com
如果您有任何与DNS查找相关的任务,则可以使用“”命令查询DNS名称服务器。dig
以下命令返回 twitter.com 的所有 DNS 记录和 TTL 信息
dig twiter.com ANY
用于获取不冗长的输出。+short
dig google.com ANY +short
例如,如果要获取特定域名的 ,可以使用 dig 命令。 将提供不冗长的信息A record
+short
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 查找。替换为所需的 IP8.8.8.8
dig -x 8.8.8.8
Nslookup(名称服务器查找)实用程序用于检查 DNS 条目。它类似于 dig 命令。
要检查域的 DNS 记录,可以使用以下命令。
nslookup google.com
您还可以使用 IP 地址进行反向查找。
nslookup 8.8.8.8
要获取域名的所有 DNS 记录,您可以使用以下命令。
nslookup -type=any google.com
同样,您可以查询 等记录mx
soa
nc
(netcat) 命令被称为网络命令的瑞士军队。
使用 nc
,可以检查在特定端口上运行的服务的连接性。
例如,要检查 ssh
端口是否打开,可以使用以下命令。
nc -v -n 192.168.33.10 22
netcat
还可用于通过 TCP/UDP 传输数据和端口扫描。
不建议在云环境中进行端口扫描。您需要请求云提供商在您的环境中执行端口扫描操作。
telnet命令用于对端口上的TCP连接进行故障排除。
若要使用 telnet 检查端口连接,请使用以下命令。
telnet 10.4.5.5 22 8080
“” 命令用于获取系统的路由表的详细信息并对其进行操作。让我们看一下 route 命令的几个示例。route
执行不带任何参数的 “” 命令以列出系统或服务器中的所有现有路由。route
ubuntu@devopscube:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default ip-172-31-16-1. 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
172.31.16.0 * 255.255.240.0 U 0 0 0 eth0
ubuntu@devopscube:~$
如果要在没有任何主机名的情况下以数字形式获得完整输出,则可以在 route 命令中使用“-n”标志。
ubuntu@devopscube:~$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.31.16.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.31.16.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
ubuntu@devopscube:~$
该命令主要用于对网络流量进行故障排除。tcpdump
注意:
tcpdump
分析命令的输出需要一些学习,因此解释它超出了本文的范围。
tcpdump
命令适用于系统的网络接口。因此,您需要使用管理权限来执行该命令。
使用以下命令列出所有接口。
sudo tcpdump --list-interfaces
若要获取特定接口上的数据包转储,可以使用以下命令。
注意:按下可停止捕获数据包。
ctrl + c
sudo tcpdump -i eth0
若要限制数据包捕获,可以使用带有数字的标志。-c
例如
sudo tcpdump -i eth0 -c 10
要捕获所有接口上的数据包,请使用如下所示的标志。any
sudo tcpdump -i any
lsof
是用于日常 Linux 故障排除的命令。对于使用 Linux 系统的任何人来说,此命令都同样重要。
要列出所有打开的程序,请执行该命令。lsof
lsof
开发人员和DevOps工程师面临的常见错误之一是“绑定失败错误:地址已在使用中”。您可以使用以下命令查找与端口关联的进程 ID。您可以终止进程以释放端口。
lsof -i :8080
第三方解决方案提供了更多网络疑难解答命令行实用程序。
您需要单独安装它们,并将它们用于故障排除目的。由于安全合规性的原因,并非每个组织都允许您这样做。
我们在下表中将一些工具信息组织在不同的类别下。
类别 | 开源工具 |
---|---|
网络扫描仪 | Nmap、Zenmap(Nmap 的 GUI) |
数据包分析器 | Wireshark、Tcpdump |
带宽监视器 | BandwidthD, Cacti |
端口扫描仪 | Nmap, Masscan |
Ping/Traceroute 工具 | MTR(My Traceroute) |
无线网络分析仪 | Wireshark(用于无线)、Kismet |
网络模拟器 | GNS3,Mininet |
DNS 工具 | DNSperf |
网络性能测试 | iperf |
在本文中,我们介绍了用于网络故障排除和配置的重要 Linux 命令行实用程序。
如果您刚开始使用系统管理、DevOps 或 SRE 角色,则必须了解这些实用程序以支持您正在处理的项目。
每个实用程序都有许多功能,您可以进一步探索以满足您的要求。