https://www.inflearn.com/course/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B3%B5%EB%A3%A1%EC%B1%85-%EC%A0%84%EA%B3%B5%EA%B0%95%EC%9D%98/unit/65271?tab=curriculum 

 

ํ•™์Šต ํŽ˜์ด์ง€

 

www.inflearn.com

โ–  ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ๋‚˜ cooperatingํ•˜๋ฉด์„œ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Œ

ใ€€• ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์‰์–ดํ•˜์ง€ ์•Š์Œ : ๋…๋ฆฝ์  ํ”„๋กœ์„ธ์Šค

ใ€€• ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ์ฃผ๊ณ ๋ฐ›์Œ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์‰์–ด ํ•จ : cooperating ํ”„๋กœ์„ธ์Šค

โ–  IPC: Inter-ํ”„๋กœ์„ธ์Šค ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ (ํ”„๋กœ์„ธ์Šค๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜)

ใ€€• Cooperating ํ”„๋กœ์„ธ์Šค๋Š” IPC๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•จ.

ใ€€ใ€€- ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Œ(๋ฐ์ดํ„ฐ๋ฅผ ์ƒŒ๋“œ, ๋ฆฌ์‹œ๋ธŒ ํ•  ์ˆ˜ ์žˆ์Œ)

โ–  IPC ๋‘๊ฐ€์ง€ ๊ธฐ๋ณธ๋ชจ๋ธ

ใ€€• shared memory(๋ฉ”๋ชจ๋ฆฌ ์‰์–ด)

ใ€€• message passing(๋ฉ”์„ธ์ง€ ์ „๋‹ฌ)

 

Figure 3.11 ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ models. (a) Shared memory. and (b) Message Passing.

 

โ–  ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ๋ฌธ์ œ

ใ€€• cooperating ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…, cooperating ํ”„๋กœ์„ธ์Šค์˜ ๊ณตํ†ต๋œ ํŒจ๋Ÿฌ๋‹ค์ž„

โ–  Producer-Consumer Problem:

ใ€€• ์ƒ์‚ฐ์ž๊ฐ€ ์ •๋ณด๋ฅผ ์ƒ์‚ฐํ•˜๊ณ  ์†Œ๋น„์ž๊ฐ€ ๊ทธ ์ •๋ณด๋ฅผ ์†Œ๋น„ํ•จ.

ใ€€• ์˜ˆ๋ฅผ ๋“ค์–ด,

ใ€€ใ€€- ์–ด๋–ค ์ปดํ”Œ๋ผ์ด์–ด๊ฐ€ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ƒ์‚ฐํ•˜๊ณ , ์–ด์…ˆ๋ธ”๋Ÿฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์†Œ๋น„ํ•จ.

ใ€€ใ€€- ์–ด๋–ค ์›น ์„œ๋ฒ„๊ฐ€ HTML ํŒŒ์ผ์„ ์ƒ์‚ฐํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์†Œ๋น„ํ•จ.

 

3.5 IPC ์‰์–ด๋“œ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ

โ–  ์‰์–ด๋“œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ :

ใ€€• ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž๊ฐ€ ๋™์‹œ์— runํ•  ์ˆ˜ ์žˆ์Œ.

ใ€€• buffer๋ฅผ ์‚ฌ์šฉ : ์ƒ์‚ฐ์ž๋Š” ๋ฒ„ํผ๋ฅผ ์ฑ„์šฐ๊ณ , ์†Œ๋น„์ž๋Š” ๊ทธ ๋ฒ„ํผ๋ฅผ ๋น„์šด๋‹ค.

ใ€€• ์‰์–ด๋“œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•œ ๋ถ€๋ถ„ ์ž„.

โ–  ์‰์–ด๋“œ ๋ฒ„ํผ์˜ ์ •์˜

ใ€€• ์ƒ์‚ฐ์ž์™€ ์†Œ๋น„์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ์— ์žˆ์Œ.

Figure 3.12 The  producer   ํ”„๋กœ์„ธ์Šค  using shared memory.
Figure 3.13 The  consumer   ํ”„๋กœ์„ธ์Šค  using shared memory.

โ–  ์‰์–ด๋“œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

ใ€€• ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์ƒ์˜ ์˜์—ญ์„ ๊ณต์œ ํ•ด์•ผํ•˜๊ณ , ๊ณต์œ ๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ณ  ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ(์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑํ•œ)๊ฐ€ ์žˆ์–ด์•ผ ํ•จ.

 

3.6 IPC in Message-Passing Systems

โ–  ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ:

ใ€€• O/S๊ฐ€ cooperating ํ”„๋กœ์„ธ์Šค์— ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•จ

ใ€€- ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ ์„œ๋กœ ์˜์‚ฌ์†Œํ†ตํ•จ

โ–  ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ ๋„๊ตฌ์˜ ๋‘๊ฐ€์ง€ ๋™์ž‘: (๋ฉ”์„ธ์ง€) ์ƒŒ๋“œ / ๋ฆฌ์‹œ๋ธŒ

Figure 3.14 The  producer   process  using message passing.

 

Figure 3.15 The  consumer   ํ”„๋กœ์„ธ์Šค  using message passing.

โ–  ์˜์‚ฌ์†Œํ†ต ๋งํฌ:

ใ€€• ๋งŒ์•ฝ ๐‘ƒ์™€ ๐‘„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด,

ใ€€ใ€€- ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋ฐ›์•„์•ผ ํ•จ.

ใ€€• ์ด comm. link(์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋งํฌ)๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์‹œํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

ใ€€ใ€€- ์ง/๊ฐ„์ ‘ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜.

ใ€€ใ€€- ๋™์‹œ ๋ฐœ์ƒ์ /๋น„๋™์‹œ๋ฐœ์ƒ์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

ใ€€ใ€€- ์ž๋™์  / ๋ช…์‹œ์  ๋ฒ„ํผ๋ง

โ–  ์ง์ ‘ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์—์„œ

ใ€€• communicate๋ฅผ ์›ํ•˜๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์˜ ์ˆ˜์ทจ์ž๋‚˜ ๋ฐœ์‹ ์ž๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•จ.

ใ€€• ์ด ๋ฐฉ์‹์˜ ๊ธฐ์ดˆ๋Š”

ใ€€ใ€€- send(๐‘ƒ, message) send a message to ํ”„๋กœ์„ธ์Šค ๐‘ƒ.

ใ€€ใ€€- receive(๐‘„, message) receive a message from ํ”„๋กœ์„ธ์Šค ๐‘„.

 

โ–  ์ง์ ‘์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋งํฌ์˜ ํŠน์„ฑ:

ใ€€• ๋งํฌ๋Š” ์ž๋™์ ์œผ๋กœ ํ˜•์„ฑ ๋จ.

ใ€€• ํ•œ ๋งํฌ๋Š” ์ •ํ™•ํ•˜๊ฒŒ ๋‘ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์—ฐ๊ฒฐ ์ž„

ใ€€• ๊ฐ ์Œ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—๋Š” ํ•˜๋‚˜์˜ ๋งํฌ๋งŒ ์กด์žฌ ํ•จ

 

โ–  ๊ฐ„์ ‘์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

ใ€€• ๋ฉ”์‹œ์ง€๋Š” mailbox๋“ค์ด๋‚˜ ํฌํŠธ๋“ค์„ ์ด์šฉํ•ด์„œ ๋ณด๋‚ด๊ณ  ๋ฐ›์•„์ง.

ใ€€• A mailbox (ํฌํŠธ ๋ผ๊ณ ๋„ ํ•จ)

ใ€€ใ€€- can be viewed abstractly as an object

ใ€€ใ€€- ํ”„๋กœ์„ธ์Šค๋“ค์— ์˜ํ•ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ณณ

ใ€€ใ€€- ๋ฉ”์‹œ์ง€๋“ค์ด ์‚ญ์ œ ๋  ์ˆ˜ ์žˆ๋Š” ๊ณณ

ใ€€• ์ด ์ž‘๋™์˜ ๊ธฐ๋ณธ์€

ใ€€ใ€€- send(๐ด, message) send a message to mailbox ๐ด.

ใ€€ใ€€- receive(๐ด, message) receive a message from mailbox ๐ด.

 

โ–  ๊ฐ„์ ‘์  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋งํฌ์˜ ํŠน์„ฑ:

ใ€€• ์Œ์„ ์ด๋ฃจ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ๋ชจ๋‘๊ฐ€ ์‰์–ด๋“œ ๋ฉ”์ผ๋ฐ•์Šค๊ฐ€ ์žˆ์œผ๋ฉด ํ•œ ์Œ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์— ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋งํฌ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Œ

ใ€€• ํ•œ ๋งํฌ๋Š” ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ

ใ€€• ๊ฐ ์Œ์˜ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์— ๋ช‡ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋งํฌ๋“ค์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ

ใ€€ใ€€- ๊ฐ ๋งํฌ๋Š” ๋Œ€์‘๋˜๋Š” ๋ฉ”์ผ๋ฐ•์Šค๊ฐ€ ํ•˜๋‚˜ ์žˆ์Œ

 

โ–  OS๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋ž˜์˜ ๊ฒƒ๋“ค์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•จ:

ใ€€• ์ƒˆ๋กœ์šด ๋ฉ”์ผ๋ฐ•์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ

ใ€€• ๋ฉ”์ผ๋ฐ•์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ

ใ€€• ๋ฉ”์ผ๋ฐ•์Šค๋ฅผ ์‚ญ์ œํ•˜๊ธฐ

 

โ–  ๋‹ค๋ฅธ ๋””์ž์ธ ์˜ต์…˜:

ใ€€• blocking or non-blocking: synchronous or asynchronous

ใ€€• Blocking send: ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋ฐœ์‹ ์ž๊ฐ€ ๋ง‰ํž˜(ex. ์š”๊ธˆ๋ถ€๊ณผ ๋™๊ธฐํ™” ํ•„์š” ์„œ๋น„์Šค)

ใ€€• Non-blocking send: ๋ฐœ์‹ ๊ธฐ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค ๊ณ„์† ์ง„ํ–‰

ใ€€• Blocking receive: ์ˆ˜์‹ ๊ธฐ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฆฌ์‹œ๋ฒ„๊ฐ€ ๋ง‰ํž˜

ใ€€• Non-blocking receive: ์ˆ˜์‹ ๊ธฐ๊ฐ€ ์œ ํšจํ•œ ๋ฉ”์‹œ์ง€ ๋˜๋Š” null ๋ฉ”์‹œ์ง€๋ฅผ ํšŒ์ˆ˜ํ•จ

 
๋ฐ˜์‘ํ˜•

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bestheroz&logNo=113881732 

 

[ C ]ํŒŒ์ผ ์—ด๊ธฐ - open

#include<sys/types.h> #include<sys/stat.h> #include<fcntl.h>   int open(const...

blog.naver.com

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
 
int open(const char *path, int oflag [, mode ]);
path: ์—ด๋ ค๋Š” ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ๋กœ
oflag: ํŒŒ์ผ ์ƒํƒœ ํ”Œ๋ž˜๊ทธ
mode: ์ ‘๊ทผ ๊ถŒํ•œ

 

 

์ฃผ์š” oflag

์ข…๋ฅ˜ ๊ธฐ๋Šฅ
O_RDONLY ํŒŒ์ผ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ฐ๋‹ค.
O_WRONLY ํŒŒ์ผ์„ ์“ฐ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ฐ๋‹ค.
O_RDWR ํŒŒ์ผ์„ ์ฝ๊ธฐ/์“ฐ๊ธฐ์šฉ์œผ๋กœ ์—ฐ๋‹ค.
O_CREAT ํŒŒ์ผ์ด ์—†์œผ๋ฉด ์ƒ์„ฑํ•œ๋‹ค. ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๊ถŒํ•œ์€ ๋‹น์—ฐํžˆ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ํŒŒ์ผ์ด ์ด๋ฏธ ์žˆ๋‹ค๋ฉด ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ์˜ต์…˜์ด๋‹ค.
O_EXCL O_CREAT ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ธฐ์กด์— ์—†๋Š” ํŒŒ์ผ์ด๋ฉด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ง€๋งŒ, ์ด๋ฏธ ์žˆ์œผ๋ฉด ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
O_APPEND ์ด ์˜ต์…˜์„ ์ง€์ •ํ•˜๋ฉด ํŒŒ์ผ์˜ ๋งจ ๋์— ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
O_TRUNC ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ ์ด๋ฏธ ์žˆ๋Š” ํŒŒ์ผ์ด๊ณ , ์“ฐ๊ธฐ ์˜ต์…˜์œผ๋กœ ์—ด์—ˆ์œผ๋ฉด ๋‚ด์šฉ์„ ๋ชจ๋‘ ์ง€์šฐ๊ณ  ํŒŒ์ผ์˜ ๊ธธ์ด๋ฅผ 0์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
O_NONBLOCK/O_NDELAY ๋น„๋ธ”๋กœํ‚น(non-blocking) ์ž…์ถœ๋ ฅ ์˜ต์…˜์œผ๋กœ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๊ณ  ๋‚œ ํ›„์˜ ๋™์ž‘์— ์˜ํ–ฅ์„ ์ค€๋‹ค. ๋””์Šคํฌ์˜ ํŒŒ์ผ ์ž…์ถœ๋ ฅ๋ณด๋‹ค๋Š” FIFO ๊ฐ™์€ ํŠน์ˆ˜ ํŒŒ์ผ์˜ ์ž…์ถœ๋ ฅ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ๋””์Šคํฌ์ธ ๊ฒฝ์šฐ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด -1์„ ๋ฆฌํ„ดํ•œ๋‹ค.
O_SYNC/O_DSYNC ํŒŒ์ผ์— ์“ฐ๊ธฐ ๋™์ž‘์„ ํ•  ๋•Œ ๋ณดํ†ต ๋ฒ„ํผ์—๋งŒ ์“ฐ๊ณ  ๋‚˜์ค‘์— ๋””์Šคํฌ์™€ ๊ฐ™์€ ์ €์žฅ ์žฅ์น˜๋กœ ์˜ฎ๊ฒจ์“ฐ๋Š”๋ฐ, ์ด ์˜ต์…˜์ด ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์ €์žฅ ์žฅ์น˜์— ์“ฐ๊ธฐ๋ฅผ ๋งˆ์ณ์•ผ ์“ฐ๊ธฐ ๋™์ž‘์„ ์™„๋ฃŒํ•œ๋‹ค. O_SYNC ํ”Œ๋ž˜๊ทธ๋Š” ํŒŒ์ผ์˜ ์ˆ˜์ • ์‹œ๊ฐ ์†์„ฑ๋„ ์ˆ˜์ •ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ์ด ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์†๋„๋Š” ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ๋””์Šคํฌ์— ํ™•์‹คํ•˜๊ฒŒ ์ €์žฅ๋จ์„ ๋ณด์žฅํ•œ๋‹ค.

ํ”Œ๋ž˜๊ทธ๋ฅผ OR(|) ์—ฐ์‚ฐ์ž๋กœ ์—ฐ๊ฒฐํ•ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒŒ์ผ์˜ ์šฉ๋„์— ๋”ฐ๋ผ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

์“ฐ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ด ๋•Œ, ์ด๋ฏธ ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ O_WRONLY | O_TRUNC
์“ฐ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ด ๋•Œ, ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ O_WRONLY | O_CREAT | O_TRUNC
์ฝ๊ธฐ/์“ฐ๊ธฐ/์ถ”๊ฐ€์šฉ์œผ๋กœ ์—ด ๋•Œ O_RDWR | O_APPEND

 

mode๋Š” ํŒŒ์ผ์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, O_CREAT ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ด ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. mode๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ผ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋“ฏ์ด 0644์™€ ๊ฐ™์ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„ ์žˆ์ง€๋งŒ, <sys/stat.h> ํŒŒ์ผ์— ์ •์˜๋œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

#include<stdio.h>
#include<fcntl.h>
 
int main(void)
{
    int fd;
 
    fd=open("unix.txt", O_CREAT, 755);
    if(fd==-1)
    {
        perror("Creat");
        exit(1);
    }
    close(fd);
    return 0;
}
๋ฐ˜์‘ํ˜•

https://leeyh0216.github.io/posts/sid_pid_ppid_pgid/

 

Linux - PID, PPID, PGID, SID๋ž€?

Linux์˜ PID, PPID, PGID, SID๋ž€?

leeyh0216.github.io

Linux์˜ PID, PPID, PGID, SID๋ž€?

๊ฐœ๋… ์ •๋ฆฌ

PID

PID(Process ID)๋Š” ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค์— ๋ถ€์—ฌํ•˜๋Š” ๋ฒˆํ˜ธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

PPID

PPID(Parent Process ID)๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ PID๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋งŒ์ผ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ผ์ฐ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ ์•„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜์–ด PPID๋กœ init process์˜ PID(1)๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

PGID

ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน(Process Group)์€ 1๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค์˜ ๋ฌถ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

PGID(Process Group ID)๋Š” ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€์—ฌ๋˜๋Š” ๋ฒˆํ˜ธ์ด๋‹ค.

SID

์„ธ์…˜(Session)์€ 1๊ฐœ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์˜ ๋ฌถ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

SID(Session ID)๋Š” ์ด๋Ÿฌํ•œ ์„ธ์…˜์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€์—ฌ๋˜๋Š” ๋ฒˆํ˜ธ์ด๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ์˜ PID, PPID, PGID, SID

๋ฆฌ๋ˆ…์Šค ์šด์˜์ฒด์ œ์—์„œ PID, PPID, PGID, SID๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ps ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ PID, PPID, PGID, SID, COMMAND๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

   

์œ„ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.(Docker, Ubuntu 16.04)

   

๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ๊ด€๊ณ„ ์ดํ•ดํ•˜๊ธฐ

1 ~ 100 ๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉฐ “Hello World”๋ฅผ ์ถœ๋ ฅํ•˜๋Š” child.sh์™€ ์ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” parent.sh ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

child.sh

   

parent.sh

   

๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด parent.sh๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜๊ณ , ps -A -o pid,ppid,pgid,sid,command ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก์„ ํ™•์ธํ•ด๋ณธ๋‹ค.

   

child.sh์˜ PPID๊ฐ€ ์ž์‹ ์„ ์‹คํ–‰ํ•œ parent.sh์˜ PID์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ parent.sh์˜ PGID์™€ child.sh์˜ PGID๊ฐ€ 502๋กœ ๋™์ผํ•œ Process Group์— ์†ํ•ด์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

PGID์˜ ์กด์žฌ ์ด์œ 

์œ„์˜ ์ƒํƒœ์—์„œ kill 502 ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ parent.sh ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•œ ๋’ค, ps -A -o pid,ppid,pgid,sid,command ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก์„ ํ™•์ธํ•ด๋ณธ๋‹ค.

   

parent.sh๊ฐ€ ์‹คํ–‰ํ•œ child.sh๋Š” ์•„์ง๋„ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

child.sh๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ด์œ ๋Š” kill ๋ช…๋ น์–ด์˜ Usage๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

   

kill ๋ช…๋ น์–ด๋Š” PID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ํŠน์ • Process์— Signal์„ ๋ณด๋‚ธ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ Signal์„ ์ˆ˜์‹ ํ•œ Process๋Š” ์ž๊ธฐ ์ž์‹ ์ด ์ข…๋ฃŒ๋  ๋ฟ ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๊นŒ์ง€ Signal์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด POSIX ๊ธฐ๋ฐ˜ ์šด์˜์ฒด์ œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฌถ์–ด์„œ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์„ ๋งŒ๋“ค๊ณ , ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์— PGID๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ํ•œ๋ฒˆ์— ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

PGID๋กœ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒํ•˜๊ธฐ

๋‹ค์‹œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ps -A -o pid,ppid,pgid,sid,command ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก์„ ํ™•์ธํ•œ๋‹ค.

 
 

kill -- -$PGID ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Process Group์— ์†ํ•œ ๋ชจ๋“  Process๋“ค์„ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.

   

์œ„ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋’ค ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•˜๋ฉด parent.sh์™€ child.sh ๋ชจ๋‘ ์ข…๋ฃŒ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

   

PGID ๋ณ€๊ฒฝํ•˜์—ฌ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ํ•˜๊ธฐ

PGID๋ฅผ ํ†ตํ•œ Kill ๋ช…๋ น์–ด ์ˆ˜ํ–‰ ์‹œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—์„œ ์‹คํ–‰๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, ์ž์‹ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ์ „ PGID๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค.

C๋‚˜ Python์—์„œ๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, Bash Script์—์„œ๋Š” Job Control ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ์‹œํ‚ค๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด PGID๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

parent.sh๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ ํ›„ ์‹คํ–‰ํ•ด๋ณด์ž.

   

์ž์‹ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ์ „ set -o monitor ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž์‹ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰ ์‹œ PGID๋ฅผ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ PID๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.(set -o monitor ๋ช…๋ น์–ด์˜ ์ž์„ธํ•œ ๋‚ด์šฉ์€ bash manual์˜ Job Control์„ ํ™•์ธ)

parent.sh ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ›„ ps -A -o pid,ppid,pgid,sid,command ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•ด๋ณด์ž.

   

parent.sh์˜ PGID๊ฐ€ 965์ธ ๋ฐ˜๋ฉด child.sh์˜ PGID๋Š” child.sh์˜ PID์™€ ๋™์ผํ•œ 966์œผ๋กœ, PGID๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜ : https://yadon079.github.io/2021/etc/linux-command

 

Linux ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์–ด ๋ชจ์Œ :: ๊ฐœ๋ฐœ์ž ํ•œ์„ ์šฐ

๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ จ ๋ช…๋ น์–ด

yadon079.github.io

๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ จ ๋ช…๋ น์–ด

๋””๋ ‰ํ† ๋ฆฌ ๋ชฉ๋ก ํ™•์ธ

$ ls
$ ls -al : ๊ฐ์ถฐ์ง„ ํŒŒ์ผ์€ .์ด ๋ถ™๋Š”๋‹ค. a ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
$ ls -l

์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

$ mkdir [๋””๋ ‰ํ† ๋ฆฌ๋ช…]
$ mkdir -p [๋””๋ ‰ํ† ๋ฆฌ๋ช…/๋””๋ ‰ํ† ๋ฆฌ๋ช…/๋””๋ ‰ํ† ๋ฆฌ๋ช…...] : ์—ฌ๋Ÿฌ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

๋””๋ ‰ํ† ๋ฆฌ ์ด๋™

$ cd [๋””๋ ‰ํ† ๋ฆฌ๋ช…]
$ cd .. : ๋ถ€๋ชจ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™

tip) ๋””๋ ‰ํ† ๋ฆฌ๋ช…์ด ๋„ˆ๋ฌด ๊ธธ ๋•Œ, ์กฐ๊ธˆ๋งŒ ์“ฐ๊ณ  tabํ‚ค ๋ˆ„๋ฅด๋ฉด ์ž๋™์™„์„ฑ

๋””๋ ‰ํ† ๋ฆฌ ์‚ญ์ œ

$ rm -r [๋””๋ ‰ํ† ๋ฆฌ๋ช…]-r (remove directories and their contents recursively; ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜ ์žˆ๋Š” ๋‚ด์šฉ๋“ค๋„ ์‚ญ์ œํ•œ๋‹ค.)

ํŒŒ์ผ ๊ด€๋ จ ๋ช…๋ น์–ด

๋น„์–ด์žˆ๋Š” ํŒŒ์ผ ์ƒ์„ฑ

$ touch [ํŒŒ์ผ๋ช…]

ํŒŒ์ผ ์‚ญ์ œ

$ rm [ํŒŒ์ผ๋ช…]

ํŒŒ์ผ ๋ณต์‚ฌ

$ cp [ํŒŒ์ผ์œ„์น˜ ๋ฐ ํŒŒ์ผ์ด๋ฆ„] [๋ชฉ์ ์ง€ ํŒŒ์ผ์œ„์น˜ ๋ฐ ํŒŒ์ผ ์ด๋ฆ„]

ํŒŒ์ผ ์ด๋™ (ํŒŒ์ผ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ๋•Œ์—๋„ ์‚ฌ์šฉ)

$ mv [ํŒŒ์ผ์œ„์น˜ ๋ฐ ํŒŒ์ผ์ด๋ฆ„] [๋ชฉ์ ์ง€ ํŒŒ์ผ์œ„์น˜ ๋ฐ ํŒŒ์ผ ์ด๋ฆ„]

$ mv [์›๋ž˜ ํŒŒ์ผ ์ด๋ฆ„] [๋ฐ”๊พธ๊ณ  ์‹ถ์€ ํŒŒ์ผ ์ด๋ฆ„]

ํŒŒ์ผ ๋งŒ๋“ค๊ณ  ํŽธ์ง‘ (nano ์—๋””ํ„ฐ)

$ nano [ํŒŒ์ผ๋ช…] : ์ƒˆ ํŒŒ์ผ ์ž‘์„ฑ or ์กด์žฌํ•˜๋Š” ํŒŒ์ผ ์ˆ˜์ •

ํŒŒ์ผ ๋‚ด์šฉ ๋ณด๊ธฐ

$ cat [ํŒŒ์ผ๋ช…]

ํŒŒ์ผ ์œ„์น˜ ๊ฒ€์ƒ‰

$ locate *.log : (ํ™•์žฅ์ž๊ฐ€ .log์ธ ํŒŒ์ผ ์ฐพ๊ธฐ)๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋’ค์ง€๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(mlocate)๋ฅผ ๋’ค์ ธ์„œ ์ฐพ๋Š”๋‹ค.

$ find . *.log : ๋””๋ ‰ํ† ๋ฆฌ ๋’ค์ง

$ whereis ls$ whereis rm์‹คํ–‰ํŒŒ์ผ ์œ„์น˜ ์ฐพ๊ธฐ

ํ˜„์žฌ ์œ„์น˜ ํ™•์ธ

$ pwd

๋ช…๋ น์ฐฝ ๋‚ด์šฉ ์‚ญ์ œ

$ clear

๋ช…๋ น์–ด ๋„์›€๋ง ํ™•์ธ

$ [๋ช…๋ น์–ด] --help $ man [๋ช…๋ น์–ด] : /[์ฐพ๊ณ ์‹ถ์€๋‹จ์–ด] ์‚ฌ์šฉํ•ด์„œ ๋‹จ์–ด์ฐพ๊ธฐ ๊ฐ€๋Šฅ, ๊ทธ ์ƒํƒœ๋กœ n์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ ๋‹จ์–ด ์ฐพ๊ธฐ

ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € (Package Manager)

  • ๊ธฐ๋ณธ์œผ๋กœ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ํŒจํ‚ค์ง€(ํ”„๋กœ๊ทธ๋žจ)๊ฐ€ ์•„๋‹Œ ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€(ํ”„๋กœ๊ทธ๋žจ)๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋„์™€์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด (์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ตฌ๊ธ€ํ”Œ๋ ˆ์ด, iOS์˜ ์•ฑ์Šคํ† ์–ด ๊ฐ™์€ ..)
  • apt, yum ๋“ฑ์ด ์žˆ์Œ.

ํŒจํ‚ค์ง€ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ

$ apt-get update

  • ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€ ๋ชฉ๋ก๋“ค์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. (์„ค์น˜ํ•˜๊ธฐ์ „์—)
  • ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํŒจํ‚ค์ง€ ๋ชฉ๋ก๋“ค์ด ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฒƒ.

ํŒจํ‚ค์ง€ ์ฐพ๊ธฐ

$ apt-cache search [ํŒจํ‚ค์ง€๋ช…]

  • ์ €์žฅ๋œ ํŒจํ‚ค์ง€ ๋ชฉ๋ก ์ค‘์— ํ•ด๋‹น ํŒจํ‚ค์ง€ ์ฐพ๊ธฐ..?
  • ๊ด€๋ จ๋œ ํŒจํ‚ค์ง€ ๋ชฉ๋ก๊นŒ์ง€ ๋‚˜์˜จ๋‹ค.

ํŒจํ‚ค์ง€ ์„ค์น˜

$ apt-get install [ํŒจํ‚ค์ง€๋ช…]

ํŒจํ‚ค์ง€ ์—…๊ทธ๋ ˆ์ด๋“œ

$ apt-get upgrade $ apt-get upgrade [ํŒจํ‚ค์ง€๋ช…]

ํŒจํ‚ค์ง€ ์‚ญ์ œ

$ apt-get remove [ํŒจํ‚ค์ง€๋ช…]

ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ์ˆœ์„œ (ํ•ญ์ƒ ์ด ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด๋Š”๊ฒŒ ์ข‹์Œ.)

  1. ํŒจํ‚ค์ง€ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ (apt-get update)
  2. ํŒจํ‚ค์ง€ ์„ค์น˜ (apt-get install)

๋‹ค์šด๋กœ๋“œ

ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ (wget ์‚ฌ์šฉ)

$ wget -O [์ €์žฅํ•  ํŒŒ์ผ๋ช…] [๋‹ค์šด๋กœ๋“œ url]

์†Œ์Šค์ฝ”๋“œ ๋‹ค์šด๋กœ๋“œ (git ์‚ฌ์šฉ)

1. git ์„ค์น˜
$ apt-get install git 2. ์†Œ์Šค์ฝ”๋“œ ๋‹ค์šด
$ git clone [์†Œ์Šค์ฝ”๋“œ url] [๋””๋ ‰ํ† ๋ฆฌ๋ช…] : ๋ช…์‹œํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์†Œ์Šค์ฝ”๋“œ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.

why CLI?

1. ์ˆœ์ฐจ์  ์‹คํ–‰ (using semicolon) ‘ex) $ mkdir why; cd why’ + ์–ธ์ œ ์œ ์šฉํ•œ๊ฐ€? + ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋ช…๋ น๋“ค์ด 1000์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•  ๋•Œ, ๋ช…๋ น์–ด ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ์น˜๋Š” ๊ฒƒ๊ณผ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ํ•œ๋ฒˆ์— ์น˜๋Š” ๊ฒƒ์€ ์ฐจ์ด๊ฐ€ ์žˆ์Œ. (์—ฌ๋Ÿฌ ๊ฐœ ๋ช…๋ น์–ด๋ฅผ ํ•œ ๋ฒˆ์— ์น˜๋ฉด ์•Œ์•„์„œ ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ๋งŒ ๋‚˜ํƒ€๋‚จ.)

2. ํŒŒ์ดํ”„๋ผ์ธ + ๋ช…๋ น์–ด์˜ ์—ฐ๊ฒฐ + ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์˜ ์ถœ๋ ฅ์„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž…๋ ฅ์œผ๋กœ . . . + ์›ํ•˜๋Š” ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ํ–‰์„ ์ถœ๋ ฅ

ex) $ grep linux linux.txt : ‘linux’๊ฐ€ ํฌํ•จ๋œ ํ–‰ ์ถœ๋ ฅ
$ ls --help | grep sort : ls –help์—์„œ ‘sort’๊ฐ€ ํฌํ•จ๋œ ํ–‰์„ ์ถœ๋ ฅ (ls –help์˜ ์ถœ๋ ฅ์„ grep์˜ ์ž…๋ ฅ์œผ๋กœ)
$ ls --help | grep sort | grep file : ls –help์—์„œ ‘sort’์™€ ‘file’์ด ํฌํ•จ๋œ ํ–‰์„ ์ถœ๋ ฅ

IO Redirection

1. output
$ ls -l > result.txt : result.txt ํ™•์ธํ•ด๋ณด๋ฉด ls -l ์ถœ๋ ฅ๋ฌผ ๋‹ด๊ฒจ์žˆ์Œ.

2. error (์—๋Ÿฌ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด? ‘2>’ ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (standard error๋ฅผ ๊ฐ€๋ฆฌํ‚ด))
ex) ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— rename2.txt๊ฐ€ ์—†์„ ๋•Œ
$ rm rename2.txt 2> error.log : error.log์— ์—๋Ÿฌ ๋‚ด์šฉ์ด ๋‹ด๊ฒจ์žˆ์Œ.

3. input
$ cat hello.txt : cat์˜ cammand-line arguments๋กœ์จ ์—ญํ• 
$ cat < hello.txt : hello.txt ๋‚ด์šฉ์„ standard input์œผ๋กœ..
$ head -n1 < linux.txt > one.txt : linux.txt ๋‚ด์šฉ์„ input, one.txt์— ์ถœ๋ ฅ๋ฌผ์„ ์ €์žฅ

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

  • /bin: ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด ๋ชจ์Œ
  • /sbin: ๊ด€๋ฆฌ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด ๋ชจ์Œ
  • /etc: ํ”„๋กœ๊ทธ๋žจ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ
  • /etc/init.d: daemon์˜ ๋ชฉ์ ์„ ๊ฐ€์ง„ ํ”„๋กœ๊ทธ๋žจ๋“ค ์žˆ์Œ.
  • /var: ๋‚ด์šฉ์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋“ค ๋ชจ์Œ
  • /tmp: ์ž„์‹œํŒŒ์ผ๋“ค. ์ปดํ“จํ„ฐ๊ฐ€ ๊บผ์ง€๋ฉด ๋‚ ์•„๊ฐ„๋‹ค.
  • /home: ์‚ฌ์šฉ์ž๋“ค์˜ ํŒŒ์ผ๋“ค์ด ์ €์žฅ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ
  • /lib: /bin๊ณผ /sbin์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ์Œ
  • /usr: ์œ ์ €๊ฐ€ ๋‹ค์šด๋ฐ›์€ ํ”„๋กœ๊ทธ๋žจ๋“ค ์ €์žฅ..

ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ๋ช…๋ น์–ด

ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก ํ™•์ธ

$ ps

๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก๊นŒ์ง€ ํ™•์ธ

$ ps aux
$ ps aux | grep apache2 : ‘ps aux’์˜ ์ถœ๋ ฅ์—์„œ apache2๊ฐ€ ํฌํ•จ๋œ ํ–‰ ์ถœ๋ ฅ

ํ”„๋กœ์„ธ์Šค ๊ฐ•์ œ ์ข…๋ฃŒ

$ kill [pid]

๊ทธ ์™ธ ํ”„๋กœ์„ธ์Šค ๋ชฉ๋ก ํ™•์ธ ๋ช…๋ น์–ด

$ top
$ htop (top๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ์‹œ๊ฐ์ ์ธ ๋ฉด์—์„œ ๋” ์ข‹์Œ)

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰

ex) nano ์—๋””ํ„ฐ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ctrl + z -> ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋Œ์•„๊ฐ€๋„๋ก ๋“ฑ๋ก

๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋žจ ํ™•์ธ

$ jobs+๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ -> fg ์‹คํ–‰ํ–ˆ์„ ๋•Œ, ์‹คํ–‰๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ-๊ฐ€ ๋ถ™์–ด์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ -> fg ์‹คํ–‰ํ–ˆ์„ ๋•Œ, + ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰๋  ํ”„๋กœ๊ทธ๋žจ

foreground๋กœ ๋Œ์•„๊ฐ€๊ธฐ

$ fg
$ fg %๋ฒˆํ˜ธ : ํ•ด๋‹น ๋ฒˆํ˜ธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ๊ทธ๋žจ ์ฃฝ์ด๊ธฐ

$ kill
$ kill -9 %๋ฒˆํ˜ธ : ๊ฐ•์ œ์ข…๋ฃŒ

daemon : ํ•ญ์ƒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด apache2 ์›น์„œ๋ฒ„ ์„ค์น˜

$ sudo apt-get install apache2

์„ค์น˜ ํ›„ /etc/init.d์— ๊ฐ€๋ณด๋ฉด apache2๊ฐ€ ์žˆ๋‹ค.

apache2 ์ผœ๊ธฐ

$ sudo service apache2 start

์ž˜ ์ผœ์ง„์ง€ ํ™•์ธ

$ ps aux | grep apache2

apache2 ๋„๊ธฐ

$ sudo service apache2 stop

๊บผ์ ธ์žˆ๋Š”์ง€ ํ™•์ธ

$ ps aux | grep apache2 : ๋ชฉ๋ก์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Œ.

cron (์ •๊ธฐ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์€ ์ž‘์—…์ด ์žˆ์„ ๋•Œ)

$ crontab -e : ์ฒ˜์Œ ์‹คํ–‰ํ–ˆ์„ ๋•, ์—๋””ํ„ฐ ๊ณจ๋ผ์•ผ ํ•จ

m h dom mon dow command

  • m: ๋ถ„ ์ฃผ๊ธฐ ex) 10: ๋งค ์‹œ๊ฐ„ 10๋ถ„์— ํ•œ ๋ฒˆ
    ex) */1: 1๋ถ„์— ํ•œ ๋ฒˆ
  • h: ์‹œ๊ฐ„ ์ฃผ๊ธฐ ex) *: ์‹œ๊ฐ„์— ์ƒ๊ด€ ์—†์ด
    ex) 1: ๋งค 1์‹œ์—
  • dom: day of month ex) 24: ๋งค ๋‹ฌ 24์ผ์— ํ•œ ๋ฒˆ
  • mon: month
  • dow: day of week (์š”์ผ)
  • command: ์ฃผ๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด

ํ…Œ์ŠคํŠธ

  1. command ์ž๋ฆฌ์— date >> date.log ์ž…๋ ฅ (»๋Š” ํ•ด๋‹น ํŒŒ์ผ ์•„๋ž˜๋กœ ์ญ‰ ์ถœ๋ ฅ๊ฒฐ๊ณผ๊ฐ€ ์Œ“์ž„)
  2. $ tail -f date.log (๊ผฌ๋ฆฌ์— ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ๊ฐ€ ์ถ”๊ฐ€ ๋  ๋•Œ, ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œํ•ด์คŒ.)

์—๋Ÿฌ๊ฐ€ ๋‚œ ๊ฒฝ์šฐ๋„ ๋กœ๊ทธ๋กœ ๋‚จ๊ธฐ๋Š”๊ฒŒ ์ข‹๋‹ค.

*/1 * * * * date >> date.log 2>&1ํ‘œ์ค€ ์ถœ๋ ฅ์„ date.log์— ๋‚จ๊ธฐ๊ณ  ํ‘œ์ค€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ‘œ์ค€ ์ถœ๋ ฅ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜date.log์— ์—๋Ÿฌ๋„ ํ•จ๊ป˜ ์ €์žฅ๋จ

๋‹จ์ถ•ํ‚ค ๋งŒ๋“ค๊ธฐ

$ alias l='ls -al'
-> l์„ ์ž…๋ ฅํ•˜๋ฉด ls -al์˜ ์ถœ๋ ฅ์ด ๋‚˜์˜ด

.bashrc ํŒŒ์ผ

bash๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋จ.

๋‹ค์ค‘ ์‚ฌ์šฉ์ž

$ id : ํ˜„์žฌ ์ ‘์†ํ•œ ๊ณ„์ •์˜ ์ •๋ณด ํ™•์ธ
$ who : ์ด ์ปดํ“จํ„ฐ์— ๋ˆ„๊ฐ€ ์ ‘์†ํ•ด์žˆ๋Š”๊ฐ€

~$๋กœ ๋๋‚˜๋ฉด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž
~#๋กœ ๋๋‚˜๋ฉด root ์‚ฌ์šฉ์ž

sudo (super user do)

  • ๋ฆฌ๋ˆ…์Šค๋Š” ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ์šด์˜์ฒด์ œ์ž„.
  • ์‚ฌ์šฉ์ž๋งˆ๋‹ค ์–ด๋–ค ์ผ์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์žˆ์Œ.
  • ์ค‘์š”ํ•œ ์ผ์— ๋Œ€ํ•œ ๊ถŒํ•œ์€ super user(root)๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์Œ. ๋”ฐ๋ผ์„œ super user์˜ ๊ถŒํ•œ์ด ํ•„์š”ํ•  ๋•Œ sudo๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ง์ ‘ root๊ณ„์ •์— ์ ‘์†ํ•ด์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์•ˆ์ „์„ ์œ„ํ•ด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋กœ ๋กœ๊ทธ์ธ ํ›„ sudo๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

์‚ฌ์šฉ์ž ์ถ”๊ฐ€

$ sudo useradd -m [์‚ฌ์šฉ์ž๋ช…]
-> /home์— ๊ฐ€๋ณด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Œ.
-> ๊ทธ๋Ÿฌ๋‚˜, ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋ฉด ํ•ด๋‹น ๊ณ„์ •์—์„œ sudo ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ.

sudo ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ

$ sudo usermod -a -G sudo [์‚ฌ์šฉ์ž๋ช…]

๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •

$ sudo passwd [์‚ฌ์šฉ์ž๋ช…]

๋กœ๊ทธ์ธ (su ์‚ฌ์šฉ)

$ su - [์‚ฌ์šฉ์ž๋ช…]

permission (๊ถŒํ•œ)

$ ls -l
-> -rw-rw-r– 1 egoing egoing 0 Dec 4 23:19 perm.txt

type access mode
(r : read, w : write, x : execute)
owner group
-
file : -,
directory : d
[owner์˜ ๊ถŒํ•œ]
rw-
[group์˜ ๊ถŒํ•œ]
rw-
[other์˜ ๊ถŒํ•œ]
r--
gracenam gracenam

 

๊ถŒํ•œ ๋ณ€๊ฒฝ (chmod)

u: owner
g: group
o: other (not owner, not group)
a: all

$ chmod o-r perm.txtperm.txtํŒŒ์ผ์˜ other read ๊ถŒํ•œ ์‚ญ์ œ$ chmod o+r perm.txtperm.txtํŒŒ์ผ์˜ other read ๊ถŒํ•œ ํ—ˆ๊ฐ€

execute

$ nano hi-machine.sh

#!/bin/bash
echo 'hi hi hi hi'

ํŒŒ์ผ ์‹คํ–‰ ์‹œ๋„ 1
$ ./hi-machine.sh -> ํ—ˆ๊ฐ€ ๊ฑฐ๋ถ€ ๋œธ

ํŒŒ์ผ ์‹คํ–‰ ์‹œ๋„ 2
$ /bin/bash hi-machine.sh -> ์‹คํ–‰๋จ

owner ์‹คํ–‰ ๊ถŒํ•œ ์ถ”๊ฐ€ํ•˜๊ธฐ
$ chmod u+x hi-mashine.sh -> ํ•ด๋‹น ํŒŒ์ผ ์ดˆ๋ก์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋จ

ํŒŒ์ผ ์‹คํ–‰ ์‹œ๋„ 3
$ ./hi-machine.sh -> ์‹คํ–‰๋จ

directory

  • r ๋ชจ๋“œ: ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์†Œ์†๋œ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๋Š”์ง€?
  • w ๋ชจ๋“œ: ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€๋ฅผ ์ˆ˜์ • ํ•  ์ˆ˜ ์žˆ๋Š”์ง€? (ํŒŒ์ผ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ, ํŒŒ์ผ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋“ฑ)
  • x ๋ชจ๋“œ: ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€?
  • chmod ๋ช…๋ น์–ด์˜ -R ์˜ต์…˜: ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ๊ฒƒ๋“ค์˜ mode๋ฅผ ๋ชจ๋‘ ๋ฐ”๊พผ๋‹ค.

Numerical permissions

์ˆซ์ž ์˜๋ฏธ ์˜๋ฌธ ํ‘œํ˜„
0 none ---
1 execute only --x
2 write only -w-
3 write and execute -wx
4 read only r--
5 read and execute r-x
6 read and write rw-
7 read, write and execute rwx


ex) $ chmod 111 perm.txt -> –x–x–x๋กœ ๋ณ€๊ฒฝ๋จ.

’=’ ์‚ฌ์šฉ

์ถ”๊ฐ€/์‚ญ์ œ ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ ์•„์˜ˆ ๋ฐ”๋€Œ๋Š” ๊ฒƒ

$ chmod a=r perm.txt -> owner, group, other read๋งŒ ๊ฐ€๋Šฅ
$ chmod a= perm.txt -> owner, group, other ์•„๋ฌด ๊ถŒํ•œ ์—†์Œ.

IP ์ฃผ์†Œ ํ™•์ธ

$ ip addr : ์ปดํ“จํ„ฐ IP ํ™•์ธ (private ip)
$ curl ipinfo.io/ip : ipinfo.io/ip ์ž…์žฅ์—์„œ ์ ‘์†๋œ ip (public ip)

์›น์„œ๋ฒ„

์›น์„œ๋ฒ„ ์„ค์น˜ (apache2)

$ sudo apt-get update
$ sudo apt-get install apache2

์›น์„œ๋ฒ„ ์‹œ์ž‘, ์ค‘์ง€, ์žฌ์‹œ์ž‘

$ sudo service apache2 start
$ sudo service apache2 stop
$ sudo service apache2 restart

$ sudo apt-get install elinks
$ elinks http://10.0.2.15/ (์ปดํ“จํ„ฐ IP ์ž…๋ ฅ) -> local ์„œ๋ฒ„ ์ ‘์†

์›น์„œ๋ฒ„์˜ ์„ค์ •

/etc/apache2 ์— ์•„ํŒŒ์น˜ ์„ค์ •ํŒŒ์ผ ์žˆ์Œ. (apache2.conf)
์›น์„œ๋ฒ„๊ฐ€ ์–ด๋–ค storage์—์„œ ํŒŒ์ผ์„ ์ฐพ์„ ๊ฒƒ์ธ๊ฐ€๋Š” ์„ค์ •ํŒŒ์ผ์—์„œ ํ™•์ธ.
default๋Š” /var/www/html ์ธ๋ฐ, ์„ค์ • ๋ฐ”๊ฟ”์„œ ๋ณ€๊ฒฝ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.
์ด๋•Œ /var/www/html๋ฅผ document root๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. (์›นํŽ˜์ด์ง€๋ฅผ ์ฐพ๋Š” ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ)

์›น์„œ๋ฒ„์˜ ๋กœ๊ทธ ํ™•์ธ

/etc/apache2/sites-enabled/000-default.conf ๊ฐ€๋ณด๋ฉด ๋กœ๊ทธ๋Š” ์–ด๋””์— ๊ธฐ๋กํ• ์ง€ ๋ช…์‹œํ•ด๋‘” ๋ถ€๋ถ„์ด ์žˆ๋‹ค. (/var/log/apache2)

access.log: ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์›น์„œ๋ฒ„์— ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ๋ก์ด ๋‚จ๊ฒจ์ง.
error.log: ์—๋Ÿฌ ๋กœ๊ทธ ํ™•์ธ ๊ฐ€๋Šฅ

์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•˜๋ ค๋ฉด?
$ tail -f /var/log/apache2/access.log

SSH

  • ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋ฅผ ์›๊ฒฉ์ œ์–ด ํ•  ๋•Œ ์‚ฌ์šฉ
  • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์›๊ฒฉ์ ‘์† ์‹œ๋„ํ•˜๋ ค๋Š” ์ปดํ“จํ„ฐ, ์„œ๋ฒ„๋ฅผ ์›๊ฒฉ์ ‘์† ๋‹นํ•˜๋Š” ์ปดํ“จํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ์—๋Š” ssh client ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์–ด์•ผํ•˜๊ณ  ์„œ๋ฒ„์—๋Š” ssh server ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์˜ค๋Š˜๋‚  ๋Œ€๋ถ€๋ถ„์˜ ์œ ๋‹‰์Šค ๊ณ„์—ด ์‹œ์Šคํ…œ์—์„œ๋Š” ssh ์„œ๋ฒ„๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค.
  • ์›๊ฒฉ ์ ‘์† ์‹œ๋„ $ ssh ๊ณ„์ •๋ช…@์ ‘์†์•„์ดํ”ผ
    (์ฒ˜์Œ ์ ‘์†ํ•˜๋ฉด ์ง„์งœ ์ ‘์†ํ•  ๊ฑด์ง€ ๋ฌผ์–ด๋ณด๋Š”๋ฐ yes ํ•˜๋ฉด ๋จ.)
  • ํฌํŠธ๋ฒˆํ˜ธ์™€ ํ•จ๊ป˜ ์ ‘์† ์‹œ๋„ $ ssh -p ํฌํŠธ๋ฒˆํ˜ธ ๊ณ„์ •๋ช…@์ ‘์†์•„์ดํ”ผ

ssh ์‹ฌํ™”์ˆ˜์—… - ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์—†์ด ๋กœ๊ทธ์ธํ•˜๊ธฐ

์ ‘์†์„ ์‹œ๋„ํ•˜๋Š” ์ปดํ“จํ„ฐ: ๋‚ด ์ปดํ“จํ„ฐ
์ ‘์† ๋Œ€์ƒ์ด ๋˜๋Š” ์ปดํ“จํ„ฐ: ์›๊ฒฉ ์ปดํ“จํ„ฐ

์›๊ฒฉ ์ปดํ“จํ„ฐ์— ๋‚ด ์ปดํ“จํ„ฐ์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ์ €์žฅํ•ด๋‘๋ฉด, ์›๊ฒฉ ์ปดํ“จํ„ฐ์— ๋กœ๊ทธ์ธ ์—†์ด (๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์—†์ด/์ธ์ฆ ์—†์ด) ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ

์–ด๋–ค ์ปดํ“จํ„ฐ๊ฐ€ ์ธ์ฆ๋œ ์ปดํ“จํ„ฐ?
์›๊ฒฉ ์ปดํ“จํ„ฐ์˜ ~/.ssh/authorized_keys ํŒŒ์ผ์— ๋“ค์–ด์žˆ๋Š” ํ‚ค ๋ชฉ๋ก์„ ๋ณด๊ณ  ํŒ๋‹จํ•œ๋‹ค. (authorized_keys ํŒŒ์ผ์€ ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ์Œ.)

์›๊ฒฉ ์ปดํ“จํ„ฐ์— ๋‚ด ์ปดํ“จํ„ฐ๋ฅผ ์ธ์ฆ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

1. ssh ๊ณต๊ฐœํ‚ค ๋น„๋ฐ€ํ‚ค ๋งŒ๋“ค๊ธฐ [๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰]
$ ssh-keygen
Q. Enter file in which to save the key? : (์ €์žฅ๋˜๋Š” ์œ„์น˜) ์—”ํ„ฐ
Q. Enter passphrase : ๋น„๋ฐ€๋ฒˆํ˜ธ ์“ฐ๋ ค๋ฉด ์ž…๋ ฅํ•˜๊ณ  ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ์—”ํ„ฐ
~/.ssh ๋“ค์–ด๊ฐ€๋ณด๋ฉด id_rsa(ssh private key), id_rsa.pub(ssh public key)๊ฐ€ ์žˆ์Œ. (id_rsa๋Š” ์ ˆ๋Œ€๋กœ ๋น„๊ณต๊ฐœ)

2. authorized_keys ํŒŒ์ผ ๋์—๋‹ค๊ฐ€ ๋‚ด ์ปดํ“จํ„ฐ์˜ id_rsa.pub ๋‚ด์šฉ์„ ๋ถ™์—ฌ๋„ฃ๋Š”๋‹ค. (ssh-copy-id ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ๋ถ™์—ฌ๋„ฃ์ž.) [๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰] -> $ ssh-copy-id (์›๊ฒฉ ์ปดํ“จํ„ฐ ๊ณ„์ •)@(์›๊ฒฉ ์ปดํ“จํ„ฐ ์ฃผ์†Œ) -> ์›๊ฒฉ ์ปดํ“จํ„ฐ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ

3. ์ž˜ ๋ถ™์—ฌ๋„ฃ์–ด์กŒ๋Š”์ง€ ํ™•์ธ [์›๊ฒฉ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰] $ cat ~/.ssh/authorized_keys

4. ๋กœ๊ทธ์ธ ์—†์ด ๋กœ๊ทธ์ธ ์‹œ๋„ [๋‚ด ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰] $ ssh (์›๊ฒฉ ์ปดํ“จํ„ฐ ๊ณ„์ •)@(์›๊ฒฉ ์ปดํ“จํ„ฐ ์ฃผ์†Œ) -> ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ์—†์ด ๋กœ๊ทธ์ธ ๊ฐ€๋Šฅ

ํฌํŠธ (port)

default port (๊ธฐ๋ณธ์ ์œผ๋กœ ์“ฐ๋„๋ก ์•ฝ์†)
ex) ์›น์„œ๋ฒ„๋Š” 80, ssh ์„œ๋ฒ„๋Š” 22

  • ๊ฐ ์„œ๋ฒ„๋“ค์€ ํ•ด๋‹น ํฌํŠธ์—์„œ ๋Œ€๊ธฐ์ค‘์ด๋‹ค. (listen)
  • ์•ฝ 65000๊ฐœ์˜ ํฌํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘์— 1024๊ฐœ์˜ well-known ํฌํŠธ๊ฐ€ ์žˆ๋‹ค. (์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ)

๋„๋ฉ”์ธ๊ณผ DNS (Domain Name System)

1. ์‚ฌ์šฉ์ž๊ฐ€ google.com ์ด๋ผ๊ณ  ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ์ž…๋ ฅํ•˜๋ฉด 2. DNS ์„œ๋ฒ„๊ฐ€ google.com ์ด๋ฆ„์„ ๊ฐ€์ง„ IP๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์— ์•Œ๋ ค์ค€๋‹ค. 3. ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ๋Š” ๊ทธ IP ์ •๋ณด๋กœ google.com์— ์ ‘์†

  • /etc/hosts ํŒŒ์ผ: ์•„์ดํ”ผ-๋„๋ฉ”์ธ ๋ช…์‹œํ•ด๋‘” ๊ฒƒ?
  • ex) hostsํŒŒ์ผ์— 127.0.0.1 google.com ์ถ”๊ฐ€ํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์— google.com ์ด๋ผ๊ณ  ์ž…๋ ฅํ–ˆ์„ ๋•Œ, 127.0.0.1 ์›น์„œ๋ฒ„์™€ ๋งค์นญ๋จ.
  • /etc/hosts์—์„œ ๋จผ์ € ์ฐพ์•„๋ณด๊ณ , ์ฐพ์•„๋ดค์„ ๋•Œ ์—†์œผ๋ฉด, DNS ์„œ๋ฒ„์—์„œ ์ฐพ๊ณ …
  • ๋งŒ์•ฝ /etc/hosts์— ์žˆ์œผ๋ฉด DNS ์„œ๋ฒ„๋Š” ๊ด€๋ จ์—†์Œ.
  • /etc/resolv.conf -> nameserver ์ ํ˜€์žˆ์Œ.
  • $ host [๋„๋ฉ”์ธ] -> ํ˜ธ์ŠคํŠธ ์ •๋ณด ๋‚˜์˜ด (์–ด๋–ค ์•„์ดํ”ผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€)

์„œ๋ธŒ๋„๋ฉ”์ธ

ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ ๊ตฌ์ž…์œผ๋กœ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
ex) admin.egoing.ga, blog.egoing.ga, news.egoing.ga

  • ์„œ๋กœ ๋‹ค๋ฅธ ์•„์ดํ”ผ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ
  • ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ์œผ๋กœ ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ๋ฅผ ์šด์˜!

rsync

๋™์ž‘๋ฐฉ๋ฒ• ์˜ˆ์‹œ

$ mkdir src
$ mkdir dest

src ๋””๋ ‰ํ† ๋ฆฌ์•ˆ์— ํŒŒ์ผ ์ƒ์„ฑ
$ touch test{1..10} : test1 ~ test10๊นŒ์ง€ ์ƒ์„ฑ๋จ.

$ rsync -a src/ dest -> src ์•„๋ž˜ ์žˆ๋Š” ํŒŒ์ผ๋“ค์ด dest ํด๋”์•ˆ์œผ๋กœ ๋ณต์‚ฌ๋œ๋‹ค.
(a ์˜ต์…˜ : ์•„์นด์ด๋ธŒ ๋ชจ๋“œ๋กœ ๋™์ž‘. ํŒŒ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋””๋ ‰ํ† ๋ฆฌ๋„ ๋ณต์‚ฌ๋˜๊ณ , ๊ถŒํ•œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ/๋””๋ ‰ํ† ๋ฆฌ ์†์„ฑ์ด ๋ฐ”๋€Œ๋ฉด ๋ฐ˜์˜๋˜๊ณ , ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค๋งŒ ์ „์†ก)

dest ํด๋” ๊ฐ€์„œ test10 ์‚ญ์ œ
$ rm test10

$ rsync -av(๋” ์ž์„ธํ•˜๊ฒŒ ์ถœ๋ ฅ) src/ dest ์‹คํ–‰ -> dest์•ˆ์— ์žˆ๋˜ test10 ๋‹ค์‹œ ์ƒ๊น€.

src ํด๋” ๊ฐ€์„œ ์ถ”๊ฐ€ ํŒŒ์ผ ์ƒ์„ฑ ํ›„, rsync ํ•ด๋ณด๋ฉด src์—์„œ ๋งŒ๋“  ํŒŒ์ผ ๋งŒ์ด dest ์•ˆ์— ์ƒ์„ฑ๋œ๋‹ค.

์ปดํ“จํ„ฐ์™€ ์ปดํ“จํ„ฐ ์‚ฌ์ด์— ์ „์†ก

$ rsync -azP ~/rsync/src/ k8805@๋Œ€์ƒ์•„์ดํ”ผ:~/rsync/dest

  • az: ์••์ถ•ํ•œ๋‹ค.
  • P: ์ „์†ก๋˜๋Š” ์ƒํ™ฉ์„ progress bar๋กœ ๋ณด์—ฌ์ค€๋‹ค.

์•”ํ˜ธํ™”

๋Œ€์นญ์ ์ธ ๋ฐฉ์‹

์–ด๋–ค ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™” ํ•  ๋•Œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์•”ํ˜ธํ™” ํ–ˆ์„ ๋•Œ์™€ ๋ณตํ˜ธํ™” ํ–ˆ์„ ๋•Œ ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋Œ€์นญ์ ์ธ๋ฐฉ์‹

๋น„๋Œ€์นญ์ ์ธ ๋ฐฉ์‹

  • ssh-keygen์œผ๋กœ ๋งŒ๋“  private key, public key๋ฅผ ์‚ฌ์šฉ
  • ์•”ํ˜ธํ™” ํ•  ๋•Œ์—๋Š” private key, ๋ณตํ˜ธํ™” ํ•  ๋•Œ์—๋Š” public key๋ฅผ ์‚ฌ์šฉ
  • private key, public key๋Š” ์ง๊ฟ์ด๋‹ค.
  • ๋Œ€ํ‘œ ์ฃผ์ž: RSA

RSA ๋™์ž‘๋ฐฉ์‹

  1. ssh client๋กœ ssh server์— ์ ‘์†ํ•˜๋ฉด
  2. ssh server๋Š” ๋žœ๋คํ•œ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ client ์ปดํ“จํ„ฐ์—๊ฒŒ ์ค€๋‹ค.
  3. ssh client๋Š” id_rsa ํŒŒ์ผ(private key)์ด ์žˆ๋Š”์ง€ ์ฐพ๋Š”๋‹ค. ์žˆ์œผ๋ฉด ๊ทธ ํŒŒ์ผ์„ ์ด์šฉํ•ด์„œ ์ „๋‹ฌ ๋ฐ›์€ ๋žœ๋คํ‚ค๋ฅผ ์•”ํ˜ธํ™” ์‹œํ‚จ๋‹ค.
  4. ์•”ํ˜ธํ™”๋œ ๊ฒฐ๊ณผ๋ฅผ ssh server์—๊ฒŒ ์ „์†ก
  5. ssh server๋Š” authorized_keys์— ์ €์žฅ๋œ ๊ณต๊ฐœํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์ „๋‹ฌ๋ฐ›์€ ์•”ํ˜ธํ™”๋œ ํŒŒ์ผ์„ ๋ณตํ˜ธํ™” ํ•œ๋‹ค.
  6. ๋ณตํ˜ธํ™”๋œ ๊ฒฐ๊ณผ๊ฐ€ ์ฒ˜์Œ์— ์ „๋‹ฌํ•œ ๋žœ๋คํ‚ค์™€ ๊ฐ™์œผ๋ฉด ์ธ์ฆ ์„ฑ๊ณต

Reference

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜ : https://box0830.tistory.com/150

 

๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ(Code, Data, Heap, Stack)

์ด๊ฒŒ ๋งค๋ฒˆ ํ—ท๊ฐˆ๋ ค์„œ ํ™•์‹คํžˆ ์ •๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฒ ๋„ค์š”. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉดํฌ๊ฒŒ Code, Data, Heap, Stack์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋“ค ๊ฐ๊ฐ์„ segment๋ผ ๋ถˆ๋Ÿฌ์š”. - ๋ฉ”๋ชจ

box0830.tistory.com

์ด๊ฒŒ ๋งค๋ฒˆ ํ—ท๊ฐˆ๋ ค์„œ ํ™•์‹คํžˆ ์ •๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฒ ๋„ค์š”. 

 

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด

ํฌ๊ฒŒ Code, Data, Heap, Stack์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค ๊ฐ๊ฐ์„ segment๋ผ ๋ถˆ๋Ÿฌ์š”.

 

 

- ๋ฉ”๋ชจ๋ฆฌ ๋งต

 

โ—‹ ์ •์  ์„ธ๊ทธ๋จผํŠธ

1. Code

: ์ œ์ผ ์•„๋ž˜ text๊ฐ€ ์ฝ”๋“œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.  ๊ธฐ๊ณ„์–ด๋„ ํฌํ•จ๋˜์š”. 

์ด ๋ถ€๋ถ„์€ "read only" ์˜์—ญ์ด๋ผ ์“ฐ๊ธฐ ์ž‘์—…์ด ๋“ค์–ด์˜ค๋ฉด "access violation"์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€, ๊ณ„์† ์œ ์ง€๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

 

 

2. Data

์ „์—ญ๋ณ€์ˆ˜(global), ์ •์ ๋ณ€์ˆ˜(static), ๋ฐฐ์—ด(array), ๊ตฌ์กฐ์ฒด(structure) ๋“ฑ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

1) ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ : data์— ์ €์žฅ

2) ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ : bss(Block Stated Symbol)์— ์ €์žฅ

 

==> ์‚ฌ์‹ค bss๋„ ์ดˆ๊ธฐํ™”๋ฅผ ํ•จ. ๋‹จ, ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๊ณต๊ฐ„์„ ์ดˆ๊ธฐํ™” ์‹œํ‚ค๋Š” ๊ฒƒ.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, bss๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ ์œผ๋กœ ๋ณด๋ฉด ๋” ํšจ์œจ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

==> ์ •๋ฆฌํ•˜์ž๋ฉด, data ์˜์—ญ์ด ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, bss๋Š” ๋Ÿฐํƒ€์ž„ ์ดํ›„ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ

 

์ด ์˜์—ญ ๋˜ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ๊นŒ์ง€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

 

* ํ•จ์ˆ˜ ๋‚ด (์‹ฌ์ง€์–ด main ํ•จ์ˆ˜๋„ ํฌํ•จ) ๋ณ€์ˆ˜๋“ค์€ ์—ฌ๊ธฐ์— ํ•ด๋‹น๋˜์ง€ ์•Š์•„์š”!
    --> Stack segment

 

 

 

โ—‹ ๋™์  ์„ธ๊ทธ๋จผํŠธ

3. Heap

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค.

malloc, free ๋˜๋Š” new, delete ์— ์˜ํ•˜์—ฌ ํ• ๋‹น, ๋˜๋Š” ๋ฐ˜ํ™˜๋˜๋Š” ์˜์—ญ์ด์ง€์š”.

์ž๋ฐ”๋‚˜ c++๊ณผ ๊ฐ™์ด garbage collector๊ฐ€ ํ™œ๋™ํ•˜๋Š” ๊ฒฝ์šฐ, ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

4. Stack

์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ณต๊ท€ ๋ฒˆ์ง€ ๋“ฑ์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๊ณ , ํ•จ์ˆ˜ ์ข…๋ฃŒ์‹œ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  Stack์œผ๋กœ๋ถ€ํ„ฐ ์œ ์ถ” ๊ฐ€๋Šฅํ•˜๋“ฏ์ด Last In First Out ์ •์ฑ…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค๋ฅธ ์„ธ๊ทธ๋จผํŠธ๋“ค์ด ํ•˜์œ„ ์˜์—ญ์œผ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋˜์ง€๋งŒ Stack ์„ธ๊ทธ๋จผํŠธ๋Š” ์ƒ์œ„ ์˜์—ญ๋ถ€ํ„ฐ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

 

* Heap ์˜์—ญ์ด ์ปค์ง€๋ฉด Stack ์˜์—ญ์ด ์ž‘์•„์ง€๊ฒŒ ๋˜๊ณ , ์—ญ๋„ ์„ฑ๋ฆฝํ•ฉ๋‹ˆ๋‹ค.

==> heap overflow : heap์ด stack ์˜์—ญ์„ ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ

==> stack overflow : stack์ด heap ์˜์—ญ์„ ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ

๋ฐ˜์‘ํ˜•

+ Recent posts