Atuin: 一款神奇的 Shell 歷史記錄管理工具,支持多終端實時同步
除了通過 UI 進行搜索之外,還可以通過命令來進行更細粒度的搜索控制,比如搜索昨天下午3點之后記錄的所有成功的 make 命令,則可以使用下面的命令:
atuin search --exit 0 --after "yesterday 3pm" make
你可以使用作者托管的服務器,也可以使用自己的服務器!或者干脆不使用 sync 功能也可以。所有的歷史記錄同步都是加密的,所以數據安全方面完全不用擔心。
特點
- 重新綁定 up 和 ctrl-r 的全屏歷史記錄搜索 UI 界面
- 使用 sqlite 數據庫存儲 shell 歷史記錄
- 備份以及同步已加密的 shell 歷史記錄
- 在不同的終端、不同的會話以及不同的機器上都有相同的歷史記錄
- 記錄退出代碼、cwd、主機名、會話、命令持續時間,等等。
- 計算統計數據,如 "最常用的命令"。
- 不替換舊的歷史文件
- 通過Alt-<num>快捷鍵快速跳轉到之前的記錄
- 通過 ctrl-r 切換過濾模式;可以僅從當前會話、目錄或全局來搜索歷史記錄
- 支持的 Shells:zsh、bash、fish
配置
使用默認的同步服務器
這將為您注冊由項目作者托管的默認同步服務器。一切都是端到端加密的,所以你的信息是安全的!
bash <(curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
atuin register -u <USERNAME> -e <EMAIL> -p <PASSWORD>
atuin import auto
atuin sync
僅離線 (不同步)
bash <(curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
atuin import auto
安裝
腳本方式 (推薦)
安裝腳本將幫助您完成設置,確保您的 shell 正確配置。
# 不要以root身份運行,如果需要的話,會要求root。
bash <(curl https://raw.githubusercontent.com/ellie/atuin/main/install.sh)
使用cargo
最好使用 rustup 來設置 Rust 工具鏈,然后你就可以運行下面的命令:
cargo install atuin
Homebrew
brew install atuin
MacPorts
Atuin 也可以在 MacPorts 中找到
sudo port install atuin
Pacman
Atuin 在 Arch Linux 的 社區存儲庫 中可用。
pacman -S atuin
從源碼編譯安裝
git clone https://github.com/ellie/atuin.git
cd atuin
cargo install --path .
Shell 插件
安裝二進制文件后,需要安裝 shell 插件。如果你使用的是腳本安裝,那么這一切應該都會幫您完成!
zsh
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
或使用插件管理器:
zinit load ellie/atuin
bash
我們需要設置一些鉤子(hooks), 所以首先需要安裝 bash-preexec :
curl https://raw.githubusercontent.com/rcaloras/bash-preexec/master/bash-preexec.sh -o ~/.bash-preexec.sh
echo '[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh' >> ~/.bashrc
然后設置 Atuin
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
fish
添加
atuin init fish | source
到 ~/.config/fish/config.fish 文件中的 is-interactive 塊中
常用命令
- atuin search <query>
Atuin 搜索支持帶有 * 或 % 字符的通配符。默認情況下,會執行前綴搜索(即,所有查詢都會自動附加通配符)。
參數 | 描述 |
? | 列出歷史記錄的目錄(默認:所有目錄) |
? | 不包括在此目錄中運行的命令(默認值:none) |
? | 按退出代碼過濾(默認:none) |
? | 不包括以該值退出的命令(默認值:none) |
? | 僅包括在此時間之前運行的命令(默認值:none) |
? | 僅包含在此時間之后運行的命令(默認值:none) |
? | 打開交互式搜索 UI(默認值:false) |
? | 對時間戳和持續時間使用人類可讀的格式(默認值:false) |
示例
# 打開交互式搜索 TUI
atuin search -i
# 打開預裝了查詢的交互式搜索 TUI
atuin search -i atuin
# 搜索所有以 cargo 開頭且成功退出的命令。
atuin search --exit 0 cargo
# 從當前目錄中搜索所有在2021年4月1日之前運行且失敗的命令。
atuin search --exclude-exit 0 --before 01/04/2021 --cwd .
#搜索所有以 cargo 開頭,成功退出且是在昨天下午3點之后運行的命令。
atuin search --exit 0 --after "yesterday 3pm" cargo
- atuin sync 手動觸發同步
Atuin 可以將您的歷史記錄備份到服務器,并使用它來確保多臺機器具有相同的 shell 歷史記錄。這都是端到端加密的,因此服務器操作員_永遠_看不到您的數據!
任何人都可以托管一個服務器(嘗試 atuin server start,更多文檔將在后面介紹),但作者在 https://api.atuin.sh 上托管了一個。這是默認的服務器地址,也可以進行更改。同樣,我_不能_看到您的數據,也不想。
注冊一個同步賬號
atuin register -u <USERNAME> -e <EMAIL> -p <PASSWORD>
用戶名(USERNAME)必須是唯一的,電子郵件(EMAIL)僅用于重要通知(安全漏洞、服務更改等),注冊后,意味著你也已經登錄了 :) 同步應該從這里自動發生!
密鑰
由于你的數據是加密的, Atuin 將為你生成一個密鑰。它被存儲在 Atuin 的數據目錄里( Linus 上為 ~/.local/share/atuin)
你也可以通過以下方式獲得它
atuin key
千萬不要跟任何人分享密鑰!
登錄
如果你想登錄到一個新的機器上,你需要你的加密密鑰(atuin key)。
atuin login -u <USERNAME> -p <PASSWORD> -k <KEY>
注銷
atuin logout
GitHub 倉庫:https://github.com/ellie/atuin