
作为后端开发或运维工程师你肯定遇到过这几个让人抓狂的瞬间想重启服务系统疯狂报错Address already in use: bind端口被占用。想拔掉 U 盘或卸载磁盘系统冷冷地甩出一句umount: target is busy。想跑个深度学习模型显卡被占满却不知道是谁的代码在偷偷跑。遇到这些情况不要慌掏出 Linux 的“照妖镜”——fuser。今天我们就来彻底盘一盘这个极其好用但容易被忽视的神仙命令。什么是 fuserfuser的全拼是File User。顾名思义它的核心作用就是找出到底是谁哪个进程在占用特定的文件、目录、甚至网络端口。不仅能找出来它还自带“执法权”允许你直接把这些占着茅坑不拉屎的进程一键 Kill 掉。常用场景一揪出幕后黑手查看占用这是fuser最基础的用法。假设你想知道是谁在占用你的日志文件或目录。1. 查看详细的占用进程 (-v)千万别只打fuser filename那样只会输出一串冷冰冰的 PID。加上-v(verbose) 才能看懂fuser-v/var/log/nginx/access.log输出大概长这样USER PID ACCESS COMMAND /var/log/nginx/access.log: root 1234 f.... nginxUSER: 运行进程的用户。PID: 进程的 ID。ACCESS: 进程访问该文件的方式f代表打开了文件c代表作为当前工作目录e代表是可执行文件m代表是共享库。COMMAND: 罪魁祸首的命令名。常用场景二开发者的福音端口释放开发联调时服务经常没正常关闭导致端口卡死。不用再去netstat查出 PID 再killfuser一步搞定。1. 查看哪个程序占用了 8080 端口fuser-v8080/tcp2. 一键释放 8080 端口 (-k)看到确认是废弃服务后直接加上-k(kill) 参数一剑封喉fuser-k8080/tcp执行完你的 8080 端口就自由了。常用场景三批量清理与设备释放如果你在管理 GPU 服务器或者需要强制拔除被占用的外部存储fuser的批量处理能力非常强。1. 强制清理显卡的所有占用当/dev/nvidia*设备被一堆僵尸 Python 进程占满时sudofuser-vk/dev/nvidia*注意这会把所有访问显卡的进程全部干掉适合清理挂死的实验。2. 交互式安全击杀 (-i)如果在生产环境手抖错杀的代价太大了。强烈建议在加上-k的同时带上-i(interactive) 参数fuser-vki/dev/nvidia*系统会在杀掉每一个 PID 前问你Kill process 1234 ? (y/N)。看准了再按y拒绝误伤友军。3. 终极杀招发送 SIGKILL 信号 (-9)如果有些进程卡死默认的fuser -k发送 SIGTERM 信号杀不掉可以加上-9强杀fuser-k-9/path/to/target 高阶隐藏技巧搭配 ps 扒得连底裤都不剩fuser -v虽然好用但COMMAND列通常只显示一个程序名比如python你不一定知道它到底运行了哪个脚本。配合ps命令我们可以直接展开详细的启动参数ps-fp$(fuser/dev/nvidia02/dev/null)这行命令会自动把fuser找到的 PID 喂给ps帮你直接看到对方到底在跑什么代码带了什么参数。总结fuser就像是 Linux 世界里的特警专门处理各类“占道经营”的进程。记住以下三个黄金公式足以应付 90% 的场景查勘现场fuser -v 文件/目录/端口安全清场fuser -vki 文件/目录/端口强行拆迁fuser -vk -9 文件/目录/端口下一次当你再遇到Address already in use时希望能想起今天讲的fuser