【DevOps】Linux 网络命令详解:举例说明

目录

[1. ip 命令](#1. ip 命令)

查看和配置网络接口

管理路由表

[2. netstat 和 ss 命令](#2. netstat 和 ss 命令)

查看网络连接

显示详细统计信息

查看某个端口被什么进程占用

详解各个选项参数

示例

注意事项

[使用 ss 命令查看端口占用](#使用 ss 命令查看端口占用)

[3. ping 命令](#3. ping 命令)

基本用法

常用选项

实际应用示例

[4. traceroute 命令](#4. traceroute 命令)

基本工作原理

使用traceroute

常用选项

示例

注意事项

[5. tcpdump 命令](#5. tcpdump 命令)

基本工作原理

基本语法

常用选项

常用过滤表达式

示例

注意事项


在 Linux 系统中,网络配置和故障排查是系统管理员的常见任务。Linux 提供了丰富的命令行工具来帮助管理网络、监控性能、诊断问题,以及优化网络设置。本文将详细介绍一系列关键的 Linux 网络命令,并通过实际例子来展示它们的用法和功能。

1. ip 命令

ip 命令是用来显示和操作路由、设备、策略路由和隧道的工具,是旧的 ifconfigroutearp 等命令的替代品。

查看和配置网络接口

  • 查看所有接口的 IP 地址:

    复制代码
    ip addr show

    或简写为:

    复制代码
    ip a
  • 查看特定接口的详细信息:

    复制代码
    ip addr show dev eth0

    这里 eth0 是网络接口的名称,根据实际情况替换。

  • 启用和禁用网络接口:

    复制代码
    ip link set eth0 up   # 启用 eth0
    ip link set eth0 down # 禁用 eth0
  • 添加或删除 IP 地址:

    复制代码
    ip addr add 192.168.1.100/24 dev eth0  # 添加 IP 地址
    ip addr del 192.168.1.100/24 dev eth0  # 删除 IP 地址

管理路由表

  • 查看路由表:

    复制代码
    ip route show

    或简写为:

    复制代码
    ip r
  • 添加和删除路由:

    复制代码
    ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0  # 添加路由
    ip route del 192.168.2.0/24                           # 删除路由

2. netstatss 命令

netstat 命令用于显示网络连接、路由表、接口统计等信息,而 ssnetstat 的更强大和快速的替代品。

查看网络连接

  • 使用 netstat 查看所有连接:

    复制代码
    netstat -a
  • 使用 ss 查看所有 TCP 连接:

    复制代码
    ss -t -a
  • 查看所有监听端口:

    复制代码
    ss -t -l

显示详细统计信息

  • 使用 netstat 查看接口统计:

    复制代码
    netstat -i
  • 使用 ss 查看 TCP 连接的统计:

    复制代码
    ss -ti

查看某个端口被什么进程占用

当你需要查看某个端口被哪个进程占用时,netstat 可以提供详细的信息,包括服务的 PID 和进程名称。

要使用 netstat 查看某个特定端口(例如 80 端口)被哪个进程占用,你可以使用以下命令:

复制代码
netstat -tulnp | grep :80
详解各个选项参数
  • -t (TCP): 这个选项指示 netstat 显示 TCP 协议的连接。
  • -u (UDP): 这个选项指示 netstat 显示 UDP 协议的连接。
  • -l (Listening): 这个选项让 netstat 仅列出处在监听状态的套接字,这对于查找哪个进程在监听某个端口非常有用。
  • -n (Numeric): 通常,netstat 会显示服务名称(如 http)和主机名(如 localhost)。使用 -n 选项,netstat 会直接使用 IP 地址和端口号,避免域名解析带来的延迟和不必要的 DNS 查找。
  • -p (Program): 最重要的选项之一,它显示每个套接字关联的进程 ID 和程序名。这对于确定哪个程序绑定了某个端口至关重要。
示例

假设你想找出哪个进程监听了 TCP 80 端口(通常是 HTTP 服务),你可以运行:

复制代码
netstat -tulnp | grep :80

输出可能类似于:

复制代码
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1316/nginx: master  
tcp6       0      0 :::80                   :::*                    LISTEN      1316/nginx: master  

这里,1316/nginx: master 表示 PID 为 1316 的进程(nginx 的主进程)正在监听端口 80。

注意事项
  • 权限 :运行 netstat -p 需要足够的权限(通常是 root 权限),因为查看系统上所有用户的进程信息需要管理员权限。
  • 过时的 netstat :在一些较新的 Linux 发行版中,netstatss 命令替代了。如果你发现 netstat 不可用或希望使用更现代的工具,可以使用 ss 命令作为替代。
使用 ss 命令查看端口占用

ss 是另一个非常有用的工具,用于显示类似的信息。使用 ss 查看被占用的端口,可以执行:

复制代码
ss -tulnp | grep :80

其中选项的含义与 netstat 类似,ss 命令通常更快,更推荐在现代系统上使用。

3. ping 命令

ping 命令是网络管理员用来测试网络连接的一个非常基础和强大的工具。它利用 ICMP (Internet Control Message Protocol) 协议发送回显请求消息到目标主机,并监听回显应答来检测两个主机间的连通性。

基本用法

最基本的 ping 命令只需要一个参数,即目标主机的地址,可以是 IP 地址或者域名:

复制代码
ping google.com

或者直接使用 IP 地址:

复制代码
ping 8.8.8.8

这将持续发送 ICMP Echo Request 消息到目标地址,并显示每次回显应答的详细信息,包括往返时间(RTT)。

常用选项

ping 命令有许多选项,可以用来修改命令的行为或输出的详细程度。以下是一些常用的选项:

  • -c count: 停止发送报文的数量。使用这个选项可以指定发送多少个 ICMP 请求后停止。例如,发送 4 个 ICMP Echo 请求后停止:

    复制代码
    ping -c 4 google.com
  • -i interval: 设置连续 Echo 请求之间的间隔秒数。默认是 1 秒,但可以设置更短的时间来进行更快速的检测。例如,每 0.5 秒发送一个请求:

    复制代码
    ping -i 0.5 google.com
  • -t ttl: 设置 IP Time To Live 域。这个选项可以用来测试网络层的特定路径,因为 TTL 值决定了数据包能通过的最大网络跳数。例如,设置 TTL 为 5:

    复制代码
    ping -t 5 google.com
  • -W timeout: 设置等待每次回显回复的超时时间(以秒为单位)。这个选项可以用来判断网络延迟和丢包率。例如,设置超时为 2 秒:

    复制代码
    ping -W 2 google.com
  • -s packetsize: 设置 ICMP 数据包的数据大小(以字节为单位)。默认是 56 字节的数据,加上 8 字节的 ICMP 头,因此默认 ICMP 请求是 64 字节。例如,发送数据大小为 120 字节的 ICMP 请求:

    复制代码
    ping -s 120 google.com
  • -q: 安静输出。只显示摘要行,包含丢包信息和平均、最小、最大 RTT。

    复制代码
    ping -q -c 5 google.com
  • -v: 详细输出模式。显示 ICMP 消息的详细信息,对于调试很有帮助。

  • -f: 快速发送模式。发送请求的速度非常快,不等待回应,也不显示单个的回应时间,通常用于压力测试。

    复制代码
    ping -f localhost
  • -D: 使用绝对时间戳显示输出。

    复制代码
    ping -D google.com
  • -A: 自适应模式。动态调整间隔时间,根据网络响应时间自适应调整发送数据包的间隔。

    复制代码
    ping -A google.com
  • -n: 数字输出。直接使用数字 IP 地址而不进行 DNS 解析。

    复制代码
    ping -n 8.8.8.8
  • -m pmtudisc_opt : 设置 Path MTU Discovery (PMTU) 选项。可以是 do (开启 PMTU Discovery),dont (关闭),或 want (开启,但不设置 DF 标志)。

    复制代码
    ping -m do google.com
  • -4: 强制使用 IPv4。

  • -6: 强制使用 IPv6。

实际应用示例

让我们看几个 ping 命令的实际应用示例:

  • 检测网络连通性 :发送 5 个 ICMP 请求到 google.com 并显示结果。

    复制代码
    ping -c 5 google.com
  • 快速检测本地网络:快速发送大量 ICMP 请求到本地路由器。

    复制代码
    ping -f -c 100 192.168.1.1
  • 检测网络延迟 :测量到 google.com 的平均往返时间。

    复制代码
    ping -c 10 google.com
  • 查找网络路径问题:逐步增加 TTL 值来查看数据包的路径。

    复制代码
    for i in {1..10}; do ping -c 1 -t $i google.com; done

这些示例和选项展示了 ping 命令的多样性和实用性,使其成为网络诊断和性能评估的重要工具。

4. traceroute 命令

traceroute 是一个非常有用的网络诊断工具,它用于显示数据包从一个主机传输到另一个主机所经过的路径。这个命令可以帮助你识别网络连接中的延迟瓶颈和故障位置。traceroute 利用 ICMP 和 UDP 数据包的生存时间(TTL)字段来确定网络中每一跳(即每一个路由器)的路径。

基本工作原理

traceroute 通过发送一系列小的数据包到目标主机来工作。每个数据包的 TTL 值从 1 开始递增。每当数据包经过一个路由器,其 TTL 值会减 1,当 TTL 值减到 0 时,路由器会丢弃这个数据包并发送一个 ICMP "Time Exceeded" 消息回发送者。traceroute 使用这些消息来识别所有到目标的路径上的路由器。

使用traceroute

基本语法:

复制代码
traceroute [options] <destination>
  • <destination> 可以是 IP 地址或域名,指示 traceroute 的目的地。

常用选项

  • -n: 不对地址进行 DNS 名称解析,直接显示 IP 地址。
  • -m <max_ttl>: 设置最大生存时间(TTL),即最多经过的路由器数量,默认通常为 30。
  • -q <nqueries>: 设置每一跳发送的查询数,默认为 3。
  • -f <first_ttl>: 设置第一个使用的 TTL 值,默认为 1。这可以用来开始跟踪从一个高于 1 的 TTL 值,有助于跳过前面已知的路由器。
  • -I: 使用 ICMP 回显请求代替 UDP 数据报进行探测。
  • -T: 使用 TCP SYN 而不是 UDP 数据报进行探测,常用于诊断不响应 UDP 的服务器。
  • -p <port>: 设置 UDP 发送到的目标端口号或 TCP SYN 发送到的目标端口号,默认值通常为 33434。
  • -i <interface>: 使用指定的网络接口发送数据包。
  • -w <waittime>: 设置等待每次回应的最大时间(秒)。
  • -z <pausemsecs> : 设置发送数据包之间的等待时间(毫秒),用于限制 traceroute 的发送速率。

示例

  • 基本用法 :显示从本机到 google.com 的路由路径。

    复制代码
    traceroute google.com
  • 使用 ICMP 而不是 UDP:使用 ICMP 请求来进行跟踪。

    复制代码
    traceroute -I google.com
  • 设置最大 TTL:显示路由路径,其中每一跳的 TTL 最大为 20。

    复制代码
    traceroute -m 20 google.com
  • 不解析名称:以纯 IP 形式显示路径。

    复制代码
    traceroute -n google.com
  • 改变查询次数:每跳只发送 1 个查询包。

    复制代码
    traceroute -q 1 google.com
  • 使用 TCP SYN:使用 TCP SYN 包进行 traceroute,对某些服务器来说,这种方式可能会绕过防火墙的限制。

    复制代码
    traceroute -T -p 80 google.com
  • 详细输出 :一些 traceroute 版本支持 -v 选项以提供更详细的输出。

    复制代码
    traceroute -v google.com
  • 指定源接口:从特定网络接口发送数据包。

    复制代码
    traceroute -i eth0 google.com
  • 调整发送间隔:设置每次发送数据包的间隔为 0.5 秒。

    复制代码
    traceroute -z 500 google.com

注意事项

  • 网络安全设施如防火墙和 NAT 设备可能会影响 traceroute 的结果,有时会导致部分路径不显示或显示为星号(*)。
  • traceroute 的输出需要一定的网络知识来正确解读,特别是在复杂的网络环境中。
  • 某些路由器配置为不发送 ICMP "Time Exceeded" 消息,这会导致 traceroute 无法显示这些路由器。

通过熟练使用 traceroute 和其各种选项,你可以有效地诊断网络连接问题,从而更快地解决网络故障或性能瓶颈。

复制代码
traceroute google.com

5. tcpdump 命令

tcpdump 是一个强大的命令行网络分析工具,用于捕获和分析网络上的数据包。它可以展示网络接口上所有的传入和传出的数据包的头信息,并且支持基于各种条件的过滤,使得用户可以更加精确地定位感兴趣的数据包。

基本工作原理

tcpdump 使用 pcap (Packet Capture) 库来捕获网络数据包。当你运行 tcpdump,它会把网络接口设置为混杂模式,这样它就可以监听所有通过该接口的数据包,而不仅仅是发往本机的数据包。

基本语法

复制代码
tcpdump [options] [filter-expression]
  • options : 控制 tcpdump 行为的命令行选项。
  • filter-expression: 定义了一个过滤表达式,用来指定哪些数据包会被捕获。

常用选项

以下是一些常用的 tcpdump 选项:

  • -i <interface> : 指定要监听的网络接口。例如,eth0lo (回环接口) 等。
  • -n: 不解析主机名,使用 IP 地址显示。
  • -v, -vv, -vvv : 增加输出的详细程度。-v 表示稍微详细,-vv 更详细,-vvv 最详细。
  • -c <count>: 捕获指定数量的数据包然后停止。
  • -s <size> : 设置捕获的数据包的部分大小(字节)。默认是捕获 96 字节,使用 -s 0 可以捕获完整的数据包。
  • -w <file>: 将捕获的数据包写入文件而不是打印出来。
  • -r <file> : 从文件中读取数据包,通常与 -w 选项配合使用。
  • -A: 以 ASCII 格式打印每个数据包(不包括链路层的头),便于阅读。
  • -X: 以十六进制和 ASCII 格式打印每个数据包的数据部分,包括链路层的头。
  • -q: 快速输出,仅打印较少的协议信息。
  • -t: 在输出中不包括时间戳。
  • -e: 在输出中包括数据链路层的头信息。
  • -E: 使用提供的密钥解密 IPsec 流量。

常用过滤表达式

过滤表达式用来定义哪些数据包会被 tcpdump 捕获。它们基于一组逻辑规则,这些规则可以根据协议、端口号、主机地址等属性来定义。

  • src <host> : 源地址是 <host> 的数据包。
  • dst <host> : 目标地址是 <host> 的数据包。
  • host <host> : 源或目标地址是 <host> 的数据包。
  • net <network> : 属于 <network> 网络的数据包。
  • src port <port> : 源端口是 <port> 的数据包。
  • dst port <port> : 目标端口是 <port> 的数据包。
  • port <port> : 源或目标端口是 <port> 的数据包。
  • proto <protocol> : 协议是 <protocol> 的数据包,例如 icmptcpudp
  • tcp, udp, icmp : TCP / UDP / ICMP 协议的数据包。

示例

  • 捕获所有经过 eth0 接口的数据包:

    复制代码
    tcpdump -i eth0
  • 捕获所有到达或离开某个特定 IP 的数据包:

    复制代码
    tcpdump host 192.168.1.1
  • 捕获所有目标端口为 80 的 TCP 数据包:

    复制代码
    tcpdump -i eth0 'tcp dst port 80'
  • 捕获所有源端口为 23 的数据包:

    复制代码
    tcpdump 'src port 23'
  • 仅捕获 ICMP 数据包:

    复制代码
    tcpdump icmp
  • 捕获所有经过 lo 接口的数据包并且不解析主机名:

    复制代码
    tcpdump -n -i lo
  • 捕获 100 个 TCP 数据包后停止:

    复制代码
    tcpdump -c 100 tcp
  • 以详细模式捕获数据包:

    复制代码
    tcpdump -vvv -i eth0
  • 将捕获的数据包写入文件:

    复制代码
    tcpdump -w packets.pcap
  • 从文件读取数据包:

    复制代码
    tcpdump -r packets.pcap
  • 捕获 TCP 数据包并显示每个数据包的数据部分:

    复制代码
    tcpdump -X tcp
  • 显示所有经过 eth0,目的地或源地为 192.168.1.1 的 TCP 数据包:

    复制代码
    tcpdump -i eth0 -n 'tcp and (src host 192.168.1.1 or dst host 192.168.1.1)'
  • 捕获源 IP 是 10.0.0.1 并且目标端口是 22 的数据包:

    复制代码
    tcpdump -n 'src host 10.0.0.1 and dst port 22'
  • 捕获所有非 ICMP 数据包:

    复制代码
    tcpdump 'not icmp'
  • 使用更复杂的表达式:

    复制代码
    tcpdump 'src net 192.168.1.0/24 and dst port 443'

注意事项

  • 运行 tcpdump 可能需要管理员权限。
  • tcpdump 可能不会显示真实的网络速度,因为它在用户空间处理数据包,而不是在内核空间。
  • 大量的数据包捕获和处理可能会对系统性能造成影响。
  • 在高速网络或捕获大量数据时,考虑使用更高效的工具如 Wireshark 或使用专用的网络分析硬件。

这些命令和工具的组合提供了强大的网络管理和优化能力,帮助管理员监控、配置和优化 Linux 系统的网络性能。每个工具都有其特定的使用场景和优势,了解并熟练使用这些工具是提高网络管理效率和效果的关键。

相关推荐
欧先生^_^几秒前
Linux内核可配置的参数
linux·服务器·数据库
海尔辛18 分钟前
学习黑客5 分钟读懂Linux Permissions 101
linux·学习·安全
zizisuo33 分钟前
面试篇:Spring Security
网络·数据库·安全
玉笥寻珍34 分钟前
Web安全渗透测试基础知识之HTTP参数污染篇
网络·网络协议·安全·web安全·http
GCKJ_08241 小时前
观成科技:加密C2框架Vshell流量分析
网络·科技·信息与通信
王RuaRua1 小时前
[数据结构]5. 栈-Stack
linux·数据结构·数据库·链表
曼岛_2 小时前
[架构之美]linux常见故障问题解决方案(十九)
linux·运维·架构
tan180°2 小时前
Linux进程信号处理(26)
linux·c++·vscode·后端·信号处理
大神的风范2 小时前
从0开始学linux韦东山教程第三章问题小结(4)
linux·服务器
sz66cm2 小时前
Linux基础 -- SSH 流式烧录与压缩传输笔记
linux·笔记·ssh