Linux 终极神器 lsof:从青铜到王者的修炼手册
各位看官,今天咱们要聊的这位主角,可是Linux江湖中鼎鼎大名的「文件侦探」——lsof(全称 List Open Files)。这货就像系统里的007,能扒出所有进程的小秘密,无论是偷偷占用端口的“卧底”,还是藏在角落的“隐藏文件”,统统无所遁形。不过别被它高冷的名字唬住,这篇文章会带你从青铜段位一路飙升到王者,用最接地气的方式解锁它的超能力。
一、初入江湖:基础操作请接招
1. 系统级“天眼通”
lsof
这招一出,系统里所有打开的文件、端口、套接字都会被一网打尽。不过新手慎用,输出信息量堪比“银河补习班”,建议搭配| less
食用,防止被数据洪流淹没。
2. 精准狙击:按用户/进程抓人
lsof -u daniel # 查查用户daniel在搞什么鬼
lsof -c sshd # 揪出所有和sshd进程相关的文件
想象一下,你是网管,发现服务器变慢了,用这俩命令就能迅速定位到“摸鱼”的用户或进程,堪称职场反内卷神器。
3. 端口侦探:谁在占用80端口?
lsof -i :80
这招专治“端口被占用”的疑难杂症。比如你启动Web服务失败,用它就能揪出罪魁祸首,然后kill -9
送它一程。
二、进阶秘籍:组合技才是王道
1. 网络特工:追踪特定连接
lsof -u daniel -i @1.1.1.1 # 查看daniel和1.1.1.1的所有通信
这招就像给网络连接装了GPS,能精准定位到某个用户与特定IP的“秘密交易”。
2. 隐藏文件猎手
lsof +L1 # 查找链接数小于1的文件(通常是被删除但未关闭的文件)
这可是安全审计的大杀器!攻击者常用这招隐藏后门,而你只需一行命令就能让它们原形毕露。
3. 批量操作:一键杀进程
kill -HUP `lsof -t -c sshd` # 优雅重启sshd服务
-t
参数会只输出进程ID,配合kill
命令,瞬间完成“无接触式”操作。
三、高阶玩法:让lsof飞起来
1. 文件系统“CT扫描”
lsof +d /var/log # 查看/var/log目录下所有被打开的文件
lsof +D /usr/local # 递归扫描子目录(耗时较长,建议喝杯咖啡等结果)
当你想卸载某个文件系统却被告知“忙”时,这招能帮你揪出幕后黑手。
2. 网络端口“透视眼”
lsof -i @fw.google.com:2150-2180 # 查看与Google服务器2150-2180端口的连接
想知道你的服务器在偷偷和谁“煲电话粥”?这招让所有网络连接无所遁形。
3. 内存侦探:扒开进程的内存秘密
lsof -d mem # 查看所有内存映射文件
这招适合调试内存泄漏问题,让你看清进程到底在内存里藏了什么宝贝。
四、防坑指南:这些雷区要绕行
- 选项组合的魔法:默认情况下,多个选项是“或”关系,想“且”的话得加
-a
。比如lsof -u daniel -c sshd
会显示daniel的所有文件或sshd的所有文件,而lsof -a -u daniel -c sshd
才是同时满足两个条件。 - 权限问题:很多功能需要root权限,不然会看到一堆
permission denied
。 - 性能陷阱:不加过滤的
lsof
会扫描整个系统,可能导致短暂卡顿,建议搭配过滤条件使用。
五、王者段位:lsof+X的化学反应
- lsof + grep:用
lsof | grep "txt"
快速过滤出文本文件。 - lsof + awk:用
lsof -i | awk '{print $9}'
提取端口号。 - lsof + cron:定期监控关键文件,自动触发警报。
结语:lsof的终极奥义
lsof的真正强大之处,在于它完美诠释了Unix哲学——“一切皆文件”。无论是排查网络故障、追踪内存泄漏,还是揪出隐藏的恶意进程,它都能胜任。当然,想成为真正的高手,光靠这篇文章还不够,记得常翻man lsof
,多在实战中摸爬滚打。毕竟,在Linux的江湖里,唯有不断修炼,方能笑傲群雄!
彩蛋:下次遇到同事抱怨“服务器又卡了”,淡定掏出
lsof
,分分钟解决问题,深藏功与名~