알아두면 좋은 CLI 도구들
외우는 게 아니라 있다는 걸 아는 것.
한눈에
- CLI 도구 = 외우는 게 아니라 '필요할 때 이게 있다'를 아는 것
- 네트워크·전송 = wget(통째 다운)·ssh(원격 접속)·rsync(변경분만 전송)
- 패키지 매니저 = npm(Node)·apt/brew(OS)·Maven·Gradle(pip의 자바 격)
- 컨테이너·인프라 = docker(이미지 pull·build·run)·kubectl(쿠버네티스 제어)
- 실력차 나는 기본기 = grep·sed·awk(텍스트)·jq(JSON)·lsof -i :포트(포트 점유 찾기)
- 체감 최고 = jq, rsync, grep·sed·awk 삼총사, 백엔드면 lsof -i :포트
CLI 도구는 영어 단어처럼 통째로 외우는 게 아니다. 필요한 순간에 "아, 이런 걸 해주는 도구가 있었지" 하고 떠올려 찾아 쓰는 것이다. 아래를 다 못 외워도 된다. 어떤 갈래에 뭐가 있는지 지도만 머리에 있으면, 막힐 때 정확히 그 도구를 검색해 꺼내 쓴다. 그 지도부터 그린다.
용도별로 한 장
도구를 하나씩 외우기 전에, 무슨 일을 하는지로 묶어두면 기억에 걸린다. 크게 네 갈래다.
| 갈래 | 도구 | 한 줄 |
|---|---|---|
| 네트워크·전송 | wget / ssh / scp·rsync | 파일·사이트 통째 다운(이어받기·재귀) / 원격 접속(배포·로그 필수) / 원격 파일 전송 |
| 패키지 매니저 | npm·yarn·pnpm / apt·brew / Maven·Gradle | Node / OS레벨(apt=우분투, brew=맥) / pip의 자바 격 |
| 컨테이너·인프라 | docker / kubectl | 이미지 pull·build·run / 쿠버네티스 제어 |
| 터미널 기본기 | grep·sed·awk / jq / chmod·chown / ps·kill·lsof | 텍스트 검색·치환·가공 / JSON 파싱 / 권한 / 프로세스 |
네트워크 쪽에서 하나만 더 짚으면, scp와 rsync는 둘 다 원격으로 파일을 옮기지만 rsync는 바뀐 부분만 골라 동기화한다. 매번 전부 다시 보내는 scp보다 크고 반복적인 전송에서 압도적으로 효율적이다. 배포 스크립트에서 rsync가 단골인 이유다.
패키지 매니저는 언어·OS마다 이름만 다를 뿐 자리가 같다. Java를 했다면 Maven·Gradle이 바로 그 자리 — 파이썬의 pip, Node의 npm과 하는 일이 똑같다(남이 만든 라이브러리를 받아온다). OS 레벨에선 우분투가 apt, 맥이 brew다.
docker·kubectl는 그 자체로 큰 주제라 여기선 이름만 걸어둔다. 상자(이미지·컨테이너) 개념은 Docker 노트에서 따로 짚었다.
실력차가 나는 곳, 터미널 기본기
앞의 세 갈래는 "이런 도구가 있다"만 알면 검색해서 쓴다. 진짜 손에 익느냐로 갈리는 건 마지막 갈래, 평범한 텍스트와 프로세스를 다루는 기본기다. 여기가 능숙하면 남이 GUI 뒤지는 시간에 한 줄로 끝낸다.
grep/sed/awk— 텍스트 검색·치환·가공 삼총사. 로그를 뒤질 때 위력을 발휘한다. grep으로 원하는 줄만 뽑고, sed로 치환하고, awk로 특정 열만 잘라낸다. 파이프(|)로 이어 붙이면 즉석 데이터 처리기가 된다.jq— JSON 전용 도구.curl ... | jq처럼 API 응답을 바로 파이프에 걸어 원하는 필드만 필터링한다. REST API를 터미널에서 디버깅할 때 이거 없으면 눈이 아프다.chmod/chown— 파일 권한과 소유자.Permission denied가 떴을 때 찾게 되는 두 명령이다.ps/kill/lsof— 프로세스를 보고 죽이고 추적한다. 특히lsof -i :8080은 그 포트를 누가 점유했는지 한 번에 찾아준다. "서버가 안 뜨는데요, 포트가 이미 쓰이고 있대요" 할 때 단골로 꺼내는 명령이다.
체감 효율이 제일 좋은 넷
전부 익힐 필요는 없다. 실무에서 "이거 알길 잘했다"가 자주 나오는 순서로 꼽으면 이렇다.
우리 프로젝트에선
이 지도는 그냥 지식이 아니라 안전장치로도 쓰인다. AI 하네스는 밤마다 도는 무인 자동화에서 아무 명령이나 실행하게 두지 않고, grep·find·ls 같은 읽기성 명령만 허용리스트에 올려둔다. 자동화가 설령 엉뚱하게 굴러도 파일을 지우거나 덮어쓰지 못하니, 잘못됐을 때의 피해 범위(blast radius)가 애초에 좁다. 여기서 갈래 지도가 그대로 정책이 된다 — "읽는 도구"와 "바꾸는 도구"를 나눠 후자만 사람 손에 남긴다. 자세한 설계는 AI 하네스에.
그래서 나한테 이 도구들은 "언젠가 외울 것"이 아니라 자동화의 경계선을 긋는 언어로 먼저 왔다. 무엇이 읽기고 무엇이 쓰기인지 구분할 줄 알아야, 기계에게 어디까지 맡길지 정할 수 있다.
더 읽기
한 번 직접 파이프에 걸어보면 감이 확 붙는 도구들이다. 막히는 것부터 하나씩.
- 커맨드라인 JSON 프로세서 jq 기초 문법과 작동 원리 — 44BITS — jq를
curl ... | jq로 붙여 쓰는 감각까지, 한국어 입문 글의 정석 - 리눅스 유용한 명령어 정리(grep·awk·sed) — velog — 텍스트 처리 삼총사를 예제 중심으로 또박또박
- lsof 사용법 — LessTif — 포트 점유 프로세스 찾기와 kill까지, 백엔드 단골 시나리오