Atuin 是一个可以同步,备份 Shell 命令历史的服务。借助 Atuin 可以在多台设备之前同步 Shell 命令历史,所有的命令都在数据库(SQLite)中加密存储。

它不仅可以同步历史记录,还提供了一个更好的 Ctrl-R 交互界面,支持模糊搜索、按目录过滤、按退出码过滤等功能。

安装

macOS 使用 Homebrew 安装:

brew install atuin

Linux 可以使用脚本安装:

bash <(curl https://raw.githubusercontent.com/atuinsh/atuin/main/install.sh)

安装完成后,需要将其集成到 Shell 中。以 Zsh 为例:

echo 'eval "$(atuin init zsh)"' >> ~/.zshrc

Bash 用户则添加到 .bashrc

echo 'eval "$(atuin init bash)"' >> ~/.bashrc

配置自托管服务器

Atuin 官方提供了一个公共的同步服务器,但也支持自托管。如果你希望数据完全掌握在自己手中,可以使用 Docker 部署自己的 Atuin Server。

Docker Compose 部署

创建一个 docker-compose.yml 文件:

version: '3.5'
services:
  atuin:
    image: ghcr.io/atuinsh/atuin:latest
    container_name: atuin
    environment:
      ATUIN_HOST: "0.0.0.0"
      ATUIN_PORT: "8888"
      ATUIN_OPEN_REGISTRATION: "true"
      ATUIN_DB_URI: postgres://atuin:password@db:5432/atuin
    ports:
      - "8888:8888"
    volumes:
      - ./config:/config
    restart: unless-stopped
    depends_on:
      - db

  db:
    image: postgres:14
    container_name: atuin_db
    environment:
      POSTGRES_USER: atuin
      POSTGRES_PASSWORD: password
      POSTGRES_DB: atuin
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    restart: unless-stopped

启动服务:

docker-compose up -d

客户端配置

在客户端机器上,修改配置文件 ~/.config/atuin/config.toml,指向你的自托管服务器地址:

# ~/.config/atuin/config.toml
sync_address = "https://your.atuin-server.com"

如果服务器没有使用 HTTPS,需要配置 sync_address = "http://IP:8888"

注册与登录

配置好服务器地址后,首先注册账号:

atuin register -u <USERNAME> -e <EMAIL> -p <PASSWORD>

登录:

atuin login -u <USERNAME> -p <PASSWORD>

导出 Key

Atuin 使用端到端加密,密钥保存在本地。为了在其他机器上登录,你需要导出这个 Key:

atuin key

保存好输出的 Key。在另一台机器登录时,会提示输入这个 Key。

使用

常用命令

手动同步:

atuin sync

查看统计信息:

atuin stats

搜索历史

Atuin 默认会接管 Ctrl-RUp 键(取决于配置),提供一个全屏的交互式搜索界面。

你也可以使用命令行进行复杂的搜索:

  • 搜索当前目录下的命令
    atuin search --cwd . <query>
    
  • 搜索非 0 退出码(失败)的命令
    atuin search --exit 1 <query>
    
  • 搜索昨天的命令
    atuin search --after "yesterday"
    

导入旧历史

如果你之前使用 Zsh 或 Bash 的默认历史记录,可以将其导入 Atuin:

atuin import zsh
# 或
atuin import bash