Linux์˜ โ€˜Everything is a Fileโ€™ ์ฒ ํ•™์˜ ์™„๋ฒฝํ•œ ์ดํ•ด

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

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

  • ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ตฌ์กฐ (/bin, /etc, /dev ๋“ฑ)
  • ๊ธฐ๋ณธ Linux ๋ช…๋ น์–ด (ls, cat, echo ๋“ฑ)
  • ํŒŒ์ผ ๊ถŒํ•œ ๊ฐœ๋… (read, write, execute)
  • ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฐจ์ด
  • File descriptor์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

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

โ€Everything is a Fileโ€ ์ •์˜

Linux์—์„œ โ€œ๋ชจ๋“  ๊ฒƒ์ด ํŒŒ์ผ์ด๋‹คโ€๋ผ๋Š” ์ฒ ํ•™์€ ๋ชจ๋“  ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๋ฅผ ํŒŒ์ผ์ด๋ผ๋Š” ๋‹จ์ผ ์ถ”์ƒํ™”๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์‹ค์ƒํ™œ ๋น„์œ : ํ˜ธํ…” ์šด์˜ ์‹œ์Šคํ…œ

ํ˜„๋Œ€์ ์ธ ํ˜ธํ…” ์šด์˜ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด Linux์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•ด๋ณด์ž:

  1. ๋ฌธ์„œ ๊ด€๋ฆฌ (์ผ๋ฐ˜ ํŒŒ์ผ)

    • ๊ณ ๊ฐ ๋ช…๋‹จ = ํ…์ŠคํŠธ ํŒŒ์ผ
    • ์˜ˆ์•ฝ ๊ธฐ๋ก = ๋กœ๊ทธ ํŒŒ์ผ
    • ์ง์› ๋งค๋‰ด์–ผ = ์‹คํ–‰ ํŒŒ์ผ
  2. ์‹œ์„ค ๊ด€๋ฆฌ (์žฅ์น˜ ํŒŒ์ผ)

    • ๊ฐ์‹ค ํ‚ค ์‹œ์Šคํ…œ = ๋ธ”๋ก ์žฅ์น˜
    • ์ธํ„ฐ์ปด = ๋ฌธ์ž ์žฅ์น˜
    • ์—˜๋ฆฌ๋ฒ ์ดํ„ฐ = ํ•˜๋“œ์›จ์–ด ์ธํ„ฐํŽ˜์ด์Šค
  3. ์กฐ์ง ๊ตฌ์กฐ (๋””๋ ‰ํ† ๋ฆฌ)

    • ๋ถ€์„œ๋ณ„ ๊ตฌ๋ถ„ = ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ
    • ์ง์œ„ ์ฒด๊ณ„ = ํŒŒ์ผ ๊ถŒํ•œ ์‹œ์Šคํ…œ
  4. ํ†ต์‹  ์‹œ์Šคํ…œ (ํŒŒ์ดํ”„์™€ ์†Œ์ผ“)

    • ๋‚ด์„  ์ „ํ™” = ํŒŒ์ดํ”„
    • ์™ธ๋ถ€ ์ „ํ™” = ๋„คํŠธ์›Œํฌ ์†Œ์ผ“

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

ํŒŒ์ผ ์ข…๋ฅ˜๋ณ„ ํŠน์ง•

graph TD
    A[Linux ํŒŒ์ผ ์‹œ์Šคํ…œ] --> B[์ผ๋ฐ˜ ํŒŒ์ผ]
    A --> C[๋””๋ ‰ํ† ๋ฆฌ]
    A --> D[ํŠน์ˆ˜ ํŒŒ์ผ]
    A --> E[๋งํฌ]
    D --> F[์žฅ์น˜ ํŒŒ์ผ]
    D --> G[ํ”„๋กœ์„ธ์Šค ํŒŒ์ผ]
    F --> H[๋ธ”๋ก ์žฅ์น˜]
    F --> I[๋ฌธ์ž ์žฅ์น˜]
    E --> J[์‹ฌ๋ณผ๋ฆญ ๋งํฌ]
    E --> K[ํ•˜๋“œ ๋งํฌ]

์‹œ์Šคํ…œ ๊ตฌ์„ฑ์š”์†Œ์™€ ํŒŒ์ผ์˜ ๋งคํ•‘

๊ฐ ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ํŒŒ์ผ๋กœ ํ‘œํ˜„๋˜๋Š”์ง€ ์‚ดํŽด๋ณด์ž:

  1. ํ•˜๋“œ์›จ์–ด ๋ฆฌ์†Œ์Šค
# ํ•˜๋“œ๋””์Šคํฌ ์ ‘๊ทผ
ls -l /dev/sda        # ๋””์Šคํฌ ์žฅ์น˜ ํŒŒ์ผ ํ™•์ธ
# ์ถœ๋ ฅ: brw-rw---- 1 root disk 8, 0 Jan 1 00:00 /dev/sda
 
# ํ”„๋ฆฐํ„ฐ ์ ‘๊ทผ
ls -l /dev/lp0        # ํ”„๋ฆฐํ„ฐ ์žฅ์น˜ ํŒŒ์ผ ํ™•์ธ
# ์ถœ๋ ฅ: crw-rw---- 1 root lp 6, 0 Jan 1 00:00 /dev/lp0
  1. ํ”„๋กœ์„ธ์Šค ์ •๋ณด
# PID 1์˜ ์ƒํƒœ ์ •๋ณด ํ™•์ธ
cat /proc/1/status
# ์ถœ๋ ฅ: Name: systemd
#       State: S (sleeping)
#       Pid: 1
#       ...

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

1. ์ž˜๋ชป๋œ ์ ‘๊ทผ ๋ฐฉ์‹

# ์•ˆ์ข‹์€ ์˜ˆ์ œ: ์ง์ ‘์ ์ธ ๋””๋ฐ”์ด์Šค ์ ‘๊ทผ
dd if=/dev/sda of=disk.img    # ๊ถŒํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
 
# ์•ˆ์ข‹์€ ์˜ˆ์ œ: ํ”„๋กœ์„ธ์Šค ์ง์ ‘ ์ œ์–ด
echo "9" > /proc/1234/oom_adj # ์‹œ์Šคํ…œ ๋ถˆ์•ˆ์ •์„ฑ ์œ ๋ฐœ ๊ฐ€๋Šฅ

2. ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹

# ์ข‹์€ ์˜ˆ์ œ: ์ ์ ˆํ•œ ๊ถŒํ•œ๊ณผ ๋„๊ตฌ ์‚ฌ์šฉ
sudo dd if=/dev/sda of=disk.img bs=4M status=progress
# ์ถœ๋ ฅ: 1048576 bytes (1.0 MB) copied, 0.001773 s, 591 MB/s
 
# ์ข‹์€ ์˜ˆ์ œ: ์‹œ์Šคํ…œ ๋„๊ตฌ ํ™œ์šฉ
sudo renice +1 1234  # ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„ ์กฐ์ •
# ์ถœ๋ ฅ: 1234 (process ID) old priority 0, new priority 1

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

Performance ์ตœ์ ํ™”

# ํŒŒ์ผ ์‹œ์Šคํ…œ ์บ์‹œ ํ™œ์šฉ
dd if=/dev/zero of=test.file bs=1M count=1024 conv=fdatasync
# ๋””์Šคํฌ ์“ฐ๊ธฐ ์„ฑ๋Šฅ ์ธก์ •
 
# ๋ฒ„ํผ ํฌ๊ธฐ ์ตœ์ ํ™”
dd if=/dev/zero of=test.file bs=4M count=256 conv=fdatasync
# ๋” ํฐ ๋ฒ„ํผ๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ

Security ๊ฐ•ํ™”

# ํŒŒ์ผ ๊ถŒํ•œ ์ ์ ˆํžˆ ์„ค์ •
chmod 600 /etc/sensitive.conf  # ์†Œ์œ ์ž๋งŒ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ€๋Šฅ
chmod 755 /usr/local/bin/script.sh  # ์‹คํ–‰ ๊ถŒํ•œ ๋ถ€์—ฌ

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

1. ์žฅ์น˜ ํŒŒ์ผ ์ ‘๊ทผ ๊ถŒํ•œ ๋ฌธ์ œ

์ฆ์ƒ:

$ cat /dev/sda
cat: /dev/sda: Permission denied

์›์ธ๊ณผ ํ•ด๊ฒฐ:

# ์›์ธ ํ™•์ธ
ls -l /dev/sda
# ์ถœ๋ ฅ: brw-rw---- 1 root disk 8, 0 Jan 1 00:00 /dev/sda
 
# ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 1: ๊ทธ๋ฃน ๋ฉค๋ฒ„์‹ญ ์ถ”๊ฐ€
sudo usermod -a -G disk $USER
 
# ํ•ด๊ฒฐ๋ฐฉ๋ฒ• 2: ์ผ์‹œ์  ๊ถŒํ•œ ๋ถ€์—ฌ
sudo dd if=/dev/sda of=backup.img bs=4M

2. ํ”„๋กœ์„ธ์Šค ํŒŒ์ผ์‹œ์Šคํ…œ ์ ‘๊ทผ ์˜ค๋ฅ˜

์ฆ์ƒ:

$ echo 1 > /proc/sys/net/ipv4/ip_forward
-bash: /proc/sys/net/ipv4/ip_forward: Permission denied

ํ•ด๊ฒฐ:

# ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•: sysctl ์‚ฌ์šฉ
sudo sysctl -w net.ipv4.ip_forward=1
# ์ถœ๋ ฅ: net.ipv4.ip_forward = 1

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

์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ

  • ์‹œ์Šคํ…œ ํŒŒ์ผ ์ˆ˜์ • ์ „ ๋ฐฑ์—… ํ•„์ˆ˜
  • ๊ถŒํ•œ ๋ณ€๊ฒฝ ์‹œ ๋ณด์•ˆ ์˜ํ–ฅ ๊ณ ๋ ค
  • ๋Œ€์šฉ๋Ÿ‰ I/O ์ž‘์—… ์‹œ ์‹œ์Šคํ…œ ๋ถ€ํ•˜ ์ฃผ์˜

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

  • ํŒŒ์ผ ๋™์‹œ ์ ‘๊ทผ ์‹œ ๋ฝ(lock) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์‚ฌ์šฉ
  • ์ค‘์š” ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์‹œ ํŠธ๋žœ์žญ์…˜ ๊ณ ๋ ค
  • ์ž„์‹œ ํŒŒ์ผ ์ ์ ˆํ•œ ๊ด€๋ฆฌ

๊ฒฐ๋ก 

Linux์˜ โ€œEverything is a Fileโ€ ์ฒ ํ•™์€ ๋‹จ์ˆœํ•˜๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•œ ์‹œ์Šคํ…œ ๋””์ž์ธ ์›์น™์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด:

  1. ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ
  2. ํ‘œ์ค€ ๋„๊ตฌ๋กœ ๋‹ค์–‘ํ•œ ์ž‘์—… ์ˆ˜ํ–‰
  3. ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ๊ณผ ์ž๋™ํ™” ์šฉ์ด
  4. ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์™€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋‹จ์ˆœํ™”

์ด๋Ÿฌํ•œ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋ฉด์„œ๋„ ์ ์ ˆํ•œ ์ฃผ์˜์‚ฌํ•ญ์„ ์ง€์ผœ ์•ˆ์ •์ ์ธ ์‹œ์Šคํ…œ ์šด์˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.