Mac下使用lsof(list open files)來查看端口占用情況,lsof 是一個列出當前系統打開文件的工具。
使用 lsof 會列舉所有占用的端口列表:
$ lsof
使用less可以用於分頁展示,如:
$ lsof | less
也可以使用 -i 查看某個端口是否被占用,如:
$ lsof -i:3000
如果端口被占用,則會返回相關信息,如果沒被占用,則不返回任何信息。
lsof語法格式是:
lsof [options] filename
常用的參數列表:
lsof filename 顯示打開指定文件的所有進程
lsof -a 表示兩個參數都必須滿足時才顯示結果
lsof -c string 顯示command列中包含指定字符的進程所有打開的文件
lsof -u username 顯示所屬user進程打開的文件
lsof -g gid 顯示歸屬gid的進程情況
lsof +d /dir/ 顯示目錄下被進程打開的文件
lsof +d /dir/ 同上,但是會搜索目錄下的所有目錄,時間相對較長
lsof -d fd 顯示指定文件描述符的進程
lsof -n 不將ip轉換為hostname,缺省是不加上-n參數
lsof -i 用以顯示符合條件的進程情況
lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> ipv4 or ipv6
protocol --> tcp or udp
hostname --> internet host name
hostaddr --> ipv4地址
service --> /etc/service中的 service name (可以不只一個)
port --> 端口號 (可以不只一個)
查看所屬root用戶進程所打開的文件類型為txt的文件:
$ lsof -a -u root -d txt
lsof其他的用途:
一、查找誰在使用文件系統
在卸載文件系統時,如果該文件系統中有任何打開的文件,操作通常將會失敗。那么通過lsof可以找出那些進程在使用當前要卸載的文件系統,如下:
# lsof /gtes11/
二、恢復刪除的文件
當linux計算機受到入侵時,常見的情況是日志文件被刪除,以掩蓋攻擊者的蹤跡。管理錯誤也可能導致意外刪除重要的文件,比如在清理舊日志時,意外地刪除了數據庫的活動事務日志。有時可以通過lsof來恢復這些文件。