在Windows下,你可以用 netstat 查看網絡連接狀況,那麼在Ubuntu下,怎麼查看網絡狀態?下面介紹4個強大的命令。
在Ubuntu(以及大多數現代Linux發行版)下,與Windows命令netstat功能同等的命令主要是:
ss(Socket Statistics) - 現代且推薦的替代品netstat- 傳統命令,但已在許多Linux發行版中被棄用或標記為遺留工具。ip命令家族 (特別是ip route) - 用於路由表,取代netstat -r。lsof -i- 用於顯示哪個進程正在使用哪個端口。
讓我們詳細瞭解一下:
1. ss 命令 (推薦)
ss 是 netstat 的一個更快速、更強大、更現代的替代品。它使用 netlink 接口,效率更高。
常用 netstat 命令及其對應的 ss 命令:
|
功能
|
Windows |
Linux |
|
顯示所有連接(監聽和已建立)
|
|
|
|
顯示所有監聽端口
|
|
|
|
顯示所有 TCP 連接
|
|
|
|
顯示所有 UDP 連接
|
|
|
|
顯示所有 Unix socket 連接
|
|
|
|
顯示所有監聽的 TCP 連接
|
|
|
|
顯示所有監聽的 UDP 連接
|
|
|
|
顯示數字地址和端口號(不進行主機名解析)
|
|
|
|
顯示進程 ID/名稱 (需要root權限查看所有)
|
|
|
|
組合常用選項(例如:監聽的TCP連接,數字地址,顯示進程)
|
|
|
|
顯示網絡接口統計信息 (部分)
|
|
|
|
顯示路由表
|
|
|
ss 的一些額外優勢:
- 可以顯示更多的TCP狀態信息。
- 可以顯示socket的內部緩衝區信息。
- 在有大量連接時比
netstat快得多。
示例:
ss -ltn # 顯示所有監聽的 TCP 連接,以數字形式顯示地址和端口
ss -antp # 顯示所有連接(監聽和已建立),以數字形式顯示地址和端口,並顯示進程信息
ss -s # 顯示socket的統計信息
2. netstat 命令 (傳統/遺留)
儘管 netstat 仍然可以在Ubuntu上運行,但它屬於 net-tools 包,而這個包已經被 iproute2 包(包含 ip 和 ss 命令)所取代。在一些新版本的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 show 是 netstat -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命令。
推薦你優先學習並使用 ss 和 ip 命令,因為它們是現代Linux系統中的標準和推薦工具。