forked from 42GS/minishell
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
yoshin edited this page Apr 18, 2026
·
3 revisions
42 minishell 프로젝트를 수행하기 위해 필요한 시스템 프로그래밍 지식과 셸 내부 동작 원리를 정리한 학습 문서입니다. 서브젝트 v10.0(minish.md)을 기준으로 하며, 주요 개념·알고리즘을 기초부터 서술합니다.
아래 순서대로 읽으면 무리 없이 따라올 수 있도록 설계되었습니다. 이미 알고 있는 주제는 건너뛰어도 됩니다.
셸이 요구하는 기능 범위, 금지 사항, 허용 함수 목록을 먼저 파악합니다.
셸을 만들려면 유닉스의 "프로세스·파일·시그널" 모델을 이해해야 합니다. 이 부분이 가장 중요하고 분량이 많습니다.
- 02. 셸의 기초 — 셸이란 무엇인가, REPL 구조
-
03. 프로세스와 fork —
fork,execve,wait계열, 종료 상태 -
04. 파일 디스크립터 — fd 개념,
open/close,dup/dup2 -
05. 파이프와 IPC —
pipe(2), fork-pipe-dup2 패턴 -
06. 시그널 처리 —
sigaction,SIGINT/SIGQUIT, readline 연동 -
07. 터미널과 readline —
termios, GNU Readline API
사용자가 입력한 문자열을 어떻게 토큰·구문 트리로 바꾸고, 변수·인용을 어떻게 처리하는가.
- 08. 렉서 (토크나이저) — 어휘 분석, 인용/이스케이프 상태 머신
- 09. 문법과 파서 — POSIX 셸 문법, 재귀 하강 파서, AST 설계
-
10. 변수 확장과 인용 —
$VAR,$?,~, IFS 분할, quote removal
파싱된 결과를 실제로 실행하는 단계. 리다이렉션과 파이프라인이 가장 까다롭습니다.
-
11. 리다이렉션과 파이프라인 —
<,>,>>,<<heredoc,| - 12. 빌트인 커맨드 — 7개 빌트인 상세 동작
-
13. PATH 검색과 실행 —
PATH분할,execve, 종료 코드
-
14. 메모리 관리 — 릭 방지, readline 예외,
valgrind - 15. 참고 자료 — bash 매뉴얼, POSIX 스펙, 추천 도서
- 각 페이지는 개념 → 시스템 콜/API → 예제 코드 → 자주 하는 실수 순으로 구성됩니다.
- 예제 코드는 개념 설명이 목적이므로 42 Norm을 의도적으로 따르지 않는 경우가 있습니다(예:
for루프, 함수 길이 제한 초과 등). - 모르는 시스템 콜이 나오면 로컬에서
man 2 fork,man 3 readline처럼 매뉴얼을 함께 참고하세요.
이 문서는 학습용 레퍼런스입니다. 특정 구현체가 아닌, 셸을 직접 만들 때 알아야 할 베스트 프랙티스와 보편적 패턴을 정리한 것입니다. 개념·알고리즘의 이해가 목적이므로, 실제 구현 시에는 42 Norm·서브젝트 요구사항에 맞춰 문법적 조정이 필요합니다.