Claude와 함께 MIT Missing Semester 강의를 실습하며 정리한 내용입니다.
들어가며
Missing Semester 첫 강의는 쉘의 기초부터 데이터 처리 파이프라인까지를 다룬다.
핵심 개념
터미널 vs 쉘
- 터미널 - 화면을 보여주는 앱 (창)
- 쉘 - 명령어를 해석하는 프로그램 (엔진)
대표 쉘: bash(Linux 기본), zsh(macOS 기본), fish
변수와 $
$는 변수의 값을 읽는 기호다.
bash
name="yeji"
echo name # 문자열 "name" 출력
echo $name # 변수 값 "yeji" 출력$SHELL, $PATH, $HOME 같은 환경변수는 쉘이 미리 정의해둔 것.
경로 탐색
pwd- 현재 위치cd- 이동ls- 파일 목록~- 홈 디렉토리,..- 상위 디렉토리
ls -l의 각 컬럼: 권한 / 링크 수 / 소유자 / 그룹 / 크기 / 수정일 / 파일명
권한은 rwx 세 묶음: 소유자 / 그룹 / 기타. r=읽기, w=쓰기, x=실행.
빌트인 vs 외부 프로그램
쉘에서 실행하는 명령어는 세 종류다:
- 쉘 빌트인 - 쉘 안에 내장 (
cd,export,alias) - OS 기본 도구 - OS가 미리 설치 (
/bin/ls,/usr/bin/grep) - 사용자 설치 - 직접 설치 (
node,docker,jq)
cd가 빌트인인 이유: 외부 프로그램은 자식 프로세스에서 실행되는데, 자식이 디렉토리를 바꿔봤자 부모(쉘)에는 영향이 없다. 사무실을 옮기려면 사무실 주인이 직접 해야 하는 것과 같다.
bash
type cd # builtin
type ls # /bin/ls (외부 프로그램)
which grep # /usr/bin/grep$PATH와 프로그램 탐색
쉘이 프로그램을 찾는 디렉토리 목록. which로 실제 위치 확인 가능.
스트림과 리다이렉션
모든 프로그램에는 stdin(입력), stdout(출력), stderr(에러) 세 스트림이 있다.
>- stdout을 파일로 (덮어쓰기)>>- stdout을 파일로 (추가)2>- stderr를 파일로2>/dev/null- 에러 버리기|- 파이프. 앞 프로그램의 stdout을 뒤 프로그램의 stdin으로 연결
종료 코드와 조건부 실행
$?- 직전 명령어의 종료 코드 (0=성공)&&- 앞이 성공하면 뒤 실행||- 앞이 실패하면 뒤 실행
글로브
*- 모든 문자열?- 한 글자{a,b,c}- 중괄호 확장
쿼팅
'...'- 변수 해석 안 함 (그대로 출력)"..."- 변수 해석함$'...'- 이스케이프 시퀀스(\n,\t) 인식
데이터 처리 도구
| 도구 | 역할 |
|---|---|
grep | 패턴 검색 |
sed | 스트림 편집 (치환) |
awk | 컬럼 기반 처리 |
sort | 정렬 |
uniq -c | 중복 세기 (정렬 필수) |
head/tail | 앞/뒤 N줄 |
wc -l | 줄 수 세기 |
find | 파일 찾기 |
xargs | stdin을 인자로 변환 |
curl | HTTP 요청 |
jq | JSON 처리 |
커맨드 치환
$(...) 안의 명령어 결과를 값으로 사용:
bash
echo "오늘은 $(date +%Y-%m-%d)"실습 기록
파이프라인으로 확장자 빈도 분석
bash
find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn | head -5각 단계가 하나의 도구, 파이프로 연결 — Unix 철학의 핵심.
블로그 태그 빈도 분석
bash
grep -h " - " content/til/*.mdx | sed 's/ - //' | sort | uniq -c | sort -rn블로그에서 어떤 태그를 가장 많이 쓰는지 한 줄로 확인 가능.
flaky 테스트 반복 실행
bash
while ! /tmp/flaky.sh; do echo "재시도..."; donewhile !로 실패하는 동안 반복 — 종료 코드와 제어 흐름의 조합.