You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
6.1 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# **lsof**
## 说明
**lsof命令** 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监
视工具因为lsof命令需要访问核心内存和各种文件所以需要root用户执行
在linux环境下任何事物都以文件的形式存在通过文件不仅仅可以访问常规数据还可以访问网络连接和硬件。所以如传输控制协议
(TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描
述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信
因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的
```markdown
-a列出打开文件存在的进程
-c<进程名>:列出指定进程所打开的文件
-g列出GID号进程详情
-d<文件号>:列出占用该文件号的进程
+d<目录>:列出目录下被打开的文件
+D<目录>:递归列出目录下被打开的文件
-n<目录>列出使用NFS的文件
-i<条件>列出符合条件的进程。4、6、协议、:端口、 @ip
-p<进程号>:列出指定进程号所打开的文件
-u列出UID号进程详情
usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
-?|-h list help -a AND selections (OR) -b avoid kernel blocks
-c c cmd c ^c /c/[bix] +c w COMMAND width (9) +d s dir s files
-d s select by FD set +D D dir D tree *SLOW?* +|-e s exempt s *RISKY*
-i select IPv[46] files -K list tasKs (threads) -l list UID numbers
-n no host names -N select NFS files -o list file offset
-O no overhead *RISKY* -P no port names -R list paRent PID
-s list file size -t terse listing -T disable TCP/TPI info
-U select Unix socket -v list version info -V verbose search
+|-w Warnings (+) -X skip TCP&UDP* files -Z Z context [Z]
-- end option scan
+f|-f +filesystem or -file names +|-f[gG] flaGs
-F [f] select fields; -F? for help
+|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
+m [m] use|create mount supplement
+|-M portMap registration (-) -o o o 0t offset digits (8)
-p s exclude(^)|select PIDs -S [t] t second stat timeout (15)
-T qs TCP/TPI Q,St (s) info
-g [s] exclude(^)|select and print process group IDs
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
+|-r [t[m<fmt>]] repeat every t seconds (15); + until no files, - forever.
An optional suffix to t is m<fmt>; m must separate t from <fmt> and
<fmt> is an strftime(3) format for the marker line.
-s p:s exclude(^)|select protocol (p = TCP|UDP) states by name(s).
-u s exclude(^)|select login|UID set s
-x [fl] cross over +d|+D File systems or symbolic Links
names select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.
```
## 详解
lsof输出各列信息的意义如下:
* COMMAND进程的名称
* PID进程标识符
* PPID父进程标识符需要指定-R参数
* USER进程所有者
* PGID进程所属组
* FD文件描述符应用程序通过文件描述符识别该文件
文件描述符列表:
* cwd表示current work dirctory应用程序的当前工作目录这是该应用程序启动的目录除非它本身对这个目录进行更改
* txt该类型的文件是程序代码如应用程序二进制文件本身或共享库如上列表中显示的 /sbin/init 程序
* lnnlibrary references (AIX);
* erFD information error (see NAME column);
* jldjail directory (FreeBSD);
* ltxshared library text (code and data);
* mxx hex memory-mapped type number xx.
* m86DOS Merge mapped file;
* memmemory-mapped file;
* mmapmemory-mapped device;
* pdparent directory;
* rtdroot directory;
* trkernel trace file (OpenBSD);
* v86  VP/ix mapped file;
* 0表示标准输出
* 1表示标准输入
* 2表示标准错误
一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
* u表示该文件被打开并处于读取/写入模式
* r表示该文件被打开并处于只读模式
* w表示该文件被打开并处于
* 空格表示该文件的状态模式为unknow且没有锁定
* -表示该文件的状态模式为unknow且被锁定
同时在文件状态模式后面,还跟着相关的锁:
* Nfor a Solaris NFS lock of unknown type;
* rfor read lock on part of the file;
* Rfor a read lock on the entire file;
* wfor a write lock on part of the file;(文件的部分写锁)
* Wfor a write lock on the entire file;(整个文件的写锁)
* ufor a read and write lock of any length;
* Ufor a lock of unknown type;
* xfor an SCO OpenServer Xenix lock on part      of the file;
* Xfor an SCO OpenServer Xenix lock on the      entire file;
* spaceif there is no lock.
文件类型:
* DIR表示目录
* CHR表示字符类型
* BLK块设备类型
* UNIX UNIX 域套接字
* FIFO先进先出 (FIFO) 队列
* IPv4网际协议 (IP) 套接字
* DEVICE指定磁盘的名称
* SIZE文件的大小
* NODE索引节点文件在磁盘上的标识
* NAME打开文件的确切名称
## 实例
```bash
lsof -i # 列出所有的网络连接或端口
lsof ~ # 查看打开用户目录的进程
lsof -i :80|grep -v "PID"|awk '{print "kill -9",$2}'|sh # 杀掉80端口相关的进程
```