鍍金池/ 教程/ Linux/ lsof 一切皆文件
進(jìn)程管理工具
objdump 二進(jìn)制文件分析
scp 跨機(jī)遠(yuǎn)程拷貝
crontab 定時(shí)任務(wù)
readelf elf文件格式分析
pstack 跟蹤進(jìn)程棧
系統(tǒng)管理及IPC資源管理
vmstat 監(jiān)視內(nèi)存使用情況
strace 跟蹤進(jìn)程中的系統(tǒng)調(diào)用
sar 找出系統(tǒng)瓶頸的利器
ipcs 查詢進(jìn)程間通信狀態(tài)
ps 進(jìn)程查看器
性能優(yōu)化
wget 文件下載
top linux下的任務(wù)管理器
磁盤管理
size 查看程序內(nèi)存映像大小
free 查詢可用內(nèi)存
文件及目錄管理
iostat 監(jiān)視I/O子系統(tǒng)
性能監(jiān)控
程序構(gòu)建
學(xué)會(huì)使用命令幫助
gdb 調(diào)試?yán)?/span>
網(wǎng)絡(luò)工具
nm 目標(biāo)文件格式分析
lsof 一切皆文件
用戶管理工具
程序調(diào)試
ldd 查看程序依賴庫(kù)
文本處理

lsof 一切皆文件

lsof(list open files)是一個(gè)查看當(dāng)前系統(tǒng)文件的工具。在linux環(huán)境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng)絡(luò)連接和硬件。如傳輸控制協(xié)議 (TCP) 和用戶數(shù)據(jù)報(bào)協(xié)議 (UDP) 套接字等,系統(tǒng)在后臺(tái)都為該應(yīng)用程序分配了一個(gè)文件描述符,該文件描述符提供了大量關(guān)于這個(gè)應(yīng)用程序本身的信息。

lsof打開的文件可以是:

  1. 普通文件
  2. 目錄
  3. 網(wǎng)絡(luò)文件系統(tǒng)的文件
  4. 字符或設(shè)備文件
  5. (函數(shù))共享庫(kù)
  6. 管道,命名管道
  7. 符號(hào)鏈接
  8. 網(wǎng)絡(luò)文件(例如:NFS file、網(wǎng)絡(luò)socket,unix域名socket)
  9. 還有其它類型的文件,等等

命令參數(shù)

  • -a 列出打開文件存在的進(jìn)程
  • -c<進(jìn)程名> 列出指定進(jìn)程所打開的文件
  • -g 列出GID號(hào)進(jìn)程詳情
  • -d<文件號(hào)> 列出占用該文件號(hào)的進(jìn)程
  • +d<目錄> 列出目錄下被打開的文件
  • +D<目錄> 遞歸列出目錄下被打開的文件
  • -n<目錄> 列出使用NFS的文件
  • -i<條件> 列出符合條件的進(jìn)程。(4、6、協(xié)議、:端口、 @ip )
  • -p<進(jìn)程號(hào)> 列出指定進(jìn)程號(hào)所打開的文件
  • -u 列出UID號(hào)進(jìn)程詳情
  • -h 顯示幫助信息
  • -v 顯示版本信息

使用實(shí)例

實(shí)例1:無任何參數(shù)

$lsof| more
COMMAND     PID      USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
init          1      root  cwd       DIR              253,0     4096          2 /
init          1      root  rtd       DIR              253,0     4096          2 /
init          1      root  txt       REG              253,0   150352    1310795 /sbin/init
init          1      root  mem       REG              253,0    65928    5505054 /lib64/libnss_files-2.12.so
init          1      root  mem       REG              253,0  1918016    5521405 /lib64/libc-2.12.so
init          1      root  mem       REG              253,0    93224    5521440 /lib64/libgcc_s-4.4.6-20120305.so.1
init          1      root  mem       REG              253,0    47064    5521407 /lib64/librt-2.12.so
init          1      root  mem       REG              253,0   145720    5521406 /lib64/libpthread-2.12.so
...

說明:

lsof輸出各列信息的意義如下:

  • COMMAND:進(jìn)程的名稱
  • PID:進(jìn)程標(biāo)識(shí)符
  • PPID:父進(jìn)程標(biāo)識(shí)符(需要指定-R參數(shù))
  • USER:進(jìn)程所有者
  • PGID:進(jìn)程所屬組
  • FD:文件描述符,應(yīng)用程序通過文件描述符識(shí)別該文件。如cwd、txt等
    (1)cwd:表示current work dirctory,即:應(yīng)用程序的當(dāng)前工作目錄,這是該應(yīng)用程序啟動(dòng)的目錄,除非它本身對(duì)這個(gè)目錄進(jìn)行更改
    (2)txt :該類型的文件是程序代碼,如應(yīng)用程序二進(jìn)制文件本身或共享庫(kù),如上列表中顯示的 /sbin/init 程序
    (3)lnn:library references (AIX);
    (4)er:FD information error (see NAME column);
    (5)jld:jail directory (FreeBSD);
    (6)ltx:shared library text (code and data);
    (7)mxx :hex memory-mapped type number xx.
    (8)m86:DOS Merge mapped file;
    (9)mem:memory-mapped file;
    (10)mmap:memory-mapped device;
    (11)pd:parent directory;
    (12)rtd:root directory;
    (13)tr:kernel trace file (OpenBSD);
    (14)v86  VP/ix mapped file;
    (15)0:表示標(biāo)準(zhǔn)輸出
    (16)1:表示標(biāo)準(zhǔn)輸入
    (17)2:表示標(biāo)準(zhǔn)錯(cuò)誤
    一般在標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤、標(biāo)準(zhǔn)輸入后還跟著文件狀態(tài)模式:r、w、u等
    (1)u:表示該文件被打開并處于讀取/寫入模式
    (2)r:表示該文件被打開并處于只讀模式
    (3)w:表示該文件被打開并處于
    (4)空格:表示該文件的狀態(tài)模式為unknow,且沒有鎖定
    (5)-:表示該文件的狀態(tài)模式為unknow,且被鎖定
    同時(shí)在文件狀態(tài)模式后面,還跟著相關(guān)的鎖
    (1)N:for a Solaris NFS lock of unknown type;
    (2)r:for read lock on part of the file;
    (3)R:for a read lock on the entire file;
    (4)w:for a write lock on part of the file;(文件的部分寫鎖)
    (5)W:for a write lock on the entire file;(整個(gè)文件的寫鎖)
    (6)u:for a read and write lock of any length;
    (7)U:for a lock of unknown type;
    (8)x:for an SCO OpenServer Xenix lock on part      of the file;
    (9)X:for an SCO OpenServer Xenix lock on the      entire file;
    (10)space:if there is no lock.
  • TYPE:文件類型,如DIR、REG等,常見的文件類型
    (1)DIR:表示目錄
    (2)CHR:表示字符類型
    (3)BLK:塊設(shè)備類型
    (4)UNIX: UNIX 域套接字
    (5)FIFO:先進(jìn)先出 (FIFO) 隊(duì)列
    (6)IPv4:網(wǎng)際協(xié)議 (IP) 套接字
  • DEVICE:指定磁盤的名稱
  • SIZE:文件的大小
  • NODE:索引節(jié)點(diǎn)(文件在磁盤上的標(biāo)識(shí))
  • NAME:打開文件的確切名稱

實(shí)例2:查找某個(gè)文件相關(guān)的進(jìn)程

$lsof /bin/bash
COMMAND     PID USER  FD   TYPE DEVICE SIZE/OFF    NODE NAME
mysqld_sa  2169 root txt    REG  253,0   938736 4587562 /bin/bash
ksmtuned   2334 root txt    REG  253,0   938736 4587562 /bin/bash
bash      20121 root txt    REG  253,0   938736 4587562 /bin/bash

實(shí)例3:列出某個(gè)用戶打開的文件信息

$lsof -u username

-u 選項(xiàng),u是user的縮寫

實(shí)例4:列出某個(gè)程序進(jìn)程所打開的文件信息

$lsof -c mysql

-c 選項(xiàng)將會(huì)列出所有以mysql這個(gè)進(jìn)程開頭的程序的文件,其實(shí)你也可以寫成 lsof | grep mysql, 但是第一種方法明顯比第二種方法要少打幾個(gè)字符;

實(shí)例5:列出某個(gè)用戶以及某個(gè)進(jìn)程所打開的文件信息

$lsof  -u test -c mysql

實(shí)例6:通過某個(gè)進(jìn)程號(hào)顯示該進(jìn)程打開的文件

$lsof -p 11968

實(shí)例7:列出所有的網(wǎng)絡(luò)連接

$lsof -i

實(shí)例8:列出所有tcp 網(wǎng)絡(luò)連接信息

$lsof -i tcp

$lsof -n -i tcp
COMMAND     PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
svnserve  11552 weber    3u  IPv4 3799399      0t0  TCP *:svn (LISTEN)
redis-ser 25501 weber    4u  IPv4  113150      0t0  TCP 127.0.0.1:6379 (LISTEN)

實(shí)例9:列出誰在使用某個(gè)端口

$lsof -i :3306

實(shí)例10:列出某個(gè)用戶的所有活躍的網(wǎng)絡(luò)端口

$lsof -a -u test -i

實(shí)例11:根據(jù)文件描述列出對(duì)應(yīng)的文件信息

$lsof -d description(like 2)

示例

$lsof -d 3 | grep PARSER1
tail      6499 tde    3r   REG    253,3   4514722     417798 /opt/applog/open/log/HOSTPARSER1_ERROR_141217.log.001

說明: 0表示標(biāo)準(zhǔn)輸入,1表示標(biāo)準(zhǔn)輸出,2表示標(biāo)準(zhǔn)錯(cuò)誤,從而可知:所以大多數(shù)應(yīng)用程序所打開的文件的 FD 都是從 3 開始

實(shí)例12:列出被進(jìn)程號(hào)為1234的進(jìn)程所打開的所有IPV4 network files

$lsof -i 4 -a -p 1234

實(shí)例13:列出目前連接主機(jī)nf5260i5-td上端口為:20,21,80相關(guān)的所有文件信息,且每隔3秒重復(fù)執(zhí)行

lsof -i @nf5260i5-td:20,21,80 -r 3