README.md

Download
markdown 208 lines 4.1 KB
  1# Mini Shell ์˜ˆ์ œ
  2
  3๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด ์‰˜ ๊ตฌํ˜„ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
  4
  5## ํŒŒ์ผ ๊ตฌ์„ฑ
  6
  7| ํŒŒ์ผ | ์„ค๋ช… |
  8|------|------|
  9| `minishell_v1.c` | ๊ธฐ๋ณธ ์‰˜ ๊ตฌ์กฐ (๋ช…๋ น์–ด ํŒŒ์‹ฑ ๋ฐ ์‹คํ–‰) |
 10| `builtins.c` | ๋‚ด์žฅ ๋ช…๋ น์–ด ๊ตฌํ˜„ (cd, pwd, echo, help ๋“ฑ) |
 11| `redirect.c` | ์ž…์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (>, >>, <) |
 12| `pipe.c` | ํŒŒ์ดํ”„ ๊ตฌํ˜„ (\|) |
 13| `minishell.c` | ์™„์„ฑ๋œ ๋ฏธ๋‹ˆ ์‰˜ (๋ชจ๋“  ๊ธฐ๋Šฅ ํ†ตํ•ฉ) |
 14
 15## ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰
 16
 17### 1. ๊ธฐ๋ณธ ์‰˜ (minishell_v1)
 18
 19๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์‰˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
 20
 21```bash
 22gcc -o minishell_v1 minishell_v1.c -Wall
 23./minishell_v1
 24```
 25
 26**๊ธฐ๋Šฅ:**
 27- ์™ธ๋ถ€ ๋ช…๋ น์–ด ์‹คํ–‰ (fork + exec)
 28- exit ๋ช…๋ น์–ด
 29
 30**์˜ˆ์ œ:**
 31```bash
 32minish> ls -l
 33minish> pwd
 34minish> echo hello world
 35minish> exit
 36```
 37
 38### 2. ๋‚ด์žฅ ๋ช…๋ น์–ด ํ…Œ์ŠคํŠธ (builtins)
 39
 40๋‚ด์žฅ ๋ช…๋ น์–ด๋งŒ ๋”ฐ๋กœ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
 41
 42```bash
 43gcc -o builtins builtins.c -Wall -DTEST_BUILTINS
 44./builtins
 45```
 46
 47**๊ธฐ๋Šฅ:**
 48- cd (๋””๋ ‰ํ† ๋ฆฌ ๋ณ€๊ฒฝ)
 49- pwd (ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ)
 50- echo (ํ…์ŠคํŠธ ์ถœ๋ ฅ)
 51- export (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •)
 52- env (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ชฉ๋ก)
 53- help (๋„์›€๋ง)
 54
 55**์˜ˆ์ œ:**
 56```bash
 57builtin> pwd
 58builtin> cd /tmp
 59builtin> pwd
 60builtin> cd -
 61builtin> export MY_VAR=hello
 62builtin> echo $MY_VAR
 63builtin> exit
 64```
 65
 66### 3. ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ํ…Œ์ŠคํŠธ (redirect)
 67
 68์ž…์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
 69
 70```bash
 71gcc -o redirect redirect.c -Wall -DTEST_REDIRECT
 72./redirect
 73```
 74
 75**๊ธฐ๋Šฅ:**
 76- `>` : ์ถœ๋ ฅ์„ ํŒŒ์ผ๋กœ (๋ฎ์–ด์“ฐ๊ธฐ)
 77- `>>` : ์ถœ๋ ฅ์„ ํŒŒ์ผ์— ์ถ”๊ฐ€
 78- `<` : ํŒŒ์ผ์—์„œ ์ž…๋ ฅ
 79
 80**์˜ˆ์ œ:**
 81```bash
 82redirect> ls -l > files.txt
 83redirect> cat < files.txt
 84redirect> echo "์ถ”๊ฐ€ ๋‚ด์šฉ" >> files.txt
 85redirect> wc -l < files.txt
 86redirect> exit
 87```
 88
 89### 4. ํŒŒ์ดํ”„ ํ…Œ์ŠคํŠธ (pipe)
 90
 91ํŒŒ์ดํ”„ ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
 92
 93```bash
 94gcc -o pipe pipe.c -Wall -DTEST_PIPE
 95./pipe
 96```
 97
 98**๊ธฐ๋Šฅ:**
 99- `|` : ๋ช…๋ น์–ด ์ถœ๋ ฅ์„ ๋‹ค์Œ ๋ช…๋ น์–ด ์ž…๋ ฅ์œผ๋กœ
100
101**์˜ˆ์ œ:**
102```bash
103pipe> ls -l | grep ".c"
104pipe> cat /etc/passwd | wc -l
105pipe> ps aux | grep bash | head -5
106pipe> exit
107```
108
109### 5. ์™„์„ฑ๋œ ๋ฏธ๋‹ˆ ์‰˜ (minishell)
110
111๋ชจ๋“  ๊ธฐ๋Šฅ์ด ํ†ตํ•ฉ๋œ ์™„์„ฑ๋ณธ์ž…๋‹ˆ๋‹ค.
112
113```bash
114gcc -o minishell minishell.c -Wall -Wextra
115./minishell
116```
117
118**๊ธฐ๋Šฅ:**
119- ๋‚ด์žฅ ๋ช…๋ น์–ด (cd, pwd, echo, export, unset, help, exit)
120- ์ž…์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (>, >>, <)
121- ํŒŒ์ดํ”„ (|)
122- ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ™•์žฅ ($VAR)
123- ์‹œ๊ทธ๋„ ์ฒ˜๋ฆฌ (Ctrl+C)
124- ์ปฌ๋Ÿฌ ํ”„๋กฌํ”„ํŠธ
125- ์ข…๋ฃŒ ์ฝ”๋“œ ํ‘œ์‹œ
126
127**์˜ˆ์ œ:**
128```bash
129~ โฏ help
130~ โฏ pwd
131/Users/username
132~ โฏ cd /tmp
133/tmp โฏ ls -la
134/tmp โฏ echo $HOME
135/Users/username
136/tmp โฏ export MY_VAR=hello
137/tmp โฏ echo $MY_VAR
138hello
139/tmp โฏ ls -l | grep ".txt" | wc -l
140/tmp โฏ cat /etc/passwd | head -5 > first5.txt
141/tmp โฏ cat first5.txt
142/tmp โฏ cd -
143/Users/username
144~ โฏ exit
145```
146
147## Makefile ์‚ฌ์šฉ
148
149๋ชจ๋“  ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— ์ปดํŒŒ์ผ:
150
151```bash
152make all
153```
154
155๊ฐœ๋ณ„ ์‹คํ–‰ ํŒŒ์ผ ์ปดํŒŒ์ผ:
156
157```bash
158make minishell_v1
159make builtins
160make redirect
161make pipe
162make minishell
163```
164
165์ •๋ฆฌ:
166
167```bash
168make clean
169```
170
171## ์ฃผ์š” ์‹œ์Šคํ…œ ์ฝœ
172
173| ํ•จ์ˆ˜ | ์„ค๋ช… |
174|------|------|
175| `fork()` | ํ”„๋กœ์„ธ์Šค ๋ณต์ œ |
176| `execvp()` | ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ |
177| `wait()` / `waitpid()` | ์ž์‹ ํ”„๋กœ์„ธ์Šค ๋Œ€๊ธฐ |
178| `pipe()` | ํŒŒ์ดํ”„ ์ƒ์„ฑ |
179| `dup2()` | ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๋ณต์ œ |
180| `open()` | ํŒŒ์ผ ์—ด๊ธฐ |
181| `chdir()` | ๋””๋ ‰ํ† ๋ฆฌ ๋ณ€๊ฒฝ |
182| `getcwd()` | ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์–ป๊ธฐ |
183| `setenv()` / `getenv()` | ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •/์กฐํšŒ |
184| `signal()` | ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก |
185
186## ํ•™์Šต ์ˆœ์„œ
187
1881. **minishell_v1.c** - ์‰˜์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์ดํ•ด
1892. **builtins.c** - ๋‚ด์žฅ ๋ช…๋ น์–ด์™€ ์™ธ๋ถ€ ๋ช…๋ น์–ด์˜ ์ฐจ์ด ์ดํ•ด
1903. **redirect.c** - ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์ดํ•ด
1914. **pipe.c** - ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ†ต์‹  ์ดํ•ด
1925. **minishell.c** - ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ†ตํ•ฉํ•œ ์™„์„ฑ๋ณธ
193
194## ์ถ”๊ฐ€ ๊ฐœ์„  ์•„์ด๋””์–ด
195
196- [ ] ํžˆ์Šคํ† ๋ฆฌ ๊ธฐ๋Šฅ (history ๋ช…๋ น์–ด)
197- [ ] ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ (&)
198- [ ] ์™€์ผ๋“œ์นด๋“œ ํ™•์žฅ (*)
199- [ ] ์„ธ๋ฏธ์ฝœ๋ก  ์ง€์› (cmd1 ; cmd2)
200- [ ] ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž (&& ์™€ ||)
201- [ ] ๋”ฐ์˜ดํ‘œ ์ฒ˜๋ฆฌ ("hello world")
202- [ ] ํƒญ ์ž๋™์™„์„ฑ (readline ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
203- [ ] ์ž‘์—… ์ œ์–ด (jobs, fg, bg)
204
205## ์ฐธ๊ณ  ๋ฌธ์„œ
206
207- `/opt/projects/01_Personal/03_Study/content/ko/C_Programming/12_Project_Mini_Shell.md`