ํ•„์š”ํ•œ ๋ฐฐ๊ฒฝ ์ง€์‹

Linux ์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ ๊ฐœ๋…๋“ค์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค:

  • ๊ธฐ๋ณธ์ ์ธ Shell ๋ช…๋ น์–ด ์‚ฌ์šฉ๋ฒ•
  • ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ถŒํ•œ ๊ฐœ๋…
  • ํ”„๋กœ์„ธ์Šค์™€ Shell์˜ ๊ด€๊ณ„
  • File descriptor์˜ ๊ธฐ๋ณธ ๊ฐœ๋…
  • ํ‘œ์ค€ ์ž…๋ ฅ(stdin), ํ‘œ์ค€ ์ถœ๋ ฅ(stdout), ํ‘œ์ค€ ์—๋Ÿฌ(stderr)์˜ ๊ฐœ๋…

๊ฐœ๋… ์„ค๋ช…

์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์ด๋ž€?

ํ”„๋กœ๊ทธ๋žจ์˜ ์ถœ๋ ฅ์„ ์›ํ•˜๋Š” ๋ชฉ์ ์ง€๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ถœ๋ ฅ์€ ํ„ฐ๋ฏธ๋„๋กœ ์ „์†ก๋˜์ง€๋งŒ, ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ํ†ตํ•ด ํŒŒ์ผ์ด๋‚˜ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ค์ƒํ™œ ๋น„์œ : ์šฐํŽธ๋ฌผ ๋ถ„๋ฅ˜ ์‹œ์Šคํ…œ

์šฐ์ฒด๊ตญ์˜ ์šฐํŽธ๋ฌผ ๋ถ„๋ฅ˜ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ์ดํ•ดํ•ด๋ณด์ž:

  1. ์ผ๋ฐ˜ ์šฐํŽธ๋ฌผ (stdout, 1)

    • ๊ธฐ๋ณธ ๋ฐฐ์†ก ๊ฒฝ๋กœ = ํ„ฐ๋ฏธ๋„ ์ถœ๋ ฅ
    • ๋ฐฐ์†ก์ง€ ๋ณ€๊ฒฝ = ํŒŒ์ผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
  2. ๊ธด๊ธ‰ ์šฐํŽธ๋ฌผ (stderr, 2)

    • ํŠน๋ณ„ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ = ์—๋Ÿฌ ๋ฉ”์‹œ์ง€
    • ๊ฒฝ๋กœ ํ†ตํ•ฉ = ์—๋Ÿฌ๋ฅผ ์ผ๋ฐ˜ ์ถœ๋ ฅ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
  3. ์ ‘์ˆ˜ ์ฐฝ๊ตฌ (stdin, 0)

    • ์šฐํŽธ๋ฌผ ์ ‘์ˆ˜ = ํ”„๋กœ๊ทธ๋žจ ์ž…๋ ฅ
    • ์ž๋™ ๋ถ„๋ฅ˜๊ธฐ = ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹

File Descriptor์˜ ์ดํ•ด

graph LR
    A[ํ”„๋กœ๊ทธ๋žจ] --> B((stdin 0))
    A --> C((stdout 1))
    A --> D((stderr 2))
    B --> E[ํ‚ค๋ณด๋“œ]
    C --> F[ํ„ฐ๋ฏธ๋„]
    D --> F

๋ฆฌ๋‹ค์ด๋ ‰์…˜ ์—ฐ์‚ฐ์ž

  • > : ์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (๋ฎ์–ด์“ฐ๊ธฐ)
  • >> : ์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜ (์ถ”๊ฐ€ํ•˜๊ธฐ)
  • 2> : ์—๋Ÿฌ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
  • &> : ๋ชจ๋“  ์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
  • | : ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•œ ๋ฆฌ๋‹ค์ด๋ ‰์…˜

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

1. ์ž˜๋ชป๋œ ์‚ฌ์šฉ ์˜ˆ์‹œ

# ์•ˆ์ข‹์€ ์˜ˆ์ œ: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ˆœ์„œ ์ž˜๋ชป๋จ
ls /์—†๋Š”๋””๋ ‰ํ† ๋ฆฌ 2>&1 > error.log  # ์—๋Ÿฌ๊ฐ€ ํ„ฐ๋ฏธ๋„์— ์ถœ๋ ฅ๋จ
 
# ์•ˆ์ข‹์€ ์˜ˆ์ œ: ํŒŒ์ผ ๊ถŒํ•œ ๊ณ ๋ คํ•˜์ง€ ์•Š์Œ
echo "log" > /var/log/app.log  # ๊ถŒํ•œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

2. ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ ์˜ˆ์‹œ

# ์ข‹์€ ์˜ˆ์ œ: ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
ls /์—†๋Š”๋””๋ ‰ํ† ๋ฆฌ > output.log 2>&1  # ๋ชจ๋“  ์ถœ๋ ฅ์ด ํŒŒ์ผ๋กœ ์ €์žฅ
 
# ์ข‹์€ ์˜ˆ์ œ: ๊ถŒํ•œ ๊ณ ๋ ค
sudo bash -c 'echo "log" > /var/log/app.log'

3. ์‹ค์šฉ์ ์ธ ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์‹œ

#!/bin/bash
# ๋กœ๊ทธ ํŒŒ์ผ ์„ค์ •
exec 1> >(logger -s -t $(basename $0)) 2>&1
 
# ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜
error_handler() {
    local line_no=$1
    local error_msg=$2
    echo "Error on line ${line_no}: ${error_msg}"
}
 
trap 'error_handler ${LINENO} "$BASH_COMMAND"' ERR
 
# ์‹ค์ œ ์ž‘์—… ์ˆ˜ํ–‰
echo "์ž‘์—… ์‹œ์ž‘"
some_command
echo "์ž‘์—… ์™„๋ฃŒ"

๊ณ ๊ธ‰ ํ™œ์šฉ๋ฒ•

Performance ์ตœ์ ํ™”

# ๋ฒ„ํผ๋ง ํ™œ์šฉ
dd if=/dev/zero of=/dev/null bs=1M count=1000 2>&1 | tee performance.log
 
# ๋น„๋™๊ธฐ ๋กœ๊น…
exec 1> >(logger -s -t "ASYNC_LOG") 2>&1

Security ๊ณ ๋ ค์‚ฌํ•ญ

# ์•ˆ์ „ํ•œ ๋กœ๊ทธ ํŒŒ์ผ ์ƒ์„ฑ
install -m 600 /dev/null app.log
exec 1>>app.log 2>&1
 
# ๋ฏผ๊ฐํ•œ ์ถœ๋ ฅ ํ•„ํ„ฐ๋ง
grep -v "password" < input.log > filtered.log 2>&1

์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ๋ฐฉ์•ˆ

1. ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ๋ˆ„์ˆ˜

์ฆ์ƒ:

# ์ฆ์ƒ: ์—ด๋ฆฐ ํŒŒ์ผ์ด ๋„ˆ๋ฌด ๋งŽ์Œ
-bash: /dev/tcp/host/port: Too many open files

ํ•ด๊ฒฐ:

# ํ˜„์žฌ ์ œํ•œ ํ™•์ธ
ulimit -n
 
# ์ œํ•œ ์ฆ๊ฐ€
ulimit -n 4096
 
# ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ์ •๋ฆฌ
exec 3>&-  # ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” FD ๋‹ซ๊ธฐ

2. ๋กœ๊ทธ ํŒŒ์ผ ๊ถŒํ•œ ๋ฌธ์ œ

์ฆ์ƒ:

-bash: app.log: Permission denied

ํ•ด๊ฒฐ:

# ๋””๋ ‰ํ† ๋ฆฌ ๊ถŒํ•œ ํ™•์ธ
ls -ld /var/log/
 
# ๋กœ๊ทธ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ ์„ค์ •
sudo install -m 664 -o $USER -g syslog /dev/null /var/log/app.log

์ฃผ์˜์‚ฌํ•ญ

์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค

  • ๋กœ๊ทธ ๋กœํ…Œ์ด์…˜ ์„ค์ • ํ•„์š”
  • ๋””์Šคํฌ ๊ณต๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ ์ œํ•œ ๊ณ ๋ ค

๋ฐ์ดํ„ฐ ์•ˆ์ „์„ฑ

  • ์ค‘์š” ๋กœ๊ทธ ๋ฐฑ์—… ๊ตฌ์„ฑ
  • ๋™์‹œ ์ ‘๊ทผ ์‹œ ๋ฝ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์‚ฌ์šฉ
  • ๋กœ๊ทธ ํŒŒ์ผ ๊ถŒํ•œ ์ ์ ˆํžˆ ์„ค์ •

๊ฒฐ๋ก 

Linux์˜ ์ถœ๋ ฅ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์€ ๊ฐ•๋ ฅํ•˜๋ฉด์„œ๋„ ์œ ์—ฐํ•œ ๊ธฐ๋Šฅ์ด๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ์„ ์œ„ํ•ด:

  1. File descriptor์˜ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
  2. ์ ์ ˆํ•œ ๊ถŒํ•œ๊ณผ ๋ณด์•ˆ ์„ค์ •
  3. ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
  4. ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ๋กœ๊น… ์ „๋žต ์ˆ˜๋ฆฝ

์ด๋Ÿฌํ•œ ์š”์†Œ๋“ค์„ ๊ณ ๋ คํ•˜์—ฌ ์•ˆ์ •์ ์ด๊ณ  ํšจ์œจ์ ์ธ ์‹œ์Šคํ…œ ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.