Atuin: lịch sử lệnh shell có ngữ cảnh, tìm kiếm toàn màn hình và đồng bộ mã hoá
Tóm tắt
Atuin thay lịch sử shell bằng SQLite, ghi thêm thư mục, mã thoát, thời gian chạy. Ctrl+R mở tìm kiếm toàn màn hình, đồng bộ giữa các máy được mã hoá đầu cuối. Luôn cấu hình history_filter để không lưu bí mật.
Lịch sử lệnh mặc định của shell khá nghèo nàn: một file text, giới hạn số dòng, mất khi mở nhiều cửa sổ cùng lúc, không biết lệnh chạy ở thư mục nào, thành công hay thất bại, và không theo bạn sang máy khác. Atuin thay lịch sử shell bằng một cơ sở dữ liệu SQLite, ghi thêm ngữ cảnh cho mỗi lệnh, cho giao diện tìm kiếm toàn màn hình khi nhấn Ctrl+R, và có thể đồng bộ lịch sử giữa các máy với mã hoá đầu cuối.

Cài đặt
# Script cài đặt chính thức (theo README)
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
# Hoặc Homebrew
brew install atuin
# Thêm vào ~/.zshrc nếu script chưa tự thêm
eval "$(atuin init zsh)"
# Nhập lịch sử cũ của shell vào Atuin
atuin import auto
Atuin ghi lại gì?
| Thông tin | Dùng để |
|---|---|
| Lệnh và thời điểm chạy | Tìm lại lệnh theo thời gian |
| Thư mục làm việc | Lọc lệnh đã chạy trong chính project này |
| Mã thoát (exit code) | Biết lệnh nào thành công, bỏ qua lệnh lỗi |
| Thời gian chạy | Thấy lệnh nào tốn thời gian |
| Tên máy, phiên | Phân biệt lệnh từ máy nào khi đồng bộ |
Tìm kiếm với Ctrl+R
Nhấn Ctrl+R (hoặc mũi tên lên, có thể cấu hình) để mở giao diện tìm kiếm toàn màn hình. Gõ vài chữ để lọc; nhấn Ctrl+R lần nữa để đổi chế độ lọc giữa: lệnh trong phiên hiện tại, trong thư mục hiện tại, trên máy này, hay toàn bộ. Enter để chạy ngay, Tab để đưa lệnh ra dòng lệnh và sửa trước khi chạy.
atuin search --cwd . --exit 0 docker # lệnh docker thành công trong thư mục này
atuin search --before "yesterday" kubectl
atuin stats # thống kê lệnh dùng nhiều nhất
Đồng bộ giữa các máy
atuin register -u <tên> -e <email> # tạo tài khoản trên server đồng bộ
atuin login -u <tên> # đăng nhập trên máy thứ hai
atuin sync # đồng bộ thủ công (mặc định tự đồng bộ định kỳ)
Lịch sử được mã hoá trước khi gửi đi, nên server không đọc được nội dung. Bạn có thể dùng server do nhóm Atuin vận hành, tự host server riêng, hoặc không đồng bộ gì cả và chỉ dùng tìm kiếm cục bộ.
Cấu hình hữu ích
File ~/.config/atuin/config.toml:
filter_mode = "directory" # mặc định lọc theo thư mục hiện tại
search_mode = "fuzzy"
filter_mode_shell_up_key_binding = "session"
history_filter = [
"^export .*TOKEN", # không lưu lệnh có token
"^curl .*Authorization",
]
Lưu ý
- Lịch sử lệnh thường chứa bí mật (token, mật khẩu trong tham số). Dùng
history_filterđể loại các mẫu nhạy cảm, và cân nhắc kỹ trước khi bật đồng bộ trên máy công ty. - Muốn giữ cảm giác cũ cho mũi tên lên, có thể tắt việc Atuin chiếm phím này trong cấu hình hoặc khi init.
- Atuin không xoá file history gốc của shell; hai hệ thống chạy song song.
Áp dụng thế nào?
- Dev: Đặt
filter_mode = "directory": trong mỗi project, Ctrl+R chỉ hiện lệnh từng dùng ở đó, như một sổ tay lệnh riêng của project. - Tech Lead/DevOps: Khi xử lý sự cố,
atuin search --cwdvà mã thoát giúp tái hiện chính xác chuỗi lệnh đã chạy, hữu ích khi viết postmortem. - PM: Lưu ý chính sách bảo mật: nếu cho phép đồng bộ lịch sử, cần quy định server nào được dùng và lọc dữ liệu nhạy cảm.
Nguồn & tham khảo
- atuinsh/atuin — atuinsh (GitHub)