linux中lsof命令介绍及用法

因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。

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

时间: 2024-09-21 00:06:39

linux中lsof命令介绍及用法的相关文章

linux中lsof命令的用法

Lsof是遵从Unix哲学的典范,它只做一件事情,并且做的相当完美.以列出某个进程打开的所有文件信息.打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,符号链接,Socket流,网络Socket,UNIX域Socket,以及其它. 在UNIX环境中,文件无处不在,这便产生了一句格言:"任何事物都是文件".通过文件不仅仅可以访问常规数据,通常还可以访问网络连接和硬件.在有些情况下,当您使用ls 请求目录清单时,将出现相应的条目.在其他情况下,如传输控制协议

linux中lsof命令详解

lsof在linux中是一个很重要的命令,这里简单记录一下. 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口.因为应用程序打开文件的描述符列表提供了大量关于

Linux中tail命令用法详解_Linux

tail命令也是一个非常常用的文件查看类的命令,今天就为大家介绍下Linux tail命令的用法. 更多Linux命令详情请看:Linux命令速查手册 Linux tail命令主要用来从指定点开始将文件写到标准输出.很多人喜欢使用tail –f 来监控日志文件. 一.Linux tail命令格式 Linux tail命令 格式如下所示 tail [OPTION]... [FILE]... Linux tail命令 参数如下所示 -f 循环读取 -q 不显示处理信息 -v 显示详细的处理信息 -c

linux中cat命令的用法

今天需要用cat查看文件,无奈忘记如何使用,于是整理了一下 linux中cat命令的用法:  1.用cat命令查看文件:$ cat file1;  $ cat -n file1:在查看的时候加上行号: cat命令还可以使用通配符:$ cat -n file*,把所有的file文件都显示出来(顺序显示)  也可以这样:$ cat -n file1 file2 file3 ;结果用通配符输出结果是完全一样的  2.合并文件 可以用cat命令和重定向操作符(>>)来合并文件: $ cat file*

linux中ln命令的-T参数作用

问题描述 linux中ln命令的-T参数作用 我用man ln命令查看用法,其中对-T参数的解释是 -T, --no-target-directory treat LINK_NAME as a normal file 不明白它的意思,请大家可否举例说明下什么时候才会用到这个参数 解决方案 将链接名当作普通文件(在对目录进行符号链接时要用到此选项) 解决方案二: 我尝试在本目录下ln -s ../ link_a 和 ln -s -T ../ link_b,然后再用ls -al查看link_a和li

Linux中grep命令的12个实践例子

你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具.无论何种原因,如果你的系统没有预装它的话,你可以很容易的通过系统的包管理器来安装它(Debian/Ubuntu系中的apt-get和RHEl/CentOS/Fedora系中的yum). $ sudo apt-get install grep #Debian/Ubuntu $ sudo yum install grep #RH

linux下echo命令的奇怪用法

问题描述 linux下echo命令的奇怪用法 echo ""this is rs1 super secret key"" > /data/key/r0这段话是什么意思啊,后面跟的竟然是一个路径,而不是路径下的某一个文件?? 解决方案 /data/key/r0 在linux代表的是绝对路径,你echo这句话是把这句话写到了key目录下的r0这个文件中 echo ""this is rs1 super secret key""

详解Linux中vi命令大全_linux shell

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于 对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它.Vi也是Linux中最基本的文本编 辑器,学会它后,您将在Linux的世界里畅行无阻. vi的基本概念 基本上vi可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line m

linux中grep命令的使用

  linux中grep命令的使用 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Pr