질문 하나를 작은 단계로 나눠
한 줄 명령은 탐색, 변환, 집계를 빠르게 시험하기 좋아. 아래 예제는 외워야 할 주문이 아니라 각 단계가 어떤 자료를 받고 무엇을 내보내는지 읽는 연습이야. 실제 경로와 입력 형식을 확인하고, 원본을 변경하지 않는 질문부터 실행해.
디스크를 많이 쓰는 경로 찾기
du -sh ./* 2>/dev/null | sort -h | taildu의 요약을 사람이 읽는 크기로 출력하고 정렬한 뒤 큰 항목을 골라. 권한 오류를 숨겼다면 결과가 전체 파일 시스템을 대표하지 않는다는 점을 함께 기록해.
기록에서 가장 많이 쓴 명령 보기
fc -l 1 | awk '{print $2}' | sort | uniq -c | sort -rn | head셸 기록 형식과 여러 줄 명령 처리 방식에 따라 결과가 달라질 수 있어. 통계가 비밀 값이 든 기록을 다시 노출하지 않는지도 확인해.
액세스 로그에서 많이 등장한 IP 찾기
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10첫 번째 필드가 실제 클라이언트 IP라는 로그 계약이 있을 때만 맞는 명령이야. 프록시 헤더와 따옴표가 포함된 형식은 전용 파서가 필요할 수 있어.
Python과 JavaScript 파일의 줄 수 보기
find . -type f \( -name '*.py' -o -name '*.js' \) -print0 |
xargs -0 wc -l | sort -nNUL 구분으로 파일명 경계를 보존해. 생성물과 의존성 디렉터리를 제외하지 않으면 통계의 의미가 달라져.
파일별 TODO 모으기
grep -rn --exclude-dir=.git --exclude-dir=node_modules 'TODO' .검색 결과는 할 일 후보이지 우선순위나 소유권까지 알려 주지는 않아. 주석 규칙과 대소문자 범위를 팀 계약에 맞춰.
중복된 줄 확인하기
sort input.txt | uniq -d정렬 때문에 원래 순서가 사라져. 공백과 대소문자를 같은 값으로 볼지 먼저 정하고, 구조화된 레코드는 해당 형식을 아는 도구로 비교해.
ISO 시각을 로컬 시각으로 바꾸기
date -j -f '%Y-%m-%dT%H:%M:%SZ' '2026-01-02T03:04:05Z' '+%F %T %Z'이 예시는 macOS의 BSD date 형식이야. GNU date와 옵션이 다르며 입력의 Z가 UTC를 뜻한다는 전제를 명시해야 해.
로그의 ANSI 색 제어 코드 지우기
perl -pe 's/\e\[[0-9;]*[A-Za-z]//g' colored.log모든 터미널 제어 시퀀스를 완전하게 처리하는 정규식은 아니야. 원본을 보존하고 대표 표본에서 필요한 시퀀스만 제거됐는지 확인해.
최근 한 시간에 수정된 파일 찾기
find . -type f -mmin -60 -print수정 시각이 의미하는 사건과 파일 시스템의 시각 정밀도를 확인해. 자동 정리 조건으로 쓰기 전에는 경로만 출력해 검토해.
북마크 내보내기에서 URL만 고르기
jq -r '.bookmarks[].url' bookmarks.json | sort -uJSON 스키마가 다르면 경로가 달라져. null과 누락 필드를 어떻게 처리할지도 결정해.
한 줄 명령은 가설을 시험하는 도구야
한 번의 조사와 임시 보고서에는 짧은 파이프라인이 빠르지만, 반복 실행하거나 외부 입력을 받고 상태를 변경하기 시작하면 이름 붙인 스크립트와 테스트로 옮겨. 길이가 짧다는 이유만으로 안전하거나 이해하기 쉬운 것은 아니야. 입력 계약과 실패 상태를 설명할 수 있는지가 승격 시점을 정해.
중간 결과를 관찰해
검색, 변환과 집계를 한 줄에 이어 붙이면 앞 단계가 빈 결과를 냈는데도 마지막 명령이 그럴듯한 0을 만들 수 있어. 각 단계에서 행 수와 대표 표본을 확인하고, 오류 출력을 데이터와 분리해. 삭제나 덮어쓰기처럼 되돌리기 어려운 마지막 단계는 읽기 전용 검증과 분리해서 실행해.