터미널에서 매일 같은 명령을 50번 이상 치고 있다면 셸이 느린 게 아니라 손이 느린 겁니다.
도구를 안 바꾸면 1년 동안 누적된 키 입력이 수십 시간 단위로 쌓입니다.
현직 팀장으로 PR 리뷰와 인프라 작업을 매일 도는 입장에서, 2026년 5월 시점 제 셸에 alias로 박혀있는 CLI 도구 13가지를 하루 워크플로우 순서대로 정리했습니다.
이 글을 끝까지 읽으면 셸 시작·검색·파일 작업·모니터링·API·Git/Docker 6개 단계에서 매일 쓰는 CLI 도구와 alias 스니펫, 안 쓰는 게 나은 상황까지 가져갑니다.

선별 기준 — 왜 이 13개인가
"필수 CLI 50선" 같은 글은 흔합니다. 부족한 건 "직접 매일 켜는 도구만 거른 글"입니다. 아래 3가지 중 2개 이상 만족하는 도구만 본문에 넣었습니다.
| 기준 | 내용 |
|---|---|
| 매일 사용 | 최근 30일간 셸 히스토리에 100회 이상 등장 |
| 표준 명령 대체 | cd, ls, cat, grep, du, top, curl 같은 기본 명령을 압도적으로 빠르게 만듦 |
| 설치 30초 | 패키지 매니저 한 줄로 끝. 설정 파일 없이 즉시 효과 |
13개 중 9개는 Rust 또는 Go로 작성된 차세대 유틸로, 옛 GNU 도구 대비 5~10배 빠릅니다. 처음 손에 익을 때까지 1주일 정도 걸리지만 그 후엔 표준 명령으로 못 돌아갑니다.

Stage 1 — 셸 시작 (3개)
1. starship — 셸 프롬프트
zsh·bash·fish·PowerShell까지 같은 설정 파일로 동기화되는 크로스셸 프롬프트입니다. Git 브랜치·node 버전·kubectl 컨텍스트·AWS 프로파일을 자동 감지해 라인에 박아줍니다.
설치 (Starship 공식 install 스크립트 실행):
curl -sS starship.rs/install.sh | sh
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
- 강점: zsh 별 플러그인(p10k 등) 안 깔아도 됨. macOS·Windows 동일 설정.
- 단점: 처음 셸 부팅 100~200ms 추가. 노트북에선 체감 미미.
- 안 쓰는 게 나은 상황: 서버 SSH 단발성 작업이면 기본 PS1이 가벼움.
2. zoxide — cd 강화
방문한 디렉터리를 학습해서 부분 매칭으로 점프합니다. z proj만 치면 가장 자주 들어간 ~/work/projects/big-project로 이동.
# 설치 (macOS 기준)
brew install zoxide
# .zshrc에 추가
eval "$(zoxide init zsh --cmd cd)" # cd 자체를 zoxide로 덮어쓰기
- 강점: 기존
cd호환 유지. 설정 0건. - 단점: 처음 1주일은 학습 데이터 없어서 일반 cd처럼 동작. 1주 지나면 폭발적.
3. atuin — 셸 히스토리 동기화
여러 머신 사이에 셸 히스토리를 동기화하고, Ctrl+R을 강력한 검색 UI로 바꿉니다. 처음엔 기본 history만 쓰다가 노트북·데스크탑·서버 3대를 오가면서 작업하다 보니 히스토리 분실이 심해 도입했습니다.
- 강점: SQLite 기반 풀텍스트 검색. 지난 6개월 명령도 한 번에.
- 단점: 자체 서버 운영 안 하면 클라우드 동기화에 가입 필요(무료 플랜 있음). 보안 민감하면 셀프호스팅.
Stage 2 — 검색 (2개)
4. ripgrep (rg)
grep -r보다 5~10배 빠른 검색기. .gitignore를 자동 인식해서 node_modules 같은 잡음 폴더를 알아서 건너뜁니다.
# 패턴 검색
rg "useState" --type tsx
# 컨텍스트 5줄 같이
rg -C5 "TODO" src/
# 한국어 정규식
rg "한[가-힣]+" docs/
- 강점: 한국어 정규식 안정적. 큰 모노레포에서 GNU grep은 30초 걸리는 검색이 3초.
- 단점: 일부 옵션이 grep과 호환 안 됨. CI 스크립트는 grep 그대로 두는 게 안전.
5. fzf — 퍼지 파인더
표준 입력으로 들어온 라인을 인터랙티브하게 거를 수 있는 도구. 셸 통합으로 Ctrl+R 히스토리 검색·Ctrl+T 파일 검색이 즉시 됩니다. 한 번 손에 익으면 GUI 파일 탐색기를 거의 안 열게 됩니다.
# 설치 후 기본 키바인딩 설치
$(brew --prefix)/opt/fzf/install
# 자주 쓰는 조합
git checkout $(git branch | fzf) # 브랜치 인터랙티브 선택
kill -9 $(ps aux | fzf | awk '{print $2}') # 프로세스 검색 후 종료
- 강점: 어떤 명령이든
| fzf로 인터랙티브 선택 추가 가능. - 단점: alias 잘못 짜면 파이프 자동완성과 충돌. 설치 후 키바인딩 셋업이 필수.
Stage 3 — 파일 작업 (2개)
6. eza (구 exa) — ls 대체
색상·아이콘·git 상태를 한 번에 보여줍니다. eza --git -l로 파일 옆에 git 변경 표시까지 같이 뜸.
alias ls='eza --git --icons'
alias ll='eza -l --git --icons'
alias tree='eza -T'
- 강점: tree 명령 따로 안 깔아도 됨.
- 단점: 아이콘은 Nerd Font 설치된 터미널에서만 정상. 일반 폰트면 □로 보임.
7. bat — cat 대체
문법 하이라이팅·라인 번호·git diff 통합. 페이저까지 자동(파일이 화면보다 길면 less처럼 동작).
alias cat='bat --paging=never --style=plain' # cat 호환 모드
bat src/index.ts # 풀모드: 라인 번호 + 색
- 강점: 코드 파일 빠르게 훑을 때 필수. man 페이지 백엔드로도 활용 가능.
- 단점: 파이프로 다른 명령에 넘길 때 색 코드가 같이 가서 깨질 수 있음.
--paging=never --style=plain로 cat 호환 모드 강제.
Stage 4 — 모니터링 (2개)
8. dust — du 대체
디스크 사용량을 디렉터리 트리 + 막대 그래프로 시각화합니다. du -sh * 결과를 정렬해서 어디가 무거운지 한눈에.
dust ~/Downloads # 다운로드 폴더 어디가 무거운가
dust -d 3 . # 깊이 3까지만
- 강점: 결과가 자동 정렬됨. 어떤 폴더가 디스크 잡아먹는지 즉시 보임.
- 단점: 매우 큰 트리(파일 100만+)에선 기본
du보다 느릴 때 있음.
9. htop — top 대체
기본 top을 마우스·색상·트리뷰까지 지원하는 인터랙티브 모니터로 바꿉니다. 거의 모든 리눅스 서버에 깔려있을 만큼 표준화됐습니다.
htop # 일반 실행
htop -t -u $USER # 내 프로세스만 트리뷰로
- 강점: 키보드 만으로 프로세스 검색·정렬·종료 끝. 서버 디버깅에 필수.
- 단점: 컨테이너 안에서 호스트 전체를 못 봄. 그땐
procs같은 도구를 추가로.
Stage 5 — JSON·HTTP (2개)
10. jq — JSON 처리기
API 응답·로그·kubectl get -o json 결과를 셸에서 자르고 변환할 수 있는 표준 도구. 셸 스크립트로 자동화할 때 필수.
# 자주 쓰는 패턴
curl -s api.example.com/users | jq '.[] | {name, email}'
kubectl get pods -o json | jq '.items[].metadata.name'
cat package.json | jq -r '.dependencies | keys[]'
- 강점: API 디버깅·로그 분석에서 sed/awk 조합보다 5배 짧음.
- 단점: jq 문법은 처음 1주일 어렵다. 자주 쓰는 5개 패턴만 외워두면 됨.
11. httpie (http) — curl 대체
JSON·헤더 표시가 깔끔한 HTTP 클라이언트. POST 바디를 key=value 형태로 자연스럽게 입력 가능.
http GET api.example.com/users id==123 # 쿼리 파라미터
http POST api.example.com/login email=a@b.c # JSON 자동 인코딩
http --auth user:pass GET api.example.com/me # 인증 헤더
- 강점: 응답 색상화·하이라이팅. JSON 응답이 한눈에.
- 단점: CI 스크립트는 curl 표준이 안전. httpie는 인터랙티브 디버깅 전용으로.

Stage 6 — Git·Docker (2개)
12. lazygit — Git TUI
키보드 단축키만으로 stage·commit·rebase·cherry-pick·log 그래프까지 끝나는 Git 인터랙티브 UI. 4년째 매일 쓰면서 git CLI 명령을 절반 이상 쓸 일이 없어졌습니다.
처음엔 git rebase -i를 CLI로 직접 하다가 충돌 해결 도중 잘못 abort 해서 작업 1시간을 날린 적이 있습니다. lazygit 도입 후로 같은 실수는 0건. 화면에서 visual 하게 보이니 실수 자체가 줄어듭니다.
- 강점: rebase·cherry-pick 같은 복잡한 작업이 안전해짐.
- 단점: pre-commit hook이 lazygit 환경에서 다르게 동작할 때가 가끔 있음. 그땐 CLI로 폴백.
13. lazydocker — Docker TUI
docker ps·docker logs·docker stats를 인터랙티브 하나로. 컨테이너 골라서 로그 즉시 보고, CPU·메모리 시각화까지.
brew install lazydocker
lazydocker
- 강점: 컨테이너 5개 이상 띄우는 환경에서 진가. 로그 검색이 즉시.
- 단점: K8s 환경이면 k9s가 더 적합. lazydocker는 로컬 docker-compose 작업용.

셸 설정 한 번에 — alias 세트
13개 도구를 깔고 나서 ~/.zshrc(또는 .bashrc)에 한 번 박으면 평생 씁니다.
# 셸 시작
eval "$(starship init zsh)"
eval "$(zoxide init zsh --cmd cd)"
eval "$(atuin init zsh)"
# 파일·검색
alias ls='eza --git --icons'
alias ll='eza -l --git --icons'
alias tree='eza -T'
alias cat='bat --paging=never --style=plain'
alias grep='rg'
alias du='dust'
# 모니터링·HTTP
alias top='htop'
alias curl='curl' # 호환 위해 curl은 그대로 두고 http는 별도
# Git/Docker (필요할 때만 명시 호출)
# lg → lazygit, ld → lazydocker
alias lg='lazygit'
alias ld='lazydocker'
grep을 rg로, du를 dust로 alias 거는 건 호불호 갈립니다. CI 스크립트와 충돌이 우려되면 alias 안 걸고 rg·dust를 직접 호출하세요.
트러블슈팅 — bat·eza alias 후 셸 스크립트 깨지는 경우
증상: cat을 bat으로 alias 걸었더니 셸 스크립트(#!/bin/bash)에서 cat 호출이 깨지거나, CI에서 ls 결과 파싱이 실패.
원인: alias는 셸이 명령을 해석하기 전 단계에서 치환됩니다. 비대화형 셸·서브셸·#!/bin/bash 스크립트는 alias를 무시하지만, 일부 셸 함수에선 환경에 따라 적용될 수 있습니다.
해결: alias는 인터랙티브 셸 전용으로 두고, 스크립트 안에서는 전체 경로 또는 원본 명령을 직접 호출하세요.
# 스크립트에서는 alias 무시하고 표준 명령 호출
\cat file.txt # 백슬래시로 alias 우회
/bin/cat file.txt # 풀 경로 호출
command cat file.txt # command 빌트인으로 우회
.zshrc의 alias는 [[ -o interactive ]] 가드로 감싸면 더 안전합니다.
마무리
"터미널에서 매일 똑같은 명령을 치고 있다면, 도구가 아니라 손이 적응한 겁니다."
13개 도구를 한 번에 다 깔지 마세요. 부담만 됩니다. starship → zoxide → ripgrep → fzf 4개부터 1주일 적응한 뒤 나머지를 천천히 추가하시는 걸 권장합니다.
CLI 도구를 옮기는 비용은 1주일 어색함이고, 안 옮기는 비용은 매년 누적되는 손가락 시간입니다. 팀 5명+ 환경이면 .zshrc 공유 설정을 dotfiles 레포로 만들어두는 게 신규 합류자 온보딩에 큰 차이를 만듭니다.
동일 환경이면 위 alias 세트 그대로 써도 됩니다.
자주 묻는 질문
Q. Windows에서도 이 13개 도구 쓸 수 있나요?
A. WSL2(Ubuntu) 안에서는 그대로 다 됩니다. PowerShell 기본이면 starship·zoxide·ripgrep·bat·fzf까지는 native 지원이 되고, eza·dust·htop은 WSL 통해 쓰는 게 일반적입니다. Windows에서 개발하시면 WSL2 + Windows Terminal 조합이 표준입니다.
Q. starship과 oh-my-zsh의 powerlevel10k 중 뭐가 나은가요?
A. 크로스셸 환경이면 starship, zsh 단독이면 p10k가 살짝 더 빠릅니다. 저는 macOS·Linux·Windows를 같이 쓰다 보니 starship 한 곳에서 끝내는 게 편해 옮겼습니다.
Q. lazygit 말고 GUI 클라이언트(Sourcetree·GitKraken)는요?
A. 화면 전환 비용이 다릅니다. 터미널에서 작업하다가 GUI 띄우면 컨텍스트 끊깁니다. lazygit은 같은 터미널 안에서 끝나니 흐름이 안 깨집니다. 다만 충돌 해결 시각화는 GUI가 더 직관적.
Q. 13개 다 macOS 기준인가요? Linux는요?
A. 거의 다 동일합니다. macOS는 brew install, Ubuntu는 apt install 또는 cargo install. Rust 기반 도구(eza·dust·bat·ripgrep)는 cargo install <name> 한 줄로 깔리니 패키지 저장소 버전이 낡았으면 cargo로 받는 게 빠릅니다.
Q. atuin 클라우드 동기화 안 쓰고 로컬만 쓸 수 있나요?
A. 됩니다. atuin login 안 하면 로컬 SQLite만 사용. Ctrl+R 검색은 그대로 작동합니다. 머신 1대만 쓰면 로컬 모드로 충분.
설치 환경: macOS 14·Ubuntu 22.04·Windows 11(WSL2), zsh 5.9, Node.js v24, Bun 1.3.11
'IT > Program' 카테고리의 다른 글
| 교사인 아내를 위해 데스크탑 위젯을 만들었다 (0) | 2026.03.29 |
|---|
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!