字节笔记本

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 直接安装:

bash
brew install --cask sloth

需要注意的是,Homebrew 上的版本可能不是最新的,如果需要最新功能建议从官方下载。

方式三:从源码构建

如果需要自定义或贡献代码,可以从源码构建(详见下一节)。

快速开始

下载安装后的使用

  1. 打开 Sloth 应用
  2. 应用会自动扫描当前用户权限下所有进程的打开文件
  3. 如需全系统扫描(包括 root 进程),点击界面中的认证按钮并输入管理员密码
  4. 使用上方的搜索栏和过滤条件快速定位目标文件或进程
  5. 选中某个条目后,可以通过右键菜单执行操作(如在 Finder 中显示、获取信息等)

常见使用场景

场景一:查找占用文件的进程

当你尝试删除或移动某个文件时,系统提示"文件正在使用中",可以打开 Sloth,在搜索栏输入文件名,即可找到是哪个进程正在使用该文件,然后决定是否终止该进程。

场景二:排查端口占用

当启动本地开发服务器时遇到端口被占用的错误,可以在 Sloth 中按类型过滤 IP 套接字,找到占用特定端口的进程及其 PID。

场景三:分析应用行为

通过 Sloth 观察某个应用打开了哪些配置文件、日志文件或网络连接,有助于了解应用的运行机制,对逆向分析和安全审计也有参考价值。

使用示例

从源码构建项目

Sloth 可以通过 Xcode 的 xcodeproj 文件进行构建,也可以在仓库根目录使用命令行构建:

bash
# 克隆项目
git clone https://github.com/sveinbjornt/Sloth.git
cd Sloth

# 使用 xcodebuild 构建(需要安装 Xcode 命令行工具)
xcodebuild

构建产物将生成在 products/ 目录中。

界面操作示例

  1. 按进程名称过滤:在搜索栏中输入应用名称(如 "Chrome"),即可看到 Chrome 进程打开的所有资源
  2. 查看进程间通信:通过过滤器选择 Unix 域套接字类型,可以看到进程之间的通信管道
  3. 查看网络连接:选择 IP 套接字类型,可以看到所有活跃的网络连接及其状态(ESTABLISHED、LISTEN 等)

与 lsof 命令的对比

在终端中执行 lsof 命令会输出大量文本信息:

bash
# 终端中的 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 将这些信息以结构化的表格形式呈现,支持排序、过滤和交互操作,使用体验远优于原始命令行。

项目链接

分享: