lang: zh slug: atuin title: ‘Atuin:29,794 个 GitHub 星 — Shell 历史记录同步设置指南 2026’ description: ‘Atuin 用 SQLite 数据库替换 shell 历史记录,记录命令上下文(退出代码、cwd、持续时间),并在计算机之间同步加密历史记录。 支持 Bash、Zsh、Fish、Nushell。 涵盖安装、自托管、配置以及 Atuin、mcfly、fzf 和 Hstr。’ tags: [“automation”, “ci-cd”, “github”, “guide”, “open-source”, “reference”, “tutorial”] date: 2026-05-19 00:00:00+08:00 lastmod: 2026-05-19 00:00:00+08:00 tech_stack: [] application_domain: Dev Utils source_version: ’' licensing_model: Open Source license_type: MIT file_size: ’' file_md5: ’' download_url: ’' backup_url: ’' github_repo: ‘https://github.com/atuinsh/atuin' last_maintained: ‘2026-05-19’ draft: false categories: [‘dev-utils’] aliases:- /帖子/阿图因/ 常见问题解答:
- q:“跨机器同步时,Atuin 是否会加密我的 shell 历史记录?” ‘是的。 所有同步数据在离开您的计算机之前都使用 PASETO V4 (XChaCha20-Poly1305 + Blake2b) 在客户端进行加密,因此同步服务器只能看到加密的 blob,而无法读取您的命令。 但是,为了提高搜索性能,您的本地 SQLite 数据库未加密存储,因此请使用 LUKS 或 FileVault 等文件系统加密来进行本地保护。
- q:“我可以在不同步或创建帐户的情况下使用 Atuin 吗?” ‘是的。 Atuin 完全可以作为本地工具使用:跳过注册并忽略所有同步命令。 您的历史记录存储在本地 SQLite 数据库中,所有搜索、过滤和统计功能完全离线工作。
- q: ‘Atuin 支持哪些 shell?’ a:‘Atuin 支持 Bash、Zsh、Fish、Nushell 和 Xonsh,以及 PowerShell 作为第 2 层(测试较少)集成。 Bash 集成可能很脆弱,因为它的 preexec 挂钩依赖于可能与 pyenv 或 nodenv 等工具冲突的 DEBUG 陷阱,而 Zsh 和 Fish 集成则更可靠。
- q:“如何阻止密码或 API 密钥等敏感命令保存在 Atuin 中?” a: ‘将正则表达式模式添加到 ~/.config/atuin/config.toml 中的 History_filter 设置,例如“^export.*SECRET”、“^export.*PASSWORD”、“^aws configure”或“^ssh-keygen”。 您还可以使用 cwd_filter 排除在特定目录(例如 /tmp/secrets)中运行的命令。
- q:“我如何自行托管 Atuin 同步服务器?”
a:“使用 Docker Compose 与运行“服务器启动”的 ghcr.io/atuinsh/atuin 映像和 PostgreSQL 后端,公开端口 8888。使用 docker compose up -d 启动后,通过在 config.toml 中将sync_address 设置为 http://your-server:8888 来将客户端指向它,然后使用 atuin register 注册一个帐户并运行 atuinsync。
特征图片:/images/articles/atuin-29-794-github-stars-shell-history-sync.png——{{< 资源信息 >}}
Atuin 将您现有的 shell 历史记录替换为 SQLite 数据库和通过 Ctrl+R 激活的全屏模糊搜索 UI。
“atuin stats”命令显示您最常用的命令、命令总数和唯一命令细分。## 介绍您本周至少输入了三次复杂的“kubectl”命令。 你知道它在你的历史记录中的某个地方 - 可能被埋在 40,000 个其他命令下 - 但“Ctrl+R”反向搜索一次循环一个匹配,而“grep
/.bash_history”返回一堵噪音墙。 对于生活在终端中的开发人员来说,shell 历史记录是第二个记忆。 当它失败时,生产力就会下降。Atuin 使用 SQLite 支持的历史数据库解决了这个问题,该数据库不仅记录命令,还记录命令周围的上下文:退出代码、工作目录、主机名、会话 ID 和持续时间。 Atuin 拥有 29,794 个 GitHub star 和基于 Rust 的代码库,为每个 shell 会话添加了模糊搜索、加密的跨机器同步和使用情况分析。 本指南逐步介绍生产级 Atuin 安装,从第一个命令到自托管同步服务器。 无论您需要单台笔记本电脑还是一组开发人员工作站的 atuin 安装说明,以下步骤都可以复制粘贴。与将命令附加到平面文本文件(“/.bash_history”、“~/.zsh_history”)的传统 shell 历史记录不同,Atuin 将每个命令存储为具有 12 个以上字段的结构化记录。 这使得 grep 无法进行查询:“显示 /project/api 中下午 6 点后运行的所有失败命令”或“上周二我在登台服务器上运行的 docker 命令是什么?” 下面的 atuin 教程涵盖了从安装到日常工作流程集成的每个步骤。## Atuin 是什么?Atuin 是一个用 Rust 编写的 shell 历史记录替换工具,它将命令存储在具有丰富元数据的本地 SQLite 数据库中,然后可以选择使用端到端加密在计算机之间同步该历史记录。 它根据 MIT 许可证发布并由 atuinsh 组织维护,支持 Bash、Zsh、Fish、Nushell、Xonsh 和 PowerShell(第 2 层)。## Atuin 的工作原理Atuin 作为客户端历史拦截器和可选同步客户端运行。 了解其架构有助于调试同步问题或规划自托管部署。### 架构概述+-------------+ preexec/precmd hooks +------------------+ | Shell | --------------------------> | Atuin Client | | (bash/zsh) | | (Rust binary) | +-------------+ +--------+---------+ | +--------v---------+ | SQLite (local) | | ~/.local/share | +--------+---------+ | +----------------------v----------------------+ | Sync Protocol V2 | | PASETO V4 (XChaCha20-Poly1305 + Blake2b) | +----------------------+----------------------+ | +----------------------v----------------------+ | Atuin Server (self-hosted or cloud) | | PostgreSQL or SQLite backend | +---------------------------------------------+### 关键组件1. Shell Hook Layer:Atuin 通过特定于 shell 的插件注册preexec(命令之前)和precmd(命令之后)钩子。 它们捕获命令字符串、工作目录、开始时间和退出代码。
- 本地 SQLite 数据库:
~/.local/share/atuin/history.db中的所有历史记录都使用 SQLite 和 WAL 模式来实现并发读/写性能。 - 同步客户端:可选的后台同步将加密记录推送到 Atuin 服务器。 数据在离开机器之前使用每条记录的内容加密密钥进行信封加密。
- TUI 搜索界面:全屏终端 UI(使用
ratatui构建)用模糊/前缀/全文搜索和过滤模式取代了Ctrl+R。### 加密详细信息| Protocol | Algorithm | Status | |———-|———–|——–| | V1 (legacy) | XSalsa20Poly1305 (NaCl secretbox) | Phasing out | | V2 (current) | PASETO V4 Local (XChaCha20-Poly1305 + Blake2b) | Active |V2 使用信封加密:每条记录都会获得一个用用户主密钥封装的随机 CEK。 主密钥位于“~/.local/share/atuin/key”并且永远不会离开设备。### 为什么 SQLite 优于纯文本?传统的 shell 历史记录将命令存储为换行符分隔的文本。 这适用于“历史|” grep` 但大规模分解:- 查询性能:具有适当索引的 SQLite 可以在 50 毫秒内搜索 500,000 个命令。 对 50MB 文本文件执行 Grep 需要 200 毫秒以上并阻止 shell。
- 结构化元数据:纯文本无法在没有脆弱解析的情况下存储退出代码、目录或持续时间。
- 并发访问:SQLite WAL 模式允许 shell 在 Atuin 的 TUI 读取历史记录时写入历史记录,而不会出现文件锁损坏数据的情况。
- 重复数据删除和修剪:带有“WHERE”子句的 SQL“DELETE”让您可以通过手术删除条目(例如,所有包含“密码”的命令),而不是编辑文本文件。## 安装和设置### 一行安装(推荐)```` bas h
卷曲 –proto ‘=https’ –tlsv1.2 -LsSf https://setup.atuin.sh | 嘘# 非交互式(CI、Dockerfile) 卷曲 –proto ‘=https’ –tlsv1.2 -LsSf https://setup.atuin.sh | sh -s – –非交互式
`~/.atuin/bin/atuin` 并将 shell 集成添加到您的 rc 文件中。### 包管理器````
bas
h
# 自制软件 (macOS/Linux)
酿造安装阿图因# Cargo(需要 Rust 工具链)
货物安装阿图因# 架构 Linux
sudo pacman -Satuin# NixOS / nix
nix-env -iA nixpkgs.atuin# Debian/Ubuntu(来自 GitHub 版本)
版本=“18.16.1”
卷曲-LO“https://github.com/atuinsh/atuin/releases/download/v${VERSION}/atuin_${VERSION}_amd64.deb”
sudo dpkg -i“atuin_${VERSION}_amd64.deb”# Windows (WinGet)
winget install -e Atuinsh.Atuin
````### 外壳集成安装后,将 Atuin 添加到 shell 的 rc 文件中:````
bas
h
# Bash — 添加到 ~/.bashrc
eval "$(atuin init bash)"# Zsh — 添加到 ~/.zshrc
eval "$(atuin init zsh)"# Fish — 添加到 ~/.config/fish/config.fish
atuin init 鱼 | 来源# Nushell — 添加到 config.nu
atuin 初始化 nu | 保存〜/.config/nushell/atuin.nu
源〜/.config/nushell/atuin.nu
````重新加载您的
shell 或运行 `exec $SHELL` 来激活。### 导入现有历史记录````
bas
h
# 自动检测 shell```
bas
h
# Unix/macOS — 带 shell 设置提示的交互式安装
卷曲 --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | 嘘
# 非交互式(CI、Dockerfile)
卷曲 --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh -s -- --非交互式
````奥斯克斯
[✓] Atuin 编译时支持 sqlite
[✓] Atuin 编译时支持同步
[✓] Atuin 配置目录存在
````## 核心配置Atuin's config file lives at `~/.config/atuin/config.toml`. Before diving into settings, here is what the search interface looks like in practice with different filter modes applied:
酿造安装阿图因
# Cargo(需要 Rust 工具链)
货物安装阿图因
# 架构 Linux
sudo pacman -Satuin
# NixOS / nix
nix-env -iA nixpkgs.atuin
# Debian/Ubuntu(来自 GitHub 版本)
版本=“18.16.1”
卷曲-LO“https://github.com/atuinsh/atuin/releases/download/v${VERSION}/atuin_${VERSION}_amd64.deb”
sudo dpkg -i“atuin_${VERSION}_amd64.deb”
# Windows (WinGet)
winget install -e Atuinsh.Atuin
``昆西 = "5m"
同步地址=“https://api.atuin.sh”# 不要记录敏感命令(正则表达式模式)
历史过滤器 = [
"^导出。*KEY",
“^导出。*秘密”,
"^导出。*密码",
“^aws 配置”,
“^ssh-keygen”,
]# 工作目录过滤器——不要记录在这些路径中
cwd_过滤器 = [
“/tmp/秘密”,
"~/.*cred",
]# 输入接受命令; false = 首先编辑 Tab
输入_接受=真# 在搜索 UI 中显示有用的提示
显示帮助=假# 结果数
内联高度 = 20
``````重击
# Bash — 添加到 ~/.bashrc
eval "$(atuin init bash)"
# Zsh — 添加到 ~/.zshrc
eval "$(atuin init zsh)"
# Fish — 添加到 ~/.config/fish/config.fish
atuin init 鱼 | 来源
# Nushell — 添加到 config.nu
atuin 初始化 nu | 保存〜/.config/nushell/atuin.nu
源〜/.config/nushell/atuin.nu
````颂歌
# 模糊# 查看解析(有效)值
atuin config 获取 search_mode --resolved
# 模糊# 内联设置配置值
atuin 配置设置 search_mode 全文
atuin config 设置filter_mode 目录# 打印完整配置
atuin配置打印
````### 搜索和过滤模式````
bas
h
# Ctrl+R 在过滤模式之间交互切换
# 默认过滤模式:global -> ho```
bas
h
# 自动检测shell并导入
进口汽车
# 或者明确指定
导入 bash
导入zsh
阿图因进口鱼
# 检查导入的内容
阿图因统计数据
```
searc
h
--exit 1 --session # 此会话命令失败# 删除匹配的条目
atuin 搜索 --delete "rm -rf /accident"
````## 与流行工具集成### 星舰提示星星狂欢
$ atuin --版本
阿图因 18.16.1
$ 阿图因医生
阿图因医生
检查诊断
[✓] Atuin 编译时支持 sqlite
[✓] Atuin 编译时支持同步
[✓] Atuin 配置目录存在
```
ur
e
Atuin init 在 rc 文件中的 Starship init 之前运行
bas h
~/.zshrc — 顺序很重要 #
eval “$(atuin init zsh)” # 首先是 Atuin
eval “$(starship init zsh)” # 第二个 Starship
### 多路复用器Atuin 与 tmux 会话完美集成。 每个 tmux 窗口都有自己的会话 ID,从而启用每个窗口的历史记录过滤:
bas
h
~/.tmux.conf — 绑定一个键来打开 Atuin 搜索 #
绑定键 r run-shell “tmux send-keys C-r”# Atuin 通过环境变量自动检测 tmux 会话
按会话过滤:按 Ctrl+R 然后切换过滤模式 #
````### fzf一些用户将 Atuin 与 fzf 配对以进行文件模糊查找``` tom l
~/.config/atuin/config.toml #
[设置]
搜索模式:前缀、全文、模糊、略读 #
search_mode =“模糊”
过滤模式:全局、主机、会话、目录 #
过滤模式=“全局”
UI风格:紧凑、饱满 #
风格=“紧凑”
同步设置 #
自动同步=真 同步频率=“5m” 同步地址=“https://api.atuin.sh”
不要记录敏感命令(正则表达式模式) #
历史过滤器 = [ “^导出。*KEY”, “^导出。*秘密”, “^导出。*密码”, “^aws 配置”, “^ssh-keygen”, ]
工作目录过滤器——不要记录在这些路径中 #
cwd_过滤器 = [ “/tmp/秘密”, “~/.*cred”, ]
输入接受命令; false = 首先编辑 Tab #
输入_接受=真
在搜索 UI 中显示有用的提示 #
显示帮助=假
结果数 #
内联高度 = 20
g
.toml /root/.config/atuin/config.toml
RUN echo 'eval "$(atuin init bash)"' >> /root/.bashrc
````## 自托管同步服务器对于团队或注重隐私的用户,Atuin 的同步服务器可以使用 Docker 自托管。 下面的自托管 atuin 教程使用 Docker Compose 和 PostgreSQL,它在服务器规模上比 SQLite 更好地处理并发写入。### Docker Compose 设置````
yam
l
# docker-compose.yml
版本:“3”
服务:
阿图因:
重新启动:始终
图片:ghcr.io/atuinsh/atuin:最新
命令:服务器启动
卷:
- ./config:/config
- ./atuin-数据:/atuin-数据
链接:
- PostgreSQL
端口:
- “8888:8888”
环境:
ATUIN_HOST:“0.0.0.0”
ATUIN_端口:“8888”
ATUIN_OPEN_REGISTRATION:“真”
ATUIN_DB_URI:“postgres://atuin:change-me@postgresql/atuin”
RUST_LOG:“信息,atuin_server=调试”
用户:“1000:1000”PostgreSQL:
图片:postgres:14
重新启动:始终
卷:
- ./postgres-data:/var/lib/pos``bash
# 查看当前配置值
atuin config 获取 search_mode
# 模糊
# 查看解析(有效)值
atuin config 获取 search_mode --resolved
# 模糊
# 内联设置配置值
atuin 配置设置 search_mode 全文
atuin config 设置filter_mode 目录
# 打印完整配置
atuin配置打印
``` - postgresql
环境:
POSTGRES_HOST:postgresql
POSTGRES_DB: atuin
POSTGRES_USER:阿图因
POSTGRES_PASSWORD:更改我
POSTGRES_EXTRA_OPTS:“-Z6 --schema=public --blobs”
时间表:“@daily”
BACKUP_KEEP_DAYS:“7”
````### 启动服务器````
bas
h
# 创建数据目录
mkdir``bash
# Ctrl+R 在过滤模式之间交互切换
# 默认过滤模式:全局 -> 主机 -> 会话 -> 目录
# 带过滤器的命令行搜索
atuin search --exit 0 --after "昨天下午 3 点" make
atuin 搜索 --“2026-01-01”之前 --cwd /项目部署
atuin search --exit 1 --session # 此会话命令失败
# 删除匹配的条目
atuin 搜索 --delete "rm -rf /accident"
e r -e myuser@example.com -p securepassword# 或者在其他机器上登录 atuin 登录 -u myuser -p 安全密码# 获取您的加密密钥(安全备份) 阿图因键
c2e2d6e5a9b1c3f4d7e8a9b0c1d2e3f4…# 触发同步 #
自动同步
### Kubernetes 部署
yam
l
atuin-deployment.yaml #
api版本:apps/v1 种类:部署 元数据: 名称: atuin 服务器 规格: 副本:2 选择器: 匹配标签: 应用程序:阿图因 模板: 元数据: 标签: 应用程序:阿图因 规格: 容器:
- 姓名:阿图因
# ~/.config/starship.toml — 无需特殊配置
# Atuin 处理历史; Starship 处理提示
# 只需确保 Atuin init 在 rc 文件中的 Starship init 之前运行
``N_HOST
值:“0.0.0.0”
- 名称:ATUIN_DB_URI
值来自:
秘密密钥参考:
名称:atuin-db-secret
bas h
~/.zshrc — 顺序很重要 #
eval “$(atuin init zsh)” # 首先是 Atuin
eval “$(starship init zsh)” # 第二个 Starship
``8888
目标端口:8888
## 基准/实际用例### 性能特点Atuin 的 Rust 实现和 SQLite 后端在大型历史数据集上提供一致的性能。 这些数字是在 AMD Ryzen 5 560
bas
h
上测得的
~/.tmux.conf — 绑定一个键来打开 Atuin 搜索 #
绑定键 r run-shell “tmux send-keys C-r”
Atuin 通过环境变量自动检测 tmux 会话 #
按会话过滤:按 Ctrl+R 然后切换过滤模式 #
| 同步初始上传(50K cmd)| 〜30秒| 取决于带宽|
| 增量同步 | 〜1-3秒| 典型每日增量|
| 二进制大小 | 〜12MB | 单个静态二进制文件|
| 内存占用| 〜15MB | 空闲时居住|
| SQLite 数据库大小 | 每 100K 个命令约 150MB | w````
bas
h
# 保留 fzf 作为文件,Atuin 作为历史记录
# 禁用 fzf 历史记录绑定(在 ~/.bashrc 或 ~/.zshrc 中)
导出 FZF_DEFAULT_COMMAND='fd --type f --hidden'
# 不要绑定 Ctrl+R — 让 Atuin 处理它
# 文件的 fzf
别名 ff='fzf --preview "bat --style=numbers --color=always {}"'
# Atuin 历史记录(自动绑定到 Ctrl+R)
``保留**:DevOps 团队自行托管 Atuin,以维护轮换值班工程师的基础设施命令的可搜索审计跟踪。
3. **远程环境恢复**:使用临时云工作站(Gitpod、Coder)同步历史记录的开发人员,因此工作区拆卸不会擦除命令上下文。### 统计命令输出````
bas
h
$ 阿图因统计
[▮▮▮▮▮▮▮▮▮▮] 9,607 fg
[▮▮▮▮▮▮▮▮▮] 9,458 vim
[▮▮▮] 3,144 银
[▮▮▮```
nushel
l
# 配置.nu
源〜/.config/nushell/atuin.nu
# 设置环境变量
$env.ATUIN_NOBIND = true # 如果你想要自定义按键绑定
`` 光盘
[▮] 1,322 git 日志
命令总数:62,849
独特命令:26,908
````### 从其他历史记录工具迁移如果您从 `mcfly`、`Hstr````
dockerfil
e
切换
# Dockerfile.dev
运行curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh -s -- --非交互式
复制 config.toml /root/.config/atuin/config.toml
RUN echo 'eval "$(atuin init bash)"' >> /root/.bashrc
``Atuin 数据库中的历史记录
进口汽车# 第 3 步:初始化 shell 集成
eval "$(atuin init zsh)" # 或 bash/fish# 步骤 4:验证 — 两个系统在过渡期间共存
阿图因统计数据
历史| wc -l # 本地历史仍然有效# 步骤 5:经过一周的测试,在 rc 文件中禁用本机历史记录:
# echo '取消设置 HISTFILE' >> ~/.zshrc
Atui
n
不会删除或干扰您现有的 ~/.bash_history 或 ~/.zsh_history 文件。 原始历史作为后备完好无损。## 高级```
yam
l
docker-compose.yml #
版本:“3” 服务: 阿图因: 重新启动:始终 图片:ghcr.io/atuinsh/atuin:最新 命令:服务器启动 卷:
- ./config:/config
- ./atuin-数据:/atuin-数据 链接:
- PostgreSQL 端口:
- “8888:8888” 环境: ATUIN_HOST:“0.0.0.0” ATUIN_端口:“8888” ATUIN_OPEN_REGISTRATION:“真” ATUIN_DB_URI:“postgres://atuin:change-me@postgresql/atuin” RUST_LOG:“信息,atuin_server=调试” 用户:“1000:1000”
PostgreSQL: 图片:postgres:14 重新启动:始终 卷:
- ./postgres-data:/var/lib/postgresql/data 环境: POSTGRES_USER:阿图因 POSTGRES_PASSWORD:更改我 POSTGRES_DB: atuin 用户:“1000:1000”
可选:自动备份 #
备份: 图片:prodrigestivill/postgres-backup-local 重新启动:始终 卷:
- ./备份:/备份 链接:
- PostgreSQL 环境: POSTGRES_HOST:postgresql POSTGRES_DB: atuin POSTGRES_USER:阿图因 POSTGRES_PASSWORD:更改我 POSTGRES_EXTRA_OPTS:“-Z6 –schema=public –blobs” 时间表:“@daily” BACKUP_KEEP_DAYS:“7” ``:32Z
历史计数:47,231# 检查问题 #
阿图因医生
### TUI 主题化汤姆
~/.config/atuin/config.toml #
[主题]
使用终端的默认颜色 #
use_default_colors = true# 或者指定明确的颜色
基数=“#1e1e2e”
第 1 层 =“#313244”
文本 =“#cdd6f4”
重音=“#89b4fa”
### 多机密钥迁移设置新计算机时,请安全地传输您的加密密钥:
bas
h
在旧机器上 — 将密钥复制到剪贴板(或安全传输) #
猫 ~/.local/share/atuin/key# 在新机器上 — 安装并登录后 mkdir -p ~/.local/share/atuin echo “YOUR_KEY_HERE” > ~/.local/share/atuin/key chmod 600 ~/.local/share/atuin/key# 验证同步是否有效 自动同步 阿图因统计数据
|--------|--------|--------|---------------|-----|
| **数据库** | SQLite | SQLite | 纯文本文件| 纯文本文件 |
| **跨机器同步** | 是(E2EE)| 没有 | 没有 | 没有 |
| **搜索用户界面** | 内置 TUI | 内置 TUI | fzf 集成 | 内置 TUI |
| **上下文记录** | cwd、退出、持续时间、主机 | cwd,退出| 无 | 无 |
| **统计** | `阿图因统计数据` | 没有 | 没有 | 没有 |
| **外壳支持** | bash、zsh、```
bas
h
# 创建数据目录
mkdir -p atuin-数据 postgres-数据备份
# 启动服务
docker 组成-d
# 检查健康状况
卷曲 http://localhost:8888/health
# {“状态”:“确定”}
```整合** | 是(可选)| 没有 | 没有 | 没有 |
| **历史导入** | bash、zsh、fish、nu | bash、zsh、鱼 | 不适用 | bash、zsh |
| **GitHub 之星** | 29,794 | 29,794 6,800 | 67,000 (fzf) | 67,000 (fzf) 3,900 | 3,900
| **二进制大小** | 〜12MB | 〜4MB | ````汤姆
# ~/.config/atuin/config.toml
[设置]
sync_address =“http://您的服务器:8888”
自动同步=真
同步频率=“5m”
``` 和功能齐全的搜索用户界面。 最适合在 2 台以上机器上工作、重视历史分析的开发人员。
- **mcfly**:你想要```
bas
h
# 在您的自托管服务器上注册一个新帐户
atuin register -u myuser -e myuser@example.com -p securepassword
# 或者在其他机器上登录
atuin 登录 -u myuser -p 安全密码
# 获取您的加密密钥(安全备份)
阿图因键
# c2e2d6e5a9b1c3f4d7e8a9b0c1d2e3f4...
# 触发同步
自动同步
``TUI 没有数据库开销。 最适合 bash/zsh 上的极简主义者。## 局限性/诚实评估Atuin 并不是适合所有场景的工具:1. **无执行器跟踪**:Atuin 会记录命令,但不会记录该命令是手动输入、由脚本执行还是由 AI 编码助手生成。 所有来源在数据库中看起来都是相同的。```
yam
l
# atuin-deployment.yaml
api版本:apps/v1
种类:部署
元数据:
名称: atuin 服务器
规格:
副本:2
选择器:
匹配标签:
应用程序:阿图因
模板:
元数据:
标签:
应用程序:阿图因
规格:
容器:
- 姓名:阿图因
图片:ghcr.io/atuinsh/atuin:18.16.1
命令:[“atuin”,“服务器”,“启动”]
端口:
- 集装箱端口:8888
环境:
- 名称:ATUIN_HOST
值:“0.0.0.0”
- 名称:ATUIN_DB_URI
值来自:
秘密密钥参考:
名称:atuin-db-secret
关键: uri
---
api版本:v1
种类: 服务
元数据:
名称: atuin-service
规格:
选择器:
应用程序:阿图因
端口:
- 端口:8888
目标端口:8888
``完全没有。6. **PowerShell 支持为第 2 层**:虽然功能正常,但 PowerShell 集成接受的测试较少,并且可能落后于 Unix shell 功能。## 常见问题### 如何禁用向上箭头绑定?在配置中添加 `filter_mode_shell_up_key = "global"` 或 `show_preview = false`。 要完全禁用向上箭头上的 Atuin,请在 init 行之前添加 `export ATUIN_NOBIND=1` 并仅手动绑定 `Ctrl+R`:````
bas
h
# ~/.bashrc
导出 ATUIN_NOBIND=1
eval "$(atuin init bash)"
绑定 '"\C-r": "\C-aatuin search\C-j"'
````### 我可以在没有任何同步的情况下使用 Atuin 吗?是的。 Atuin 完全可以作为本地工具使用。 只需跳过注册并忽略所有同步命令即可。 您的历史记录存储在本地 SQLite 中,所有搜索功能都可以离线工作。### 我的数据是如何加密的?所有同步数据在离开您的计算机之前均使用 PASETO V4 (XChaCha20-Poly1305 + Blake2b) 在客户端进行加密。 同步服务器(无论是自托管还是 atuin.sh)只能看到加密的 blob — 它无法解密或读取您的命令。 您的本地 SQLite 数据库未针对搜索性能进行加密。### 如果我丢失加密密钥会怎样?需要您的加密密钥来解密同步历史记录。 如果丢失,您将无法恢复之前同步的数据。 该密钥在初始设置期间使用“atuin key”显示 - 将其备份到密码管理器中。 无论如何,当地历史仍然可以访问。### 两个用户可以共享历史数据库吗?不直接。 Atuin 的同步模型专为跨多个设备的一个用户而设计。 对于团队共享历史记录,每个用户维护自己的数据库和同步帐户。 自托管服务器支持多个独立帐户。### Atuin 会减慢我的 shell 速度吗?没有可测量的影响。 Rust 二进制文件使 shell 启动时间增加了约 5-10 毫秒(一次性),并且命令捕获通过 shell 挂钩异步发生。 SQLite WAL 模式确保写入不会阻塞 shell 提示符。### 如何从历史记录中删除命令?````
bas
h
# 按搜索模式删除
atuin 搜索 --删除“敏感命令”# 或者使用 TUI — 找到该命令,然后按 Alt+Delete
````## 结论Atuin 将 shell 历史记录从平面文本文件转变为结构化、可搜索且可移植的数据库。 拥有 29,794 个 GitHub star,端到端加密``bash
$ 阿图因统计
[▮▮▮▮▮▮▮▮▮▮] 9,607 fg
[▮▮▮▮▮▮▮▮▮] 9,458 vim
[▮▮▮] 3,144 银
[▮▮▮] 3,095 git 状态
[▮▮] 2,248 git diff
[▮] 1,787 卷曲
[▮] 1,571 jq
[▮] 1,357 银
[▮] 1,348 cd
[▮] 1,322 git 日志
命令总数:62,849
独特命令:26,908
```在
[Telegram 开发者社区](https://t.me/dibi8dev) 中获取提示和故障排除
## 推荐的托管和基础设施在将上述任何工具部署到生产环境之前,您需要坚实的基础设施。 dibi8实际使用和推荐的两个选项:- **{< aff "digitalocean" "footer-cta-legacy" "DigitalOcean" >}}** — 200 美元免费赠金,为期 60 天,覆盖全球 14 个以上区域。 运行开源人工智能工具的独立开发者的默认选项。
- *```重击
# 第 1 步:安装 Atuin(您现有的历史记录保持不变)
卷曲 --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | 嘘
# 第 2 步:将现有历史记录导入 Atuin 的数据库
进口汽车
# 第 3 步:初始化 shell 集成
eval "$(atuin init zsh)" # 或 bash/fish
# 步骤 4:验证 — 两个系统在过渡期间共存
阿图因统计数据
历史| wc -l # 本地历史仍然有效
# 步骤 5:经过一周的测试,在 rc 文件中禁用本机历史记录:
# echo '取消设置 HISTFILE' >> ~/.zshrc
```参考](https://docs.atuin.sh/cli/reference/config/)
- [PASETO V4 规范](https://paseto.io/)
- [Ellie Huxtable — Atuin 创作者博客](https://ellie.wtf/projects/atuin)
- [mcfly GitHub 存储库](https://github.com/cantino/mcfly)
- [fzf GitHub 存储库](https://github.com/junegunn/fzf)
- [Hstr GitHub 存储库](https://github.com/dvorka/hstr)<!--自动引用-->
## 参考文献和来源- [Atuin](https://github.com/atuinsh/atuin)
- [mcfly](https://github.com/cantino/mcfly)
- [fzf](https://github.com/junegunn/fzf)
- [Hstr](https://github.com/dvorka/hstr)
- [PASETO](https://paseto.io/)
- [ratatui](https://github.com/ratatui/ratatui)
- [星舰](https://github.com/starship/starship)
- [Atuin文档](https://docs.atuin.sh/)
````汤姆
# ~/.config/atuin/config.toml
[设置]
历史过滤器 = [
# AWS 凭证
“^aws 配置”,
“^导出AWS_SECRET_ACCESS_KEY”,
# 通用秘密
“^导出。*秘密”,
"^导出。*密码",
“^导出。*TOKEN”,
"^echo.*密码",
# SSH 密钥
“^ssh-添加”,
“^ssh-keygen”,
# 数据库连接字符串
"^psql.*://.*:",
"^mysql.*-p",
]
``````重击
# SQLite备份(安全,无锁问题)
sqlite3 ~/.local/share/atuin/history.db ".backup '/backup/atuin-$(date +%Y%m%d).db'"
# 或者用WAL检查点复制
cp ~/.local/share/atuin/history.db ~/backups/atuin-backup.db
# 通过 cron 自动每日备份
0 2 * * * sqlite3 ~/.local/share/atuin/history.db ".backup '/backups/atuin/atuin-$(date +\%Y\%m\%d).db'" && find /backups/atuin -mtime +30 -delete
``````重击
# 检查上次同步时间
atuinsync --force # 强制同步并显示状态
# 查看同步信息
阿图因信息
# Atuin v18.16.1
# 同步间隔:5m
# 同步地址:https://api.atuin.sh
# 最后同步: 2026-05-20T08:15:32Z
# 历史计数:47,231
# 检查问题
阿图因医生
``````汤姆
# ~/.config/atuin/config.toml
[主题]
# 使用终端的默认颜色
use_default_colors = true
# 或者指定明确的颜色
基数=“#1e1e2e”
第 1 层 =“#313244”
文本 =“#cdd6f4”
重音=“#89b4fa”
``````重击
# 在旧机器上 — 将密钥复制到剪贴板(或安全传输)
猫 ~/.local/share/atuin/key
# 在新机器上 — 安装并登录后
mkdir -p ~/.local/share/atuin
echo "YOUR_KEY_HERE" > ~/.local/share/atuin/key
chmod 600 ~/.local/share/atuin/key
# 验证同步是否有效
自动同步
阿图因统计数据
``````重击
# ~/.bashrc
导出 ATUIN_NOBIND=1
eval "$(atuin init bash)"
绑定 '"\C-r": "\C-aatuin search\C-j"'
``````重击
# 按搜索模式删除
atuin 搜索 --删除“敏感命令”
# 或者使用 TUI — 找到该命令,然后按 Alt+Delete
featureImage: /images/articles/atuin29794-个-github-星-shell-历史记录同步设置指南-2.jpg
💬 留言讨论