
리눅스 사용자라면 이런 경험 한 번쯤 있으시죠? 분명 저 명령어로 해결할 수 있다는 건 알겠는데, 막상 구체적인 옵션이 떠오르지 않는다거나. 아니면 복잡한 ffmpeg나 kubectl 명령어를 쓸 때마다 브라우저를 열어 문법을 검색한다거나.
오늘 소개할 navi는 이런 문제를 깔끔하게 해결해 줄 인터랙티브 명령줄 치트시트 도구입니다.
navi란?
navi는 Rust로 작성된 인터랙티브 치트시트 도구입니다. 터미널에서 직접 명령어 예시를 찾아보고 실행할 수 있어서, 현재 작업 환경을 떠날 필요가 없습니다.
핵심 기능
- 🚀 인터랙티브 검색: 퍼지 검색(fuzzy search)으로 필요한 명령어를 빠르게 찾음
- 📝 변수 치환: 명령어 파라미터를 동적으로 입력할 수 있어 수동 편집이 불필요
- 🎨 높은 커스터마이징: 색상, 폰트, 레이아웃을 자유롭게 설정
- 📦 커뮤니티 주도: 자주 쓰는 도구의 치트시트가 기본 포함되며, 커뮤니티 자료도 import 가능
- 🔌 Shell 통합: Bash, Zsh, Fish 등 주요 Shell 지원
tldr 대신 navi를 선택해야 하는 이유
tldr도 널리 알려진 명령줄 치트시트 도구죠. 그런데 navi는 뭐가 다를까요?
| 기능 | tldr | navi |
|---|---|---|
| 인터랙션 방식 | 정적 표시 | 인터랙티브 선택 |
| 변수 치환 | ❌ 미지원 | ✅ 동적 입력 지원 |
| 커스텀 치트시트 | 제한적 | 완전 커스터마이징 |
| 명령어 실행 | 수동 복사·붙여넣기 | 직접 실행 가능 |
| 검색 경험 | 기본 | 퍼지 검색 |
한 마디로: tldr은 명령어 문법을 빠르게 확인할 때 좋고, navi는 명령어를 실제로 실행할 때 더 적합합니다.
navi 설치
방법 1: 패키지 매니저 사용 (권장)
Fedora/RHEL/CentOS:
sudo dnf install navi
Ubuntu/Debian (저장소 추가 필요):
sudo add-apt-repository universe
sudo apt update
sudo apt install navi
Arch Linux:
sudo pacman -S navi
macOS (Homebrew):
brew install navi
방법 2: Cargo 사용 (Rust 패키지 매니저)
Rust가 이미 설치되어 있다면:
cargo install navi
방법 3: 바이너리 파일 다운로드
GitHub Releases에서 사전 컴파일된 바이너리를 다운로드합니다:
# 최신 버전 다운로드 (예: v2.23.0)
wget https://github.com/denisidoro/navi/releases/download/v2.23.0/navi-v2.23.0-x86_64-unknown-linux-musl.tar.gz
# 압축 해제
tar -xzf navi-v2.23.0-x86_64-unknown-linux-musl.tar.gz
# 시스템 경로로 이동
sudo mv navi /usr/local/bin/
Shell 통합 설정
설치가 끝나면 Shell 설정 파일에 통합 코드를 추가해야 합니다.
Bash
~/.bashrc를 열고 다음을 추가:
eval "$(navi widget bash)"
Zsh
~/.zshrc를 열고 다음을 추가:
eval "$(navi widget zsh)"
Fish
~/.config/fish/config.fish를 열고 다음을 추가:
navi widget fish | source
설정 완료 후 Shell을 다시 로드합니다:
source ~/.bashrc # 또는 ~/.zshrc
기본 사용법
1. 명령어 검색
가장 간단한 방법은 그냥 검색하는 것입니다:
navi
인터랙티브 화면이 열리고, 키워드를 입력해 명령어를 검색할 수 있습니다. 예를 들어 git을 입력하면 Git 관련 치트시트가 모두 표시됩니다.
2. 위젯 사용 (권장)
Shell 통합을 설정하면 단축키로 navi를 호출할 수 있습니다:
- Bash/Zsh:
Ctrl + G - Fish:
Ctrl + G
단축키를 누르면 검색 화면이 나타나고, 명령어를 선택하면 바로 명령줄에 채워집니다.
3. 특정 도구의 치트시트 보기
navi --query git
navi --query docker
navi --query kubectl
4. 명령어 실행
navi 화면에서 명령어를 선택한 후:
Enter누르기: 명령어를 Shell에 채움Ctrl + Y누르기: 명령어를 바로 실행Esc누르기: 취소
커스텀 치트시트
navi의 진짜 강점은 완전 커스터마이징 가능한 치트시트입니다.
개인 치트시트 만들기
~/.config/navi/ 디렉토리에 .cheat 파일을 만듭니다:
mkdir -p ~/.config/navi
vim ~/.config/navi/my_tools.cheat
치트시트 형식
# 제목
% git 자주 쓰는 명령어
# 명령어 설명
$ 현재 브랜치 상태 확인
git status
# 변수 포함 명령어
$ 지정 브랜치로 전환
git checkout <branch>
# 주석이 있는 변수
$ 새 브랜치 생성 및 전환
git checkout -b <branch>
%% branch: 새 브랜치 이름
# 여러 변수
$ 코드 커밋
git commit -m "<message>"
%% message: 커밋 메시지
# 기본값이 있는 변수
$ 브랜치 푸시
git push <remote> <branch>
%% remote: 기본값 origin
%% branch: 현재 브랜치명
변수 유형
navi는 다양한 변수 유형을 지원합니다:
# 텍스트 입력
%% name: 이름을 입력하세요
# 기본값 포함
%% port: 기본값 8080
# 선택 목록
%% method: 기본값 GET, 선택 가능 GET POST PUT DELETE
# 명령어 결과를 옵션으로 사용
%% branch: 명령어 git branch --format='%(refname:short)', 백틱으로 감쌈
실전 예시: Docker 치트시트
% Docker 자주 쓰는 작업
$ 실행 중인 컨테이너 확인
docker ps
$ 모든 컨테이너 확인 (중지된 것 포함)
docker ps -a
$ 컨테이너 시작
docker start <container>
%% container: 명령어 docker ps -a --format '{{.Names}}'
$ 컨테이너 중지
docker stop <container>
%% container: 명령어 docker ps --format '{{.Names}}'
$ 컨테이너 삭제
docker rm <container>
%% container: 명령어 docker ps -a --format '{{.Names}}'
$ 컨테이너 로그 확인
docker logs -f <container>
%% container: 명령어 docker ps --format '{{.Names}}'
$ 컨테이너 진입
docker exec -it <container> <shell>
%% container: 명령어 docker ps --format '{{.Names}}'
%% shell: 기본값 /bin/bash, 선택 가능 /bin/bash /bin/sh
커뮤니티 치트시트 가져오기
navi 커뮤니티에서 다양한 도구의 치트시트를 관리하고 있어, 바로 가져다 쓸 수 있습니다.
navi 내장 기능 사용
# 사용 가능한 치트시트 저장소 탐색
navi repo add denisidoro/navi
# 또는 수동 추가
navi repo add https://github.com/denisidoro/cheats
추천 치트시트 저장소
- denisidoro/cheats - 공식 관리 범용 치트시트
- sv222/kubectl-autocompletion-navi - Kubernetes kubectl 명령어
- ormico/navi-cheatsheets - 다양한 개발 도구 치트시트
고급 팁
1. 태그로 명령어 분류
% 시스템 관리
tags: system
$ 디스크 사용량 확인
df -h
$ 메모리 사용량 확인
free -h
% Git 작업
tags: git, version-control
$ 커밋 히스토리 확인
git log --oneline
2. 조건부 변수
$ 환경별 배포
deploy <environment>
%% environment: 선택 가능 dev staging production
%% 만약 environment = production: echo "⚠️ 프로덕션 환경 배포입니다. 확인하세요!"
3. 외부 스크립트 호출
$ 데이터베이스 백업
./scripts/backup.sh <database>
%% database: 명령어 mysql -e "SHOW DATABASES;" | tail -n +2
4. 커스텀 컬러 테마
~/.config/navi/config.yaml을 편집:
style:
tag:
color: blue
width: 20
comment:
color: yellow
snippet:
color: green
실제 활용 사례
사례 1: 복잡한 명령어 빠르게 실행
Docker 자원을 주기적으로 정리해야 한다면? 치트시트를 하나 만드세요:
% Docker 정리
$ 중지된 모든 컨테이너 삭제
docker container prune -f
$ 사용하지 않는 이미지 삭제
docker image prune -f
$ 사용하지 않는 모든 자원 삭제
docker system prune -f
이제 Ctrl + G를 누르고 "docker 정리"를 검색하면, 원클릭으로 실행됩니다.
사례 2: 팀 협업 표준화
팀에서 자주 쓰는 작업을 치트시트로 만들어 공유 저장소에 올리세요:
# 팀 저장소
git clone https://github.com/your-team/team-navi-cheats.git ~/.config/navi/team
# config.yaml에 추가
paths:
- ~/.config/navi/team
새 멤버가 합류하면 즉시 표준화된 작업 매뉴얼을 갖게 됩니다.
사례 3: 새 도구 학습
Kubernetes를 배울 때 kubectl 치트시트를 import하세요:
navi repo add https://github.com/sv222/kubectl-autocompletion-navi
배우면서 바로 활용, 빠르게 익힐 수 있습니다.
자주 묻는 질문
Q: navi와 Fish Shell의 autospawn이 충돌하면?
A: Fish 설정에서 로드 순서를 조정해 navi 위젯이 마지막에 로드되도록 합니다.
Q: 커스텀 치트시트는 어떻게 백업하나요?
A: ~/.config/navi/ 디렉토리를 버전 관리에 올리세요:
cd ~/.config/navi
git init
git add .
git commit -m "Initial navi cheatsheets"
# 프라이빗 저장소에 푸시
Q: 중국어가 깨져 보이는데요?
A: 터미널과 폰트가 중국어를 지원하는지 확인하거나, config.yaml에서 설정하세요:
terminal:
font: "Noto Sans Mono CJK SC"
정리
navi는 명령줄 작업 효율을 눈에 띄게 높여주는 도구입니다. 특히 이런 분들에게 추천합니다:
- ✅ 복잡한 명령어를 자주 쓰는 개발자
- ✅ 여러 도구 사이를 빠르게 전환해야 하는 올라운더
- ✅ 팀 작업을 표준화하고 싶은 테크 리드
- ✅ 새로운 도구를 배우는 입문자
프로젝트 정보: - GitHub: https://github.com/denisidoro/navi - 언어: Rust - Stars: 16,400+ - 라이선스: Apache-2.0
navi 설정에 30분 투자하면, 앞으로 매일 명령어 검색에 쓰던 10분을 절약할 수 있습니다. 확실한 투자죠!
관련 글: - tldr-pages/tldr - 단순화된 man pages - cheat.sh - 설치 없이 쓸 수 있는 온라인 치트시트 - fzf - 범용 퍼지 파인더, navi와 함께 쓰기 좋음