콘텐츠로 이동

Atuin

SQLite 저장소, 암호화된 동기화, 머신과 세션 간 전문 검색을 지원하는 마법 같은 셸 히스토리 관리자.

명령어설명
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh공식 스크립트로 설치
brew install atuinmacOS에서 Homebrew로 설치
cargo install atuincrates.io에서 설치
pacman -S atuinArch Linux에서 설치
apt install atuinDebian/Ubuntu에서 설치 (사용 가능한 경우)
dnf install atuinFedora에서 설치
nix-env -i atuinNixOS에서 설치
scoop install atuinWindows에서 Scoop으로 설치
atuin --version설치된 버전 확인
명령어설명
atuin init bash >> ~/.bashrcBash용 초기화
atuin init zsh >> ~/.zshrcZsh용 초기화
atuin init fish >> ~/.config/fish/config.fishFish용 초기화
atuin init nushellNushell 초기화 명령 표시
# Bash — ~/.bashrc에 추가
eval "$(atuin init bash)"

# Zsh — ~/.zshrc에 추가
eval "$(atuin init zsh)"

# Fish — ~/.config/fish/config.fish에 추가
atuin init fish | source

# Zsh에서 위쪽 화살표 비활성화 (Ctrl+R만 사용)
eval "$(atuin init zsh --disable-up-arrow)"
명령어설명
Ctrl + R대화형 히스토리 검색 열기
Ctrl + R 후 검색어 입력대화형으로 히스토리 필터링
Enter선택한 명령 실행
Tab실행하지 않고 명령 삽입
Ctrl + R 다시 누르기검색 모드 순환
↑ / ↓검색 결과 탐색
Escape검색 취소
Ctrl + D선택한 항목을 히스토리에서 삭제
Alt + 1-4필터 모드 전환 (전체/호스트/세션/디렉토리)
명령어설명
atuin history list최근 명령 히스토리 표시
atuin history list --cmd-only명령만 표시 (메타데이터 없음)
atuin history list --format "{time} {command}"사용자 정의 출력 형식
atuin history list --reverse오래된 순으로 표시
atuin history list -n 50최근 50개 명령 표시
atuin history count전체 히스토리 수 표시
atuin history last가장 최근 명령 표시
Atuin은 Ctrl+R로 4가지 검색 모드를 순환합니다:

1. Fuzzy    — 어떤 순서로든 문자 매칭 (fzf처럼)
2. Prefix   — 명령 시작부터 매칭
3. Fulltext — 어디서든 정확한 부분 문자열 매칭
4. Skim     — Skim 스타일 퍼지 매칭

검색 중 Ctrl+R로 모드를 전환하거나 설정 파일에서
기본값을 설정하세요.
명령어설명
atuin search query명령줄에서 히스토리 검색
atuin search "git commit"특정 명령 검색
atuin search --cwd현재 디렉토리만 히스토리 검색
atuin search --session현재 세션만 히스토리 검색
atuin search --global머신 전체의 모든 히스토리 검색
atuin search --interactive대화형 UI 열기
명령어설명
atuin search --after "2024-01-01"특정 날짜 이후 검색
atuin search --before "yesterday"특정 시간 이전 검색
atuin search --after "1 hour ago"최근 1시간 이내 검색
atuin search --after "3 days ago"최근 3일 이내 검색
atuin search --after "last week"최근 1주일 이내 검색
atuin search --before "2024-06-01" --after "2024-01-01"날짜 범위
명령어설명
atuin search --exit 0성공한 명령만 검색
atuin search --exit 1실패한 명령만 검색
atuin search --exit 127”명령을 찾을 수 없음” 오류 검색
atuin search --limit 50결과 수 제한
명령어설명
atuin search --cwd /path/to/dir특정 작업 디렉토리로 필터링
atuin search --hostname myserver호스트명으로 필터링
atuin search --session SESSION_ID세션 ID로 필터링
atuin search --duration ">5s"실행 시간으로 필터링
atuin search --duration "<100ms"빠른 명령 찾기
명령어설명
atuin search --format "{time} {command}"시간과 명령 표시
atuin search --format "{duration} {command}"실행 시간과 명령 표시
atuin search --format "{host} {command}"호스트명과 명령 표시
atuin search --format "{user} {directory} {command}"전체 컨텍스트
# 실패한 모든 docker 명령 찾기
atuin search docker --exit 1

# 지난주의 git 작업 찾기
atuin search git --after "1 week ago"

# 오래 실행된 명령 찾기 (30초 이상)
atuin search --duration ">30s"

# 특정 프로젝트에서 실행한 명령 찾기
atuin search --cwd ~/projects/myapp

# 업무용 노트북에서 실행한 명령 찾기
atuin search --hostname work-mbp
명령어설명
atuin register -u username -e email -p password동기화 계정 생성
atuin login -u username -p password동기화 계정 로그인
atuin login -u username -p password -k KEY암호화 키로 로그인
atuin logout동기화 계정 로그아웃
atuin account계정 상태 표시
atuin account delete동기화 계정 삭제
atuin key암호화 키 표시 (반드시 저장하세요!)
atuin status동기화 상태 표시
명령어설명
atuin sync서버와 히스토리 동기화
atuin sync -f전체 동기화 강제
atuin sync --force모든 히스토리 강제 재업로드
모든 데이터는 종단간 암호화서버는 평문 히스토리를 볼 수 없음
# 머신 1에서 최초 설정
atuin register -u myname -e me@example.com -p mypassword
atuin key  # 이 키를 저장하세요 — 다른 머신에서 필요합니다
atuin sync

# 머신 2에서 설정
atuin login -u myname -p mypassword -k YOUR_ENCRYPTION_KEY
atuin sync

# 암호화 키는 다음과 같습니다:
# abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890

# 키 없이는 서버가 히스토리를 복호화할 수 없습니다.
# 키를 잃어버리면 동기화된 히스토리는 복구 불가능합니다.
# 자체 Atuin 동기화 서버 실행
docker run -d \
  --name atuin-server \
  -p 8888:8888 \
  -v atuin-data:/config \
  ghcr.io/atuinsh/atuin:latest \
  server start

# 클라이언트를 자체 호스팅 서버로 지정
# ~/.config/atuin/config.toml에서:
# sync_address = "http://your-server:8888"
명령어설명
atuin import auto셸 히스토리 자동 감지 및 가져오기
atuin import bashBash 히스토리에서 가져오기
atuin import zshZsh 히스토리에서 가져오기
atuin import zsh-hist-dbZsh hist-db 플러그인에서 가져오기
atuin import fishFish 히스토리에서 가져오기
atuin import reshRESH 히스토리에서 가져오기
atuin import nuNushell 히스토리에서 가져오기
atuin import nu-hist-dbNushell SQLite 히스토리에서 가져오기
# 셸을 자동 감지하고 가져오기
atuin import auto

# Zsh 히스토리 구체적으로 가져오기
atuin import zsh

# 가져온 항목 수 확인
atuin history count

# 가져오기가 작동하는지 확인
atuin search --limit 5
명령어설명
atuin stats히스토리 통계 표시
atuin stats --count 20가장 많이 사용한 상위 20개 명령 표시
atuin stats --period day오늘의 통계
atuin stats --period week이번 주 통계
atuin stats --period month이번 달 통계
atuin stats --period all전체 기간 통계
atuin history count전체 히스토리 항목 수
$ atuin stats --count 10
┌─────────┬─────────────────┬───────┐
│ Rank    │ Command         │ Count │
├─────────┼─────────────────┼───────┤
│ 1       │ git status      │  1847 │
│ 2       │ ls              │  1523 │
│ 3       │ cd              │  1201 │
│ 4       │ git diff        │   987 │
│ 5       │ vim             │   842 │
│ 6       │ git add         │   756 │
│ 7       │ docker ps       │   689 │
│ 8       │ npm run         │   534 │
│ 9       │ git commit      │   498 │
│ 10      │ make            │   423 │
└─────────┴─────────────────┴───────┘

전체 명령 수:    45,231
고유 명령 수:     8,432
명령어설명
~/.config/atuin/config.toml메인 설정 파일
atuin default-config기본 설정 출력
명령어설명
search_mode = "fuzzy"퍼지 검색 모드 설정
search_mode = "prefix"접두사 검색 모드 설정
search_mode = "fulltext"전문 검색 모드 설정
search_mode = "skim"skim 퍼지 검색 모드 설정
filter_mode = "global"기본적으로 모든 히스토리 검색
filter_mode = "host"기본적으로 현재 호스트 검색
filter_mode = "session"기본적으로 현재 세션 검색
filter_mode = "directory"기본적으로 현재 디렉토리 검색
filter_mode_shell_up_key_binding = "session"위쪽 화살표로 현재 세션 검색
명령어설명
style = "compact"컴팩트 UI 스타일 사용
style = "full"전체 UI 스타일 사용
style = "auto"터미널에 따라 자동 감지
inline_height = 40인라인 검색 높이 설정
show_preview = true명령 미리보기 패널 표시
show_help = true키 바인딩 도움말 표시
show_tabs = true필터 모드 탭 표시
max_preview_height = 4미리보기 최대 줄 수
# ~/.config/atuin/config.toml

## 데이터베이스 설정
db_path = "~/.local/share/atuin/history.db"

## 검색 설정
search_mode = "fuzzy"
filter_mode = "global"
filter_mode_shell_up_key_binding = "host"

## UI 설정
style = "auto"
inline_height = 40
show_preview = true
show_help = true
show_tabs = true
max_preview_height = 4
invert = false

## 히스토리 설정
update_check = true
sync_frequency = "5m"
sync_address = "https://api.atuin.sh"

## 키 바인딩 (기본값)
# Ctrl+R = 검색
# 위쪽 화살표 = 검색 (비활성화하지 않은 경우)
# Tab = 실행하지 않고 수락
# Enter = 수락 및 실행

## 비밀 필터 — 비밀이 포함된 명령을 기록하지 않음
history_filter = [
  "^export.*TOKEN",
  "^export.*SECRET",
  "^export.*PASSWORD",
  "^export.*KEY",
  ".*AWS_SECRET.*",
]

## 특정 명령 무시
history_filter = [
  "^ls$",
  "^cd$",
  "^pwd$",
  "^exit$",
  "^clear$",
]

## 동기화 설정
sync_frequency = "5m"
# sync_address = "https://api.atuin.sh"  # 기본 서버
# sync_address = "http://localhost:8888"  # 자체 호스팅
설명
Ctrl + R검색 열기 / 검색 모드 순환
↑ / ↓결과 탐색
Enter선택한 명령 실행
Tab실행하지 않고 명령 삽입
Escape검색 취소
Ctrl + D선택한 히스토리 항목 삭제
Alt + 1전체 필터로 전환
Alt + 2호스트 필터로 전환
Alt + 3세션 필터로 전환
Alt + 4디렉토리 필터로 전환
Ctrl + U검색 쿼리 지우기
Ctrl + W단어 역방향 삭제
명령어설명
~/.local/share/atuin/history.db기본 데이터베이스 위치
데이터베이스는 SQLite 형식 사용모든 SQLite 도구로 쿼리 가능
sqlite3 ~/.local/share/atuin/history.db ".tables"데이터베이스 테이블 나열
# SQLite로 데이터베이스 직접 열기
sqlite3 ~/.local/share/atuin/history.db

# 전체 항목 수 세기
sqlite3 ~/.local/share/atuin/history.db \
  "SELECT COUNT(*) FROM history;"

# 가장 오래 실행된 명령 찾기
sqlite3 ~/.local/share/atuin/history.db \
  "SELECT command, duration FROM history
   ORDER BY duration DESC LIMIT 10;"

# 디렉토리별 명령
sqlite3 ~/.local/share/atuin/history.db \
  "SELECT cwd, COUNT(*) as cnt FROM history
   GROUP BY cwd ORDER BY cnt DESC LIMIT 10;"
  1. 기존 히스토리를 먼저 가져오기 — 설치 직후 atuin import auto를 실행하여 처음부터가 아닌 풍부한 히스토리 데이터베이스로 시작하세요.

  2. 퍼지 검색 모드 사용 — 가장 유연한 매칭을 위해 search_mode = "fuzzy"를 설정하세요. 검색 중 Ctrl+R로 언제든지 다른 모드로 전환할 수 있습니다.

  3. 히스토리에서 비밀 필터링 — 토큰, 비밀번호, API 키가 포함된 명령의 기록을 방지하기 위해 설정의 history_filter에 패턴을 추가하세요.

  4. 암호화 키 저장atuin key를 실행하고 비밀번호 관리자에 키를 보관하세요. 키를 잃어버리면 다른 머신에서 동기화된 히스토리는 영구적으로 복구 불가능합니다.

  5. 머신 간 동기화 설정 — 암호화된 동기화는 Atuin의 핵심 기능입니다. 계정을 등록하고 모든 머신을 설정하여 어디서나 통합 히스토리를 사용하세요.

  6. 디렉토리 범위 검색 사용 — 검색 중 Alt+4를 눌러 현재 디렉토리에서 실행한 명령만 필터링하세요 — 프로젝트별 워크플로우에 완벽합니다.

  7. 위쪽 화살표 사용자 정의 — 위쪽 화살표가 현재 머신의 명령만 표시하도록 filter_mode_shell_up_key_binding = "host"를 설정하고, Ctrl+R은 전체 검색에 사용하세요.

  8. 자체 호스팅 서버 설정 — 민감한 데이터를 다루는 경우 Docker로 자체 Atuin 서버를 실행하여 동기화된 히스토리를 완전히 제어하세요.

  9. 정기적으로 통계 확인 — 주기적으로 atuin stats를 실행하여 패턴을 파악하고 효율성을 위해 별칭을 만들 수 있는 명령을 식별하세요.

  10. 작은 터미널에 컴팩트 스타일 사용 — 분할 창 터미널에서 수직 공간이 제한된 경우 style = "compact"를 설정하세요.