lsof (list open files)是一個列出當前系統打開文件的工具。
在linux系統環境下,任何事物均可以以文件形式存在,經過文件不只能夠訪問常規的數據,還能夠訪問網絡鏈接和硬件。
做用:
用於查看進程開打的文件,打開文件的進程,進程打開的端口(TCP、UDP)。
找回/恢復刪除的文件。是十分方便的系統監視工具,由於 lsof 須要訪問核心內存和各類文件,因此須要root用戶執行。php
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 --> 端口號 (能夠不僅一個)
COMMAND:進程的名稱 PID:進程標識符 PPID:父進程標識符(須要指定-R參數) USER:進程全部者 FD:文件描述符,應用程序經過文件描述符識別該文件。如cwd、txt等 cwd:表示current work dirctory,即:應用程序的當前工做目錄,這是該應用程序啓動的目錄 txt :該類型的文件是程序代碼,如應用程序二進制文件自己或共享庫,如上列表中顯示的 /sbin/init 程序 lnn:library references (AIX); er:FD information error (see NAME column); jld:jail directory (FreeBSD); ltx:shared library text (code and data); mxx :hex memory-mapped type number xx. m86:DOS Merge mapped file; mem:memory-mapped file; mmap:memory-mapped device; pd:parent directory; rtd:root directory; tr:kernel trace file (OpenBSD); v86 VP/ix mapped file; 0:表示標準輸出 1:表示標準輸入 2:表示標準錯誤 通常在標準輸出、標準錯誤、標準輸入後還跟着文件狀態模式:r、w、u等 u:表示該文件被打開並處於讀取/寫入模式 r:表示該文件被打開並處於只讀模式 w:表示該文件被打開並處於 空格:表示該文件的狀態模式爲unknow,且沒有鎖定 -:表示該文件的狀態模式爲unknow,且被鎖定 同時在文件狀態模式後面,還跟着相關的鎖 N:for a Solaris NFS lock of unknown type; r:for read lock on part of the file; R:for a read lock on the entire file; w:for a write lock on part of the file;(文件的部分寫鎖) W:for a write lock on the entire file;(整個文件的寫鎖) u:for a read and write lock of any length; U:for a lock of unknown type; x:for an SCO OpenServer Xenix lock on part of the file; X:for an SCO OpenServer Xenix lock on the entire file; space:if there is no lock. TYPE:文件類型,如DIR、REG等,常見的文件類型 DIR:表示目錄 CHR:表示字符類型 BLK:塊設備類型 UNIX: UNIX 域套接字 FIFO:先進先出 (FIFO) 隊列 IPv4:網際協議 (IP) 套接字 IPv6:網際協議 (IP) 套接字 DEVICE:指定磁盤的名稱 SIZE:文件的大小 NODE:索引節點(文件在磁盤上的標識) NAME:打開文件的確切名稱
lsof /usr/sbin/sshd
lsof -i :22
lsof -c php-fpm # 列出多個程序多打開的文件信息 lsof -c mysql -c apache
備註: -c 選項將會列出全部以mysql開頭的程序的文件,其實你也能夠寫成lsof | grep mysql,可是第一種方法明顯比第二種方法要少打幾個字符了mysql
lsof -p 48 # 多個進程號 lsof -p 123,456,789 # 列出除了某個進程號,其餘進程號所打開的文件信 lsof -p ^1
lsof -g 48
lsof +d /etc/php7
lsof + /etc/php7
lsof -i udp:55 lsof -i tcp:80
語法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]linux
46 --> IPv4 or IPv6 protocol --> TCP or UDP hostname --> Internet host name hostaddr --> IPv4位置 service --> /etc/service中的 service name (能夠不僅一個) port --> 端口號 (能夠不僅一個)
示例sql
➜ ~ lsof -i tcp@10.211.55.25:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 11616 chenqionghe 3u IPv4 0xb8e5e478b3aae4f 0t0 TCP 10.211.55.2:56920->10.211.55.25:ssh (ESTABLISHED) ssh 12247 chenqionghe 3u IPv4 0xb8e5e479f3fc4cf 0t0 TCP 10.211.55.2:58373->10.211.55.25:ssh (ESTABLISHED) ssh 19270 chenqionghe 3u IPv4 0xb8e5e478b8dfb4f 0t0 TCP 10.211.55.2:62505->10.211.55.25:ssh (ESTABLISHED) ssh 19465 chenqionghe 3u IPv4 0xb8e5e478b3a91cf 0t0 TCP 10.211.55.2:62569->10.211.55.25:ssh (ESTABLISHED) ssh 66699 chenqionghe 3u IPv4 0xb8e5e478c7a41cf 0t0 TCP 10.211.55.2:61433->10.211.55.25:ssh (ESTABLISHED) ssh 66842 chenqionghe 3u IPv4 0xb8e5e479c9637cf 0t0 TCP 10.211.55.2:61434->10.211.55.25:ssh (ESTABLISHED)
lsof -u php 或 lsof -u 0
lsof -tc sshd
lsof -d 2-3