透過 CLI 查詢本機端被使用的 Port

February 28, 2018

我們在開發或是使用一些應用程式時,有時候可能會用到本機端的 Port,有了這些 Port 我們可以在本機執行不同的應用程式,彼此不相衝突。

例如有 A 網站和 B 網站,同時要在我的本機端執行,我可以分配不同的 Port 給它們,當執行的時候,我只要在網址輸入對應的 Port Number(localhost:[portNumber])就可以分別進入 A 和 B 網站,但有時候常常我們開了那些 Port 可能不小心忘記了,或者是哪些應用程式佔用了哪些 Port,造成我的應用程式執行的時候發生錯誤。

以 Node.js 的例子,許多預設的 Port 都設定為 3000,假如我今天在看一個 express 的教學課程,執行了一個 server,它監聽 Port 3000,可能我開著就忘了,後來又切到 create-react-app 來建立一個 react app,也把這個 app 給 run 起來了,哎呀!忘了 Port 3000 已經被前面的 express server 給佔去啦!這時候如果應用程式的 Port 被佔去後,通常都會有一些提示的資訊告訴你的 Port 已經被其他的程序佔用掉了。

我們可以簡單透過以下指令來查詢:

$ lsof -PiTCP -sTCP:LISTEN | grep -i "listen"

COMMAND     PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
SpotifyWe   373 jiepeng    5u  IPv4 0x121b5220bb30a6bd      0t0  TCP localhost:4380 (LISTEN)
VBoxHeadl 59450 jiepeng   17u  IPv4 0x121b5220a6db98ad      0t0  TCP localhost:56676 (LISTEN)
Ganache   64581 jiepeng   30u  IPv4 0x121b5220ba928dc5      0t0  TCP localhost:7545 (LISTEN)
node      64593 jiepeng   28u  IPv4 0x121b5220bbb314cd      0t0  TCP *:4000 (LISTEN)

Reference

🔗 How can I list my open network ports with netstat?