2026년 커맨드라인은 르네상스를 맞이했다. 기존 Unix 명령어를 대체하는 Rust 기반 고성능 도구들이 주류가 되었고, AI가 통합된 터미널 환경이 개발 생산성을 근본적으로 바꾸고 있다. 지금 당장 설치해야 할 모던 CLI 도구 10가지를 소개한다.

1. bat - cat의 완벽한 대체

cat 명령어에 구문 강조, 행 번호, Git 변경 표시를 추가한 도구다.

# 설치
brew install bat          # macOS
sudo apt install bat      # Ubuntu/Debian

# 기본 사용 (구문 강조 + 행 번호)
bat src/main.rs

# 특정 행 범위만 출력
bat --line-range 10:20 config.yaml

# Git 변경사항 표시
bat --diff app.py

# 언어 강제 지정
cat Dockerfile | bat --language Dockerfile

# 테마 변경
bat --theme="Dracula" main.go

# 사용 가능한 테마 목록
bat --list-themes

# .bashrc 또는 .zshrc에 alias 설정
alias cat='bat --paging=never'
alias catp='bat'  # 페이저 포함

2. fzf - 범용 퍼지 파인더

파일, 명령어 히스토리, Git 브랜치 등 모든 텍스트 입력에 대한 대화형 퍼지 검색을 제공한다.

# 설치
brew install fzf
$(brew --prefix)/opt/fzf/install  # 셸 통합 설치

# 파일 검색 (Ctrl+T)
# 명령어 히스토리 검색 (Ctrl+R)
# 디렉토리 이동 (Alt+C)

# 파일 미리보기와 함께 검색
fzf --preview 'bat --color=always --line-range :50 {}'

# Git 브랜치 선택
git branch | fzf | xargs git checkout

# 프로세스 검색하여 kill
ps aux | fzf | awk '{print $2}' | xargs kill -9

# 환경변수 검색
env | fzf

# 멀티 선택 (Tab으로 선택)
git status -s | fzf -m | awk '{print $2}' | xargs git add

# .zshrc에 fzf 기본 옵션 설정
export FZF_DEFAULT_OPTS='
  --height 40%
  --layout=reverse
  --border
  --preview "bat --color=always --line-range :100 {} 2>/dev/null || echo {}"'

3. eza - ls의 현대적 대체

exa의 후속 프로젝트로, ls를 대체하는 Rust 기반 파일 목록 도구다. 아이콘, Git 상태, 트리 뷰를 기본 지원한다.

# 설치
brew install eza

# 기본 사용 (아이콘 + 색상)
eza --icons

# 상세 정보 + Git 상태
eza -la --git --icons

# 트리 뷰 (2 depth)
eza --tree --level=2 --icons

# 수정 시간순 정렬
eza -la --sort=modified --reverse

# 특정 파일만 필터링
eza --icons *.ts *.tsx

# Git 무시 파일 제외
eza --git-ignore --icons

# alias 설정
alias ls='eza --icons'
alias ll='eza -la --git --icons'
alias lt='eza --tree --level=2 --icons'
alias la='eza -la --git --icons --sort=modified'

4. zoxide - cd의 지능형 대체

방문 빈도를 학습하여 짧은 키워드로 원하는 디렉토리에 즉시 이동한다.

# 설치
brew install zoxide

# .zshrc에 초기화 추가
eval "$(zoxide init zsh)"
# bash: eval "$(zoxide init bash)"

# 사용법
z projects     # ~/projects로 이동 (가장 자주 방문한 매칭 경로)
z my-app       # ~/projects/my-app 등으로 이동
z proj app     # 여러 키워드 조합 가능

# 대화형 선택 (fzf 연동)
zi             # fzf로 후보 목록에서 선택

# 학습 데이터 확인
zoxide query --list

# 특정 경로 제거
zoxide remove /old/path

# cd를 zoxide로 대체
alias cd='z'

5. ripgrep(rg) - grep의 고속 대체

Rust로 작성된 초고속 검색 도구. .gitignore를 자동으로 인식하고, 바이너리 파일을 건너뛴다.

# 설치
brew install ripgrep

# 기본 검색
rg "useState" src/

# 특정 파일 타입만 검색
rg --type ts "interface User"
rg -t py "def main"

# 대소문자 무시
rg -i "error" logs/

# 정규식 검색
rg "TODO|FIXME|HACK" --glob '*.{ts,js}'

# 검색 결과를 파일명만 출력
rg -l "deprecated" src/

# 특정 파일/디렉토리 제외
rg "config" --glob '!node_modules' --glob '!*.min.js'

# 컨텍스트 라인 포함
rg -C 3 "catch" src/  # 전후 3줄
rg -B 2 -A 5 "error" # 전 2줄, 후 5줄

# JSON 출력 (파이프라인 연동)
rg --json "pattern" | jq '.'

6. fd - find의 직관적 대체

# 설치
brew install fd

# 파일명 검색 (정규식 기본)
fd "component" src/

# 확장자로 필터링
fd -e ts -e tsx

# 숨김 파일 포함
fd -H ".env"

# 특정 타입만
fd -t f "config"   # 파일만
fd -t d "test"     # 디렉토리만

# 실행 명령 결합
fd -e tmp -x rm {}     # .tmp 파일 모두 삭제
fd -e ts -x wc -l {}   # .ts 파일별 행 수

# 크기 필터
fd -S +10M           # 10MB 이상 파일

# 수정 시간 필터
fd --changed-within 1d  # 24시간 이내 수정된 파일

7. delta - Git diff를 아름답게

# 설치
brew install git-delta

# Git 설정에 delta 연동
# ~/.gitconfig
[core]
    pager = delta

[interactive]
    diffFilter = delta --color-only

[delta]
    navigate = true
    light = false
    side-by-side = true
    line-numbers = true
    syntax-theme = Dracula

[merge]
    conflictstyle = diff3

[diff]
    colorMoved = default

# 사용: 평소처럼 git diff 실행
git diff           # 나란히 보기 + 구문 강조
git log -p         # 커밋별 diff도 delta 적용
git show HEAD      # 커밋 상세 보기

8. Taskfile - Makefile의 현대적 대체

# 설치
brew install go-task

# Taskfile.yml 작성
version: '3'

vars:
  APP_NAME: my-service
  VERSION:
    sh: git describe --tags --always

tasks:
  dev:
    desc: 개발 서버 실행
    cmds:
      - npm run dev
    sources:
      - src/**/*.ts

  build:
    desc: 프로덕션 빌드
    cmds:
      - npm run build
      - docker build -t {{.APP_NAME}}:{{.VERSION}} .
    deps: [lint, test]  # 사전 작업

  lint:
    desc: 코드 린트 실행
    cmds:
      - npx eslint src/ --fix

  test:
    desc: 테스트 실행
    cmds:
      - npm test -- --coverage

  deploy:
    desc: 배포
    prompt: "프로덕션에 배포하시겠습니까?"
    cmds:
      - docker push {{.APP_NAME}}:{{.VERSION}}
      - kubectl set image deployment/app app={{.APP_NAME}}:{{.VERSION}}

# 실행
task dev        # 개발 서버
task build      # 빌드 (lint, test 선행)
task deploy     # 배포 (확인 프롬프트)
task --list     # 사용 가능한 태스크 목록

9. lazygit - 터미널 Git UI

# 설치
brew install lazygit

# 실행
lazygit

# 주요 단축키:
# Space  - 파일 스테이징/언스테이징
# c      - 커밋
# P      - 푸시
# p      - 풀
# b      - 브랜치 관리
# s      - 스태시
# ?      - 전체 단축키 보기

# Git alias로 등록
git config --global alias.ui '!lazygit'

10. atuin - 셸 히스토리 혁신

# 설치
brew install atuin

# 초기화 (.zshrc에 추가)
eval "$(atuin init zsh)"

# Ctrl+R로 대화형 검색 (기본 바인딩 대체)
# 기능:
# - 전체 명령어 히스토리를 SQLite에 저장
# - 실행 시간, 종료 코드, 디렉토리 정보 포함
# - 퍼지 검색 + 필터링
# - 여러 머신 간 히스토리 동기화 (선택)

# 통계 확인
atuin stats

# 히스토리 검색
atuin search "docker"
atuin search --exit 0 "deploy"  # 성공한 명령어만

# 특정 디렉토리에서 실행한 명령어
atuin search --cwd ~/projects/my-app

한 번에 설치하기

# macOS (Homebrew)
brew install bat fzf eza zoxide ripgrep fd git-delta go-task lazygit atuin

# Ubuntu/Debian
sudo apt install bat fd-find ripgrep
cargo install eza zoxide git-delta
snap install lazygit
bash <(curl --proto '=https' --tlsv1.2 -sSf https://setup.atuin.sh)

# .zshrc 통합 설정
eval "$(zoxide init zsh)"
eval "$(atuin init zsh)"
eval "$(fzf --zsh)"

alias cat='bat --paging=never'
alias ls='eza --icons'
alias ll='eza -la --git --icons'
alias lt='eza --tree --level=2 --icons'
alias cd='z'
alias find='fd'
alias grep='rg'