字节笔记本
2026年3月22日
Sloth:macOS 原生 lsof 可视化工具
本文介绍 Sloth,一款面向 macOS 平台的原生系统工具应用,它能够以图形化界面展示系统中所有正在运行的进程所打开的文件、目录、套接字、管道和设备,本质上是 lsof 命令行工具的友好 GUI 封装。
项目简介
Sloth 是一款由开发者 Sveinbjorn Thordarson 创建并长期维护的 macOS 原生应用。项目始于 2004 年,至今已有超过 20 年的持续开发历史。它的核心功能是将 Unix 系统中经典的 lsof(list open files)命令的输出解析后以可视化的方式呈现,让用户无需在终端中翻阅大量文本信息,即可直观地了解系统中哪些应用正在使用哪些文件资源。
对于 macOS 开发者、系统管理员以及技术爱好者而言,Sloth 是一款非常实用的诊断工具。当遇到文件被占用无法删除、端口被占用无法启动服务等常见问题时,Sloth 能够帮助快速定位问题根源。
核心特性
Sloth 提供了丰富的功能集,以下是其主要特性:
- 全面的资源展示:查看所有已打开的文件、目录、IP 套接字、设备、Unix 域套接字和管道
- 强大的过滤功能:支持按名称、访问模式、卷、类型、位置进行过滤,还支持正则表达式匹配
- 灵活的排序方式:可按进程名称、文件数量、类型、进程 ID、用户 ID、Carbon PSN、Bundle UTI 等字段排序
- IP 套接字详情:查看 IP 套接字的状态、协议、端口和版本信息
- 进程间通信可视化:展示进程之间建立的套接字和管道连接关系
- 详细检查窗口:提供 macOS 和 Unix 级别的文件、套接字、进程详细信息
- 右键菜单操作:内置强大的上下文菜单,支持常用文件操作
- 应用内权限提升:支持在应用内进行身份验证,以 root 权限进行全系统扫描
- 极致性能:使用 Objective-C/Cocoa 原生开发,运行速度极快、界面响应流畅
技术栈
Sloth 的技术选型非常传统且高效:
- 开发语言:Objective-C
- UI 框架:Cocoa(AppKit)
- 底层依赖:macOS 系统级
lsof命令 - 构建工具:Xcode(通过
xcodeproj项目文件) - 二进制格式:Universal ARM/Intel 64-bit 通用二进制
- 系统要求:macOS 10.13(High Sierra)及更高版本
- 开源协议:BSD 3-Clause License
选择 Objective-C 和 Cocoa 而非 SwiftUI 或其他现代框架,使得 Sloth 能够在较老的 macOS 版本上运行,同时保证了极佳的性能和原生的系统体验。
安装指南
Sloth 提供了多种安装方式,用户可以根据自己的偏好选择:
方式一:官方下载
从项目 Releases 页面下载最新版本(当前为 Sloth 3.4,约 1.3 MB)。下载的二进制文件为 Developer ID 签名并经过 Apple 公证,可以直接运行,无需额外配置。
下载地址:
https://github.com/sveinbjornt/Sloth/releases/latest
方式二:Homebrew 安装
如果你使用 Homebrew 作为包管理器,可以通过 Cask 直接安装:
brew install --cask sloth需要注意的是,Homebrew 上的版本可能不是最新的,如果需要最新功能建议从官方下载。
方式三:从源码构建
如果需要自定义或贡献代码,可以从源码构建(详见下一节)。
快速开始
下载安装后的使用
- 打开 Sloth 应用
- 应用会自动扫描当前用户权限下所有进程的打开文件
- 如需全系统扫描(包括 root 进程),点击界面中的认证按钮并输入管理员密码
- 使用上方的搜索栏和过滤条件快速定位目标文件或进程
- 选中某个条目后,可以通过右键菜单执行操作(如在 Finder 中显示、获取信息等)
常见使用场景
场景一:查找占用文件的进程
当你尝试删除或移动某个文件时,系统提示"文件正在使用中",可以打开 Sloth,在搜索栏输入文件名,即可找到是哪个进程正在使用该文件,然后决定是否终止该进程。
场景二:排查端口占用
当启动本地开发服务器时遇到端口被占用的错误,可以在 Sloth 中按类型过滤 IP 套接字,找到占用特定端口的进程及其 PID。
场景三:分析应用行为
通过 Sloth 观察某个应用打开了哪些配置文件、日志文件或网络连接,有助于了解应用的运行机制,对逆向分析和安全审计也有参考价值。
使用示例
从源码构建项目
Sloth 可以通过 Xcode 的 xcodeproj 文件进行构建,也可以在仓库根目录使用命令行构建:
# 克隆项目
git clone https://github.com/sveinbjornt/Sloth.git
cd Sloth
# 使用 xcodebuild 构建(需要安装 Xcode 命令行工具)
xcodebuild构建产物将生成在 products/ 目录中。
界面操作示例
- 按进程名称过滤:在搜索栏中输入应用名称(如 "Chrome"),即可看到 Chrome 进程打开的所有资源
- 查看进程间通信:通过过滤器选择 Unix 域套接字类型,可以看到进程之间的通信管道
- 查看网络连接:选择 IP 套接字类型,可以看到所有活跃的网络连接及其状态(ESTABLISHED、LISTEN 等)
与 lsof 命令的对比
在终端中执行 lsof 命令会输出大量文本信息:
# 终端中的 lsof 输出格式
lsof
# COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
# Safari 1234 user cwd DIR ... 4096 2 /Users/user
# Safari 1234 user txt REG ... 123456 100 /Applications/Safari.app/...而 Sloth 将这些信息以结构化的表格形式呈现,支持排序、过滤和交互操作,使用体验远优于原始命令行。
项目链接
- GitHub 仓库:https://github.com/sveinbjornt/Sloth
- 最新版本下载:https://github.com/sveinbjornt/Sloth/releases/latest
- 开源协议:BSD 3-Clause License
- 作者:Sveinbjorn Thordarson (sveinbjorn@sveinbjorn.org)
- 最低系统要求:macOS 10.13 (High Sierra)