`
mactonish
  • 浏览: 17284 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
社区版块
存档分类
最新评论

转 lsof

阅读更多
转http://wowubuntu.com/lsof.html

Unix 调试的瑞士军刀:lsof
23六 
2011
# 作者: 投稿/转载 / 本文采用CC BY-NC-SA 2.5协议授权,转载请注明本文链接。

本文转载自黑客志 (这是一个多人协作的群体Blog,旨在为国内开发者提供新鲜和高质量的黑客文章,文章主要来源为 Hacker News。)
原文地址:Unix调试的瑞士军刀:lsof / 原作者: @Yuanyi Zhang
这是“你应该知道的Unix和Linux命令”系列的第三篇,在这篇文章中,我会介绍lsof这个工具,如果说netcat是进行网络诊断的瑞士军刀,那么 lsof 就是 Unix 调试的瑞士军刀。
Lsof 是遵从Unix 哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所有文件信息。打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,明明管道,符号链接,Socket流,网络Socket,UNIX域Socket,以及其它更多。因为Unix系统中几乎所有东西都是文件,你可以想象lsof该有多有用。
你可以看看这系列文章第一篇对pipe viewer的介绍,如果你对这篇文章感兴趣,那你应该订阅我的RSS Feed(译者注:也别忘了订阅黑客志  。
如何使用lsof?
这篇文章中我会尽力列举我能想到的所有lsof的用法,让我们先从最简单的开始(或许你已经知道了),然后逐渐增加复杂度:
列出所有打开的文件
# lsof
不带任何参数运行lsof会列出所有进程打开的所有文件。
找出谁在使用某个文件
# lsof /path/to/file
只需要执行文件的路径,lsof就会列出所有使用这个文件的进程,你也可以列出多个文件,lsof会列出所有使用这些文件的进程。
你也可以一次制定多个文件:
# lsof /path/to/file1 /path/to/file2
递归查找某个目录中所有打开的文件
# lsof +D /usr/lib
加上+D参数,lsof会对指定目录进行递归查找,注意这个参数要比grep版本慢:
# lsof | grep ‘/usr/lib’
之所以慢是因为+D首先查找所有的文件,然后一次性输出。
列出某个用户打开的所有文件
# lsof -u pkrumins
-u选项限定只列出所有被用户pkrumins打开的文件,你可以通过逗号指定多个用户:
# lsof -u rms,root
这条命令会列出所有rms和root用户打开的文件。
你也可以像下面这样使用多个-u做同样的事情:
# lsof -u rms -u root
查找某个程序打开的所有文件
# lsof -c apache
-c选项限定只列出以apache开头的进程打开的文件:
所以你可以不用像下面这样写:
# lsof | grep foo
而使用下面这个更简短的版本:
# lsof -c foo
事实上,你可以只制定进程名称的开头:
# lsof -c apa
这会列出所有以apa开头的进程打开的文件
你同样可以制定多个-c参数:
# lsof -c apache -c python
这会列出所有由apache和python打开的文件
列出所有由某个用户或某个进程打开的文件
# lsof -u pkrumins -c apache
你也可以组合使用多个选项,这些选项默认进行或关联,也就是说上面的命令会输入由pkrumins用户或是apache进程打开的文件。
列出所有由一个用户与某个进程打开的文件
# lsof -a -u pkrumins -c bash
-a参数可以将多个选项的组合条件由或变为与,上面的命令会显示所有由pkrumins用户以及bash进程打开的文件。
列出除root用户外的所有用户打开的文件
# lsof -u ^root
注意root前面的^符号,它执行取反操作,因此lsof会列出所有root用户之外的用户打开的文件。
列出所有由某个PID对应的进程打开的文件
# lsof -p 1
-p选项让你可以使用进程id来过滤输出。
记住你也可以用都好来分离多个pid。
# lsof -p 450,980,333
列出所有进程打开的文件除了某个pid的
# lsof -p ^1
同前面的用户一样,你也可以对-p选项使用^来进行取反。
列出所有网络连接
# lsof -i
lsof的-i选项可以列出所有打开了网络套接字(TCP和UDP)的进程。
列出所有TCP网络连接
# lsof -i tcp
也可以为-i选项加上参数,比如tcp,tcp选项会强制lsof只列出打开TCP sockets的进程。
列出所有UDP网络连接
# lsof -i udp
同样udp让lsof只列出使用UDP socket的进程。
找到使用某个端口的进程
# lsof -i :25
:25和-i选项组合可以让lsof列出占用TCP或UDP的25端口的进程。
你也可以使用/etc/services中制定的端口名称来代替端口号,比如:
# lsof -i :smtp
找到使用某个udp端口号的进程
# lsof -i udp:53
同样的,也可以找到使用某个tcp端口的进程:
# lsof -i tcp:80
找到某个用户的所有网络连接
# lsof -a -u hacker -i
使用-a将-u和-i选项组合可以让lsof列出某个用户的所有网络行为。
列出所有NFS(网络文件系统)文件
# lsof -N
这个参数很好记,-N就对应NFS。
列出所有UNIX域Socket文件
# lsof -U
这个选项也很好记,-U就对应UNIX。
列出所有对应某个组id的进程
# lsof -g 1234
进程组用来来逻辑上对进程进行分组,这个例子查找所有PGID为1234的进程打开的文件。
列出所有与某个描述符关联的文件
# lsof -d 2
这个命令会列出所有以描述符2打开的文件。
你也可以为描述符指定一个范围:
# lsof -d 0-2
这会列出所有描述符为0,1,2的文件。
-d选项还支持其它很多特殊值,下面的命令列出所有内存映射文件:
# lsof -d mem
txt则列出所有加载在内存中并正在执行的进程:
# lsof -d txt
输出使用某些资源的进程pid
# lsof -t -i
-t选项输出进程的PID,你可以将它和-i选项组合输出使用某个端口的进程的PID,下面的命令将会杀掉所有使用网络的进程:
# kill -9 `lsof -t -i`
循环列出文件
# lsof -r 1
-r选项让lsof可以循环列出文件直到被中断,参数1的意思是每秒钟重复打印一次,这个选项最好同某个范围比较小的查询组合使用,比如用来监测网络活动:
# lsof -r 1 -u john -i -a
如何安装lsof?
许多Unix系统都内置了lsof,如果你的系统没有安装,你可以从这里直接下载源代码。
BSD系统有一个类似的工具可以做同样的事情,叫做fstat。
你可以通过man lsof来了解关于lsof的完整文档,或者通过lsof -h查看。
开始体验lsof的乐趣吧!
分享到:
评论

相关推荐

    Python-python版本的lsof到graphviz解析器

    【Python-lsof到Graphviz解析器】 在IT行业中,我们经常需要监控和理解系统资源的使用情况,其中`lsof (List Open Files)`是一个非常实用的命令行工具,它能够显示当前系统中打开文件的相关信息,如进程ID、用户、...

    linux lsof命令详解及实例

    **Linux lsof命令详解** lsof是一个强大的系统监控工具,它能列出当前系统中所有正在被进程打开的文件。在Linux系统中,一切皆为文件,包括网络连接、硬件设备等。lsof通过文件描述符来跟踪这些资源,帮助用户了解...

    自动化离线部署linux开发必备环境

    这些工具和服务包括编译器(gcc、g++)、远程登录(telnet)、文件传输(rzsz)、压缩与解压工具(zip、unzip)、系统监控(lsof)、安全通信库(openssl)、文件下载(wget)、文本编辑器(vim)、Java运行时(jdk8...

    Built for Clouds - Oracle Solaris 11 and SPARC

    ### Oracle Solaris 11 和 SPARC:专为云端打造 #### 一、概述 《Built for Clouds - Oracle Solaris 11 and SPARC》这篇文章主要介绍了Oracle Solaris 11操作系统及其与SPARC处理器架构相结合,在云计算环境中的...

    JODConverter连接OpenOffice服务问题

    3. 检查服务是否已监听指定端口(默认为8100),可以通过网络工具如`netstat`或`lsof`来验证。 接下来,配置JODConverter: 1. 添加JODConverter库到项目中,可通过Maven或Gradle添加依赖。 2. 设置OpenOffice的...

    linux常用命令笔记.doc

    抓包、lsof诊断工具、ps工具标识进程的5种状态码、显示进程树、服务、Ftp服务、常用快捷键、字符设置和文件格式转换、配置防火墙、apt 软件工具 (Debian, Ubuntu 以及类似系统) 、deb 包 (Debian, Ubuntu 以及类似...

    常用linux命名rpm包

    5. **lsof**:列出打开文件的命令,它可以显示当前系统中所有打开文件的进程信息,包括进程ID、进程名称、打开的文件名等。lsof在查找占用特定文件或端口的进程时特别有用。 这些命令在RPM包中打包,使得用户可以...

    显示进程的磁盘IO操作

    1. **`lsof -p pid`**:`lsof`(List Open Files)是一个强大的命令行工具,用于查看当前系统中打开的文件和进程。通过`-p pid`参数,我们可以指定进程ID,从而查看该进程正在访问的所有文件,包括读写的磁盘文件。这...

    Linux命令行技术大全.pdf 高清带书签

    11. **系统日志与调试**:介绍`dmesg`、`logrotate`、`strace`、`lsof`等工具,用于查看系统日志、跟踪程序执行和诊断问题。 本书通过丰富的实例和详尽的解释,旨在帮助读者从初学者到熟练掌握Linux命令行,提升在...

    linux 教程大全

    这部分教程可能会讲解如何使用工具如top、htop、strace、lsof等来监控和诊断系统,以及如何使用Ansible、Docker、Kubernetes等现代技术进行自动化部署和管理。 总的来说,这个Linux教程大全提供了从入门到精通的...

    linux命令学习

    25. **lsof -i :端口**: 根据端口号查看正在使用该端口的进程。 26. **pwd**: 显示当前工作目录。 27. **cp**: 复制文件或目录。常用选项有 `-b`(备份),`-f`(强制),`-i`(询问),`-p`(保留属性),`-r`...

    apiRecord:本地代理监听http协议,并录制转成符合接口规范的代码,辅助接口测试代码编写

    apiRecord本地代理监听http协议,并录制转成符合接口规范的代码,辅助接口测试代码编写如果报端口被占用,进行下面操作:终端输入:lsof -i tcp:port 将port换成被占用的端口(如:8086、9998)将会出现占用端口的进程...

    IRQ_GPIO.tar.gz_GPIO linux

    6. 调试技巧:使用dmesg命令查看内核日志,利用gdb进行内核调试,以及使用strace、lsof等工具分析用户空间进程的行为。 压缩包中的"IRQ_GPIO"可能包含以下内容: - 驱动源代码:实现GPIO到中断转换的C语言代码,...

    fast-api-dev-v1:玩快速api

    sqlalchemy的注意事项在main.py中,有两个函数可以打开和关闭与...test:latest星空不适用于版本14.2,但适用于13.8检查正在运行的API 转到招摇ReDoc检查端口上运行的应用程序并终止lsof -i tcp:8000 kill -9 < PI

    Bash工具指南.pdf

    lsof是一个列出当前系统打开文件的工具,可以用于监控文件、目录、网络连接等资源的使用情况。lsof支持监控指定的文件、目录、描述符、命令程序、用户组以及网络连接等。 tc是一个Linux下的流量控制工具,可以用来...

    java秋招总结--个人面经总结贴腾讯.pdf

    6. Linux命令:面试中可能会问及对Linux操作系统的使用经验,包括一些基础和高级命令,如查看进程监听端口的命令(例如netstat或lsof)。 7. Java源代码转换成机器码的过程:这一问题涉及到Java的编译过程,包括...

    轻松学会linux系统

    15. **故障排查**:学习使用`dmesg`查看系统消息,`strace`跟踪系统调用,`lsof`查看打开文件,以及`syslog`日志系统。 通过以上知识点的学习和实践,你将在一周内建立起对Linux系统的全面理解和操作能力。不断地...

    liunx运维优化

    - 使用lsof命令可以查看占用特定端口的进程,例如查看8080端口的进程:`lsof -i:8080`。 八、Apache工作模式及模块查看 - Apache服务器有两种工作模式:prefork和worker。prefork模式基于多进程,每个进程处理一个...

    Linux-guide

    列出所有打开的端口lsof -nPi | grep LISTEN 杀死港口杀死-9'PID号' Unix功能 查找UNIX应用程序的完整路径哪个“应用程序名称(ssh,scp等)” 显示与文件系统有关的信息df -h 档案文件 检查当前目录路径密码更改...

Global site tag (gtag.js) - Google Analytics