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`