같은 일, 더 친절한 기본값
bat, eza, fd, ripgrep, dust와 duf는 고전 Unix 명령이 하던 일을 사람이 읽기 좋은 기본 출력으로 수행해. 목적은 비슷하지만 옵션과 출력 계약까지 호환되지는 않아. 대화형 탐색에서는 새 도구를 활용하고, 이식성과 안정된 출력이 필요한 스크립트에서는 원래 명령의 계약을 지켜.
각 도구가 맡는 일
bat은cat처럼 파일을 보여 주면서 구문 강조, 줄 번호와 페이지 단위 탐색을 더해.eza는ls와 비슷한 목록에 색, Git 상태와 트리 보기를 더해.fd는find보다 짧은 검색 문법을 제공하고 기본적으로.gitignore의 제외 규칙을 따라.ripgrep(rg)은 저장소 검색에 맞춘 정규식 검색기로, 제외 규칙을 따르고 바이너리 파일을 건너뛰어.dust는du의 디스크 사용량을 정렬된 트리로 보여 줘.duf는df의 마운트 정보를 읽기 쉬운 표로 보여 줘.
한 번에 설치
brew install bat eza fd ripgrep dust duf자주 쓰게 될 rg와 fd
rg TODO --type py # Python 파일의 모든 TODO
rg -l 'class Foo' src/ # 패턴이 든 파일명만 출력
rg -A 3 'def main' # 일치한 줄 뒤의 세 줄도 출력
fd '\.test\.ts$' # TypeScript 테스트 파일 찾기
fd -e jpg -x convert {} {.}.png # 모든 jpg를 png로이름을 덮어쓰기 전에 계약을 비교해
alias cat=bat처럼 원래 명령 이름을 바꾸면 옵션과 출력 차이가 보이지 않게 돼. 대화형 셸에서 별칭이 스크립트에 그대로 적용되지 않는 경우가 많더라도, 복사한 명령과 함수 안에서 혼란이 생겨. 새 이름 그대로 익혀 두면 어느 도구의 동작인지 분명해.
빠른 이유를 공정하게 비교해
ripgrep은 기본적으로 숨은 파일, ignore된 디렉터리, 바이너리 파일을 건너뛰어. grep과 속도를 비교하려면 검색 범위와 정규식 의미를 먼저 맞춰야 해. 더 적은 데이터를 읽은 결과와 같은 데이터를 더 빨리 처리한 결과는 다른 이야기야.
사람용 출력과 기계용 출력을 나눠
색, 아이콘, 표, 자동 pager는 사람이 읽을 때 훌륭하지만 파이프와 파서에는 잡음이 될 수 있어. 자동화에 넣기 전에는 색을 끄는 옵션, 기계가 안정적으로 읽을 수 있는 형식, 종료 상태를 확인해. 편한 기본값이 곧 안정된 프로토콜은 아니야.