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