赞
踩
运维人员不仅要熟悉操作系统、服务器、网络等只是,甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作,持续给大家更新运维工作所需要接触到的知识点,希望大家喜欢。
今天我们要讲的是 Lsof 命令。
lsof 是 Linux 下的一个非常实用的系统级的监控、诊断工具,它的功能非常强大。它的意思是 List Open Files,字面意思是“打开文件列表“。我们知道,linux 下 “一切皆文件”,所以lsof的作用就显而易见了,它可以用来列出被各种进程打开的文件信息。
lsof [选项] [绝对路径的文件名]
因为权限等原因,建议使用root用户执行该命令,可以看到全面的信息。
相关参数:
参数 | 说明 |
-a | 列出打开文件存在的进程 |
-c<进程名> | 列出指定进程所打开的文件 |
-g | 列出GID号进程详情 |
-d<文件号> | 列出占用该文件号的进程 |
+d<目录> | 列出目录下被打开的文件 |
+D<目录> | 递归列出目录下被打开的文件 |
-n<目录> | 列出使用NFS的文件 |
-i<条件> | 列出符合条件的进程(协议,:端口,@ip) |
-p<进程号> | 列出指定进程号所打开的文件 |
-u | 列出UID号进程详情 |
-h | 显示帮助信息 |
-v | 显示版本信息 |
示例:
- $ lsof
- command PID USER FD type DEVICE SIZE NODE NAME
- init 1 root cwd DIR 8,2 4096 2 /
- init 1 root rtd DIR 8,2 4096 2 /
- init 1 root txt REG 8,2 43496 6121706 /sbin/init
- init 1 root mem REG 8,2 143600 7823908 /lib64/ld-2.5.so
- init 1 root mem REG 8,2 1722304 7823915 /lib64/libc-2.5.so
- init 1 root mem REG 8,2 23360 7823919 /lib64/libdl-2.5.so
- init 1 root mem REG 8,2 95464 7824116 /lib64/libselinux.so.1
- init 1 root mem REG 8,2 247496 7823947 /lib64/libsepol.so.1
- init 1 root 10u FIFO 0,17 1233 /dev/initctl
- migration 2 root cwd DIR 8,2 4096 2 /
- migration 2 root rtd DIR 8,2 4096 2 /
- migration 2 root txt unknown /proc/2/exe
上述每一列的意思如下:
列名 | 说明 |
COMMAND | 进程名称 |
PID | 进程标识符 |
USER | 进程所有者 |
FD | 文件描述符,应用程序通过它识别到该文件,如cwd、txt等 |
TYPE | 文件类型,如DIR,REG |
DEVICE | 指定磁盘名称 |
SIZE | 文件大小 |
NODE | 索引节点(文件在磁盘上的标识) |
NAME | 打开文件的确切名称 |
一般在标准输出/输入/错误后还跟着文件状态模式。
文件状态 | 说明 |
u | 表示该文件被打开并处于读取/写入模式 |
r | 表示该文件被打开并处于只读模式 |
w | 表示该文件被打开并处于写入模式 |
空格 | 表示该文件的状态模式为 unknow,且没有锁定 |
- | 表示该文件的状态模式为 unknow,且被锁定 |
一般在文件状态模式后面,还跟着相关的锁。
参数 | 说明 |
N | 对于未知类型的Solaris NFS锁 |
r | 用于部分文件的读取锁定 |
R | 对整个文件进行读取锁定 |
w | 对文件的一部分进行写锁定(文件的部分写锁) |
W | 对整个文件进行写锁定(整个文件的写锁) |
u | 用于任何长度的读写锁 |
U | 对于未知类型的锁 |
x | 对于文件部分的SCO OpenServer Xenix锁 |
X | 对于整个文件的SCO OpenServer Xenix锁 |
space | 如果没有锁 |
类型 | 说明 |
DIR | 表示目录 |
CHR | 表示字符类型 |
BLK | 块设备类型 |
UNIX | UNIX 域套接字 |
FIFO | 先进先出 (FIFO) 队列 |
IPv4 | 网际协议 (IP) 套接字 |
DEVICE | 指定磁盘的名称 |
SIZE | 文件的大小 |
NODE | 索引节点(文件在磁盘上的标识) |
NAME | 打开文件的确切名称 |
REG | 常规文件 |
- $ lsof -u test
- $ lsof -u test -u ubuntu
- $ lsof -i -u ^root # 特定用户除外
- $ lsof /var/log/messages
- $ lsof /etc/passwd
- $ lsof +D /var/log # 在目录内,对应目录下的所有子目录和文件都会被列出
- $ lsof -i :8080
- $ lsof -i :80 -i :22
- $ lsof -i TCP:22
- $ lsof -i TCP:1-1024
- $ lsof -i UDP
- $ lsof -i @192.168.1.11
- $ lsof -i 4 # 仅 IPv4
- $ lsof -i 6 # 仅 IPv6
- $ lsof -c mysql
- $ lsof -c java
- $ lsof -c ssh
- $ lsof -c nginx
- $ lsof -c ssh -c httpd
- $ lsof -p 1753
- $ lsof -p ^3 # 除了某些pid
-c 选项将会列出所有以mysql这个进程开头的程序的文件
- $ lsof -p $pid # 列出指定进程号所打开的文件
- $ lsof $filename # 列出打开文件的进程
- $ lsof -i:9981 -P -t -sTCP:LISTEN # 获取端口对应的进程 ID
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。