Atuin:30k Star 的终端历史管理工具,把命令存进了 SQLite 数据库

2026-06-03

Atuin:30k Star 的终端历史管理工具,把命令存进了 SQLite 数据库

换台电脑,或者重装系统,第一件事是什么?很多人会先找回自己的 .bash_history——那个藏在 ~/.bash_history 里的纯文本文件。但如果你用过它,就知道它的局限:只有命令本身,没有退出码、没有执行时长、没有工作目录。想找三天前在某目录下执行过的某个命令?Ctrl-R 翻半天,根本找不到。

Atuin 就是来解决这个问题的。

它是什么

Atuin 是一个用 Rust 写成的 shell 历史管理工具。它把传统的 .bash_history 纯文本历史替换成了 SQLite 数据库。每条命令不再只是一行文字,而是一条包含丰富上下文的数据记录:

字段 说明
命令 你输入的那一行
退出码 命令成功还是失败
执行时长 花了多少秒
工作目录 当时在哪个目录
主机名 在哪台机器上执行的
会话 ID 属于哪个终端会话
时间戳 什么时候执行的

有了这些字段,搜索就不再是简单的字符串匹配。你可以按目录、按主机、按退出码、按时间范围过滤。比如”找出所有在 ~/projects 目录下失败的命令”,或者”找出上周执行超过 10 秒的命令”。

核心功能

Atuin 多端同步架构

1. 全屏 TUI 搜索

Atuin 接管了 Ctrl-R 和方向键上翻的历史搜索。按下 Ctrl-R 后,你会看到一个全屏的界面,支持模糊搜索和正则匹配。搜索结果按相关性排序,你可以用方向键选择,回车执行。

如果你用 fzf 做模糊搜索,Atuin 的搜索体验是类似的——但它搜索的是结构化的数据库,不是纯文本文件。

2. 端到端加密同步

这是 Atuin 最实用的功能之一。你可以把历史同步到云端,换台机器后自动拉取,历史不会丢。同步的数据在客户端加密,服务端看不到原始内容。

官方提供托管服务,你也可以自托管。自托管只需要一行 Docker 命令:

docker run -d -v atuin-data:/config -p 8888:8888 ghcr.io/atuinsh/atuin:latest server start

如果你不想折腾同步,只用本地功能也完全没问题。Atuin 的核心价值在于 SQLite 存储和搜索,同步是锦上添花。

3. 多 Shell 支持

Atuin 支持 zsh、bash、fish、nushell、xonsh、PowerShell。无论你在用什么 shell,历史都统一存到一个 SQLite 数据库里。

4. 统计与洞察

Atuin 内置统计功能,可以告诉你最常用的命令是什么、哪些命令执行次数最多、平均时长分布如何。这些数据对理解自己的使用习惯很有帮助。

5. 后台 Daemon 加速

从 v18.3 开始,Atuin 引入了后台 Daemon 进程,使用修改版的 nucleo 算法在内存中建立索引。Ctrl-R 的响应时间从百毫秒级别降到毫秒级,搜索几乎感觉不到延迟。

安装与配置

安装只需要三步:

# 1. 安装
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh

# 2. 导入现有历史
atuin import auto

# 3. 添加到 shell 配置(以 zsh 为例)
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc

bash 用户把 zsh 换成 bash 即可。安装后重启 shell,Ctrl-R 就会被 Atuin 接管。

导入现有历史这一步很重要——你之前的 .bash_history 会被导入到 Atuin 的 SQLite 数据库里,这样你从安装那一刻起就有完整的历史记录。

如果你想用同步功能,注册一个 Atuin 账号(或者自建服务器),然后运行 atuin register 获取 API key,再运行 atuin login 完成认证。

和竞品的区别

工具 存储方式 跨机同步 搜索方式
Atuin SQLite 结构化 端到端加密 Daemon 内存索引
fzf 不存储 通用模糊查找
McFly 本地 神经网络排序
Hstr 本地 轻量搜索

fzf 是一个通用的模糊搜索工具,它可以用来搜索历史,但它不存储历史,每次搜索都是实时从 .bash_history 读取。McFly 用神经网络给搜索结果排序,但它没有同步功能。Hstr 比较轻量,但功能也相对简单。

Atuin 的优势在于:结构化存储 + 同步 + 搜索,三者合一。如果你只需要其中一个功能,其他工具可能更合适。如果你想要一个完整的解决方案,Atuin 是目前最好的选择。

Atuin 从纯文本到结构化数据库的演进

踩坑与注意事项

Shell 配置需要重启生效。 安装后把 atuin init 加到 shell 配置文件里,需要重启 shell 或者执行 source ~/.zshrc 才能生效。第一次生效前,Ctrl-R 还是原来的行为。

同步不是必须的。 很多人看到”端到端加密同步”就觉得必须用。其实 Atuin 的核心功能——SQLite 存储和搜索——完全可以在本地使用。同步只是让你换台机器后不用重新积累历史。

Daemon 进程需要额外资源。 v18.3+ 的后台 Daemon 会占用少量内存(通常几十 MB),换来的是毫秒级搜索响应。如果你的机器资源紧张,或者对搜索速度要求不高,可以关闭 Daemon 用普通模式。

多 shell 共享数据库要注意冲突。 如果你同时在 zsh 和 bash 里用 Atuin,两个 shell 会写入同一个数据库。正常情况下没问题,但如果两个 shell 同时执行命令,可能会出现写入冲突。建议主要用一个 shell,其他 shell 只读不写。

总结

Atuin 适合什么人?

  • 每天在终端里待很长时间的人
  • 经常换电脑或重装系统,不想丢失历史的人
  • .bash_history 的局限感到不满的人
  • 需要跨机器搜索历史的人

不适合什么人?

  • 终端使用频率很低的人
  • 对隐私极其敏感,连加密同步都不想用的人(虽然本地使用完全没问题)
  • 已经用其他工具(如 fzf + 自定义脚本)满足需求的人

如果你属于第一类,Atuin 值得试试。安装只需三分钟,带来的提升是长期的。