[Linux] 使用 lsof 查詢某個 socket fd 是哪個連線
今天看到某個 process 的 fd 開了一堆,而且有一堆的 socket,
不曉得是在做什麼連線呢?
testuser@localhost ~ # ll /proc/26708/fd lr-x------ 1 root root 64 Jan 26 09:58 0 -> /dev/null l-wx------ 1 root root 64 Jan 26 09:58 1 -> ~/log/test.log lrwx------ 1 root root 64 Jan 26 10:02 10 -> socket:[36222307]= lrwx------ 1 root root 64 Jan 26 10:02 11 -> socket:[35748018]= lrwx------ 1 root root 64 Jan 26 10:02 12 -> socket:[35751132]= lrwx------ 1 root root 64 Jan 26 10:02 13 -> socket:[35598981]= lr-x------ 1 root root 64 Jan 26 10:02 14 -> socket:[36838101]= l-wx------ 1 root root 64 Jan 26 10:02 15 -> socket:[36209739]= lr-x------ 1 root root 64 Jan 26 10:02 16 -> socket:[39404442]= l-wx------ 1 root root 64 Jan 26 10:02 17 -> socket:[35604609]= lr-x------ 1 root root 64 Jan 26 10:02 18 -> socket:[35605172]= l-wx------ 1 root root 64 Jan 26 10:02 19 -> socket:[36753211]= l-wx------ 1 root root 64 Jan 26 09:58 2 -> ~/log/test.log lr-x------ 1 root root 64 Jan 26 10:05 20 -> socket:[35617426]= l-wx------ 1 root root 64 Jan 26 10:05 21 -> socket:[36877641]= lr-x------ 1 root root 64 Jan 26 10:05 22 -> socket:[39291798]= l-wx------ 1 root root 64 Jan 26 09:58 3 -> ~/log/test.log l-wx------ 1 root root 64 Jan 26 09:58 4 -> ~/log/test.log lrwx------ 1 root root 64 Jan 26 09:58 5 -> socket:[35573140]= lr-x------ 1 root root 64 Jan 26 09:58 6 -> /dev/urandom lrwx------ 1 root root 64 Jan 26 09:58 7 -> /dev/urandom l-wx------ 1 root root 64 Jan 26 09:58 8 -> socket:[35751130]= lrwx------ 1 root root 64 Jan 26 10:02 9 -> socket:[39338031]=
這時可以再請出 lsof 大神來幫忙~
舉例來說,想知道 fd 10 這個 socket 是連到哪的話,
先看它是 socket:[36222307],接著就用 lsof 查一下有含 36222307 這個字的地方,
這邊的 -n 是不要將 port number 轉成名稱 (會省一點時間),-i 是只秀出網路相關的檔案:
testuser@localhost ~ # lsof -n -i 2>/dev/null | grep 36222307 python 26708 root 10u IPv4 36222307 TCP 10.1.1.1:47810->203.69.138.75:http (CLOSE_WAIT)
如上例,就可以看到這個 socket 就是從 10.1.1.1 連到 203.69.138.75 的一個連線囉~
(本頁面已被瀏覽過 1,889 次)