在Windows下,你可以用 netstat 查看網絡連接狀況,那麼在Ubuntu下,怎麼查看網絡狀態?下面介紹4個強大的命令。

在Ubuntu(以及大多數現代Linux發行版)下,與Windows命令netstat功能同等的命令主要是:

  1. ss (Socket Statistics) - 現代且推薦的替代品
  2. netstat - 傳統命令,但已在許多Linux發行版中被棄用或標記為遺留工具。
  3. ip 命令家族 (特別是 ip route) - 用於路由表,取代 netstat -r
  4. lsof -i - 用於顯示哪個進程正在使用哪個端口。

讓我們詳細瞭解一下:


1. ss 命令 (推薦)

ssnetstat 的一個更快速、更強大、更現代的替代品。它使用 netlink 接口,效率更高。

常用 netstat 命令及其對應的 ss 命令:

功能

Windows netstat / Linux netstat 命令

Linux ss 命令

顯示所有連接(監聽和已建立)

netstat -a

ss -a (或 ss 本身)

顯示所有監聽端口

netstat -l

ss -l

顯示所有 TCP 連接

netstat -at

ss -t

顯示所有 UDP 連接

netstat -au

ss -u

顯示所有 Unix socket 連接

netstat -ax

ss -x

顯示所有監聽的 TCP 連接

netstat -lt

ss -lt

顯示所有監聽的 UDP 連接

netstat -lu

ss -lu

顯示數字地址和端口號(不進行主機名解析)

netstat -n

ss -n

顯示進程 ID/名稱 (需要root權限查看所有)

netstat -p

ss -p

組合常用選項(例如:監聽的TCP連接,數字地址,顯示進程)

netstat -ltnp

ss -ltnp (或 sudo ss -ltnp)

顯示網絡接口統計信息 (部分)

netstat -i

ip -s link showss -s (socket統計)

顯示路由表

netstat -r

ip route show

ss 的一些額外優勢:

  • 可以顯示更多的TCP狀態信息。
  • 可以顯示socket的內部緩衝區信息。
  • 在有大量連接時比 netstat 快得多。

示例:

ss -ltn # 顯示所有監聽的 TCP 連接,以數字形式顯示地址和端口
ss -antp # 顯示所有連接(監聽和已建立),以數字形式顯示地址和端口,並顯示進程信息
ss -s # 顯示socket的統計信息

2. netstat 命令 (傳統/遺留)

儘管 netstat 仍然可以在Ubuntu上運行,但它屬於 net-tools 包,而這個包已經被 iproute2 包(包含 ipss 命令)所取代。在一些新版本的Linux發行版中,netstat 可能默認沒有安裝,或者會提示你使用 ss

如果你想使用 netstat,並且它沒有安裝,你可以通過以下命令安裝:

sudo apt update
sudo apt install net-tools

然後,你可以像在Windows上那樣使用它:

netstat -a     # 顯示所有連接和監聽端口
netstat -ltnp  # 顯示所有監聽的 TCP 連接,不解析主機名,顯示進程 ID
netstat -r     # 顯示路由表

3. ip route show (用於路由表)

在Linux中,ip 命令是管理網絡配置的現代工具。它取代了 ifconfig, route, arp 等多箇舊命令。

如果你想查看路由表,ip route shownetstat -r 的直接替代品:

ip route show
# 簡寫形式:
ip r

ip 命令非常強大,還可以用於:

  • ip addr show (查看網絡接口地址,相當於 ifconfig)
  • ip link show (查看網絡接口狀態)

4. lsof -i (查找哪個進程使用哪個端口)

lsof (list open files) 是一個非常強大的工具,可以列出所有打開的文件,包括網絡文件(即socket)。當你需要知道哪個進程正在監聽或連接到某個特定端口時,它非常有用。

示例:

sudo lsof -i :80    # 顯示所有使用 80 端口的進程
sudo lsof -i tcp:22 # 顯示所有使用 TCP 22 端口的進程
sudo lsof -i -P -n  # 列出所有網絡連接,不解析端口和服務名
  • -i 表示網絡文件
  • -P 表示不解析端口號(顯示數字)
  • -n 表示不解析主機名(顯示IP地址)

總結

對於大多數 netstat 的用例:

  • 查看網絡連接和監聽端口使用 ss 命令。 它是最推薦的工具。
  • 查看路由表使用 ip route show 命令。
  • 查找哪個進程正在使用特定端口使用 sudo lsof -i 命令。

推薦你優先學習並使用 ssip 命令,因為它們是現代Linux系統中的標準和推薦工具。