# Linux中怎么使用ss命令
## 1. 什么是ss命令
`ss`(Socket Statistics)是Linux系統中一個功能強大的網絡工具,用于查看詳細的套接字(socket)統計信息。它是傳統`netstat`命令的現代替代品,具有以下優勢:
- **速度更快**:直接讀取內核信息,無需遍歷`/proc`文件系統
- **信息更詳細**:提供更豐富的連接狀態和選項顯示
- **功能更強大**:支持各種過濾和顯示選項
## 2. 基本語法與常用選項
### 2.1 基本語法
```bash
ss [options] [ FILTER ]
選項 | 說明 |
---|---|
-t |
顯示TCP連接 |
-u |
顯示UDP連接 |
-l |
顯示監聽狀態的套接字 |
-a |
顯示所有套接字(默認不顯示監聽) |
-n |
不解析服務名稱(顯示端口號而非服務名) |
-p |
顯示使用套接字的進程 |
-s |
顯示套接字使用統計 |
-4 |
僅顯示IPv4套接字 |
-6 |
僅顯示IPv6套接字 |
-o |
顯示計時器信息 |
-i |
顯示TCP內部信息 |
-r |
嘗試解析數字地址/端口 |
ss -a
這會顯示所有TCP、UDP和UNIX域套接字。
ss -t -a
ss -u -a
ss -lntup
解釋:
- -l
:監聽狀態
- -n
:數字形式顯示端口
- -t
:TCP
- -u
:UDP
- -p
:顯示進程信息
ss -tup
輸出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.100:ssh 192.168.1.50:52134 users:(("sshd",pid=1234,fd=3))
ss -s
輸出示例:
Total: 156 (kernel 175)
TCP: 12 (estab 3, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 175 - -
RAW 0 0 0
UDP 4 2 2
TCP 12 8 4
INET 16 10 6
FRAG 0 0 0
ss
命令支持強大的過濾功能,可以精確查找特定連接。
ss state established
ss state listening
可用狀態包括:
- established
- syn-sent
- syn-recv
- fin-wait-1
- fin-wait-2
- time-wait
- closed
- close-wait
- last-ack
- listening
- closing
ss src 192.168.1.100
ss dst 192.168.1.50
ss src :22
ss dst :80
ss -t state established '( dst 192.168.1.50 or dst 192.168.1.51 )'
ss -ti
輸出示例:
ESTAB 0 0 192.168.1.100:ssh 192.168.1.50:52134
cubic wscale:7,7 rto:204 rtt:1.875/0.75 ato:40 mss:1448 cwnd:10 bytes_acked:12345 bytes_received:67890 segs_out:123 segs_in:456 send 1.1Mbps lastsnd:12 lastrcv:12 lastack:12 pacing_rate 2.2Mbps rcv_rtt:35 rcv_space:28960
ss -to
輸出示例:
ESTAB 0 0 192.168.1.100:ssh 192.168.1.50:52134 timer:(keepalive,2.712ms,0)
雖然netstat
仍然可用,但ss
通常是更好的選擇:
特性 | ss | netstat |
---|---|---|
速度 | 快 | 慢 |
信息詳細程度 | 高 | 一般 |
過濾能力 | 強 | 弱 |
維護狀態 | 活躍 | 已廢棄 |
ss -t state syn-sent
查找無法建立TCP連接的客戶端。
watch -n 1 'ss -lntp | grep 80'
實時監控80端口的監聽狀態。
ss -t -a | grep -v 192.168.1
查找非本地網絡的TCP連接。
ss -s
快速查看系統整體連接情況。
ss
命令的輸出適合在腳本中處理:
#!/bin/bash
# 統計各狀態的TCP連接數
ss -t -a | grep -v State | awk '{print $1}' | sort | uniq -c | sort -rn
# 檢查特定端口是否監聽
if ss -lnt | grep -q ':80 '; then
echo "HTTP服務正在運行"
else
echo "HTTP服務未運行"
fi
由于ss
直接讀取內核信息,即使在高負載系統上也能快速運行。但對于有大量連接的系統:
watch
命令)ss
命令是Linux網絡診斷的強大工具,相比傳統的netstat
:
掌握ss
命令可以大大提高網絡問題排查的效率,是每個Linux系統管理員和開發人員必備的技能。
man ss
/usr/src/linux/Documentation/networking/
通過實踐這些命令和選項,你將能夠更有效地監控和診斷Linux系統的網絡連接。 “`
這篇文章共計約1850字,詳細介紹了ss
命令的各種用法,從基礎到高級功能,并提供了實際應用示例。格式采用Markdown,便于閱讀和編輯。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。