您的位置:首页 > 其它

lsof命令介绍及用法

2016-04-14 00:00 435 查看
Linux下一切皆文件,lsof(lists openfiles)是一个列出当前系统打开文件的工具.文件可以是:
普通文件
目录
网络文件系统的文件
字符或设备文件
(函数)共享库
管道,命名管道
符号链接
网络文件(例如:NFS file、网络socket,unix域名socket)
还有其它类型的文件,等等


lsof常见参数如下:
-a 列出打开文件存在的进程
-c<进程名> 列出指定进程所打开的文件
-g 列出GID号进程详情
-d<文件号> 列出占用该文件号的进程
+d<目录> 列出目录下被打开的文件
+D<目录> 递归列出目录下被打开的文件
-n<目录> 列出使用NFS的文件
-i<条件> 列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号> 列出指定进程号所打开的文件
-u 列出UID号进程详情


lsof输出格式
mckee@mckee-pc ~/program/go/src/sharedlogic (release) $ sudo lsof | more
COMMAND     PID   TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init          1             root  cwd       DIR                8,3      4096          2 /
init          1             root  rtd       DIR                8,3      4096          2 /
init          1             root  txt       REG                8,3    265848    5767246 /sbin/init
init          1             root  mem       REG                8,3     47712    4985141 /lib/x86_64-linux-gnu/libnss_files-2.19.so
init          1             root  mem       REG                8,3     47760    4985151 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
init          1             root  mem       REG                8,3     97296    4985135 /lib/x86_64-linux-gnu/libnsl-2.19.so
init          1             root  mem       REG                8,3     39824    4985137 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
init          1             root  mem       REG                8,3     14664    4985082 /lib/x86_64-linux-gnu/libdl-2.19.so


lsof输出各列信息说明:
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等
TYPE:文件类型,如DIR、REG等,常见的文件类型:DIR:表示目录/CHR:表示字符类型/BLK:块设备类型/UNIX: UNIX 域套接字/FIFO:先进先出 (FIFO) 队列/IPv4:网际协议 (IP) 套接字
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称


lsof部分示例
(1)显示开启某个文件的进程
[root@mckee ~]# lsof /var/go/logs/access.log
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
blog    4801 root    4u   REG    3,1       41 132106 /var/go/logs/access.log


(2)显示某端口正在运行的程序
[root@mckee ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  1605 mysql   11u  IPv4   5143      0t0  TCP *:mysql (LISTEN)


(3)显示某个进程名正在打开的文件
[root@mckee ~]# lsof -c mysqld
COMMAND    PID  USER   FD   TYPE             DEVICE  SIZE/OFF    NODE NAME
mysqld_sa 1523  root  cwd    DIR                3,1      4096       2 /
mysqld_sa 1523  root  rtd    DIR                3,1      4096       2 /
mysqld_sa 1523  root  txt    REG                3,1    801816 4292633 /bin/bash
mysqld_sa 1523  root  mem    REG                3,1    144776 3375150 /lib64/ld-2.5.so
......


(4)显示某个进程号的进程打开了哪些文件
[root@mckee ~]# lsof -p 4801
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF     NODE NAME
blog    4801 root  cwd    DIR      3,1     4096   131242 /var/go
blog    4801 root  rtd    DIR      3,1     4096        2 /
blog    4801 root  txt    REG      3,1 11082256   132135 /var/go/blog
......


(5)显示某个用户正在打开的文件
[root@mckee ~]# lsof -u mysql
COMMAND  PID  USER   FD   TYPE             DEVICE  SIZE/OFF     NODE NAME
mysqld  1605 mysql  cwd    DIR                3,1      4096   196613 /var/lib/mysql
mysqld  1605 mysql  rtd    DIR                3,1      4096        2 /
mysqld  1605 mysql  txt    REG                3,1   7744280  2961215 /usr/libexec/mysqld
......


(6)打印进程号
[root@mckee ~]# lsof -tc sshd
1453
19954


(7)列出所有tcp连接信息
[root@mckee ~]# lsof -i tcp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: