首頁·終端機命令

lsof

行程與系統

用法

lsof -i :<port>

列出所有開啟的檔案和 socket,這就是回答「誰占著 3000 埠」的辦法;不加 sudo 只能看到自己的行程,所以結果為空並不表示埠是空的。

常用選項

選項含義
-i :3000Which process holds port 3000, in either direction.
-i TCP -sTCP:LISTENListening TCP sockets only.
-tPrint bare PIDs, made for piping into kill.
-p <pid>Everything one process has open.
-u <user>One user's open files.
+D <dir>Every open file underneath a directory, recursively.
-n -PSkip host and port name lookups, which makes it much faster.

範例

lsof -i :3000

The classic answer to "something is already using port 3000".

kill -9 $(lsof -ti :3000)

Kill whatever holds that port.

sudo lsof +D /var/log

Find the process keeping a deleted log file open.

看什麼在跑、什麼在吃機器。先弄清是什麼,再決定殺不殺。

怎麼看

  • 方括號 [ ] 表示這部分可以不寫。
  • 省略號 … 表示可以寫多個。
  • 選項區分大小寫——有些命令裡 -r 和 -R 不是一回事。

常見問題

Q. lsof 是做什麼的?

列出所有開啟的檔案和 socket,這就是回答「誰占著 3000 埠」的辦法;不加 sudo 只能看到自己的行程,所以結果為空並不表示埠是空的。

Q. 怎麼寫?

lsof -i :<port> —— 方括號表示可以省略的部分。

Q. 值得記的選項有幾個?

這裡列了 7 個,完整列表在 man lsof。這條命令屬於行程與系統。

相關命令

man 手冊: man lsof