Kentlo's picture
Sync from GitHub 37f011465a0aa2abdfdd94d8bd5f31cfe932c669
28677d8 verified
Raw
History Blame Contribute Delete
22 kB
[
{
"id": "linux-lab-31",
"title": "๋กœ๊ทธ ๋งˆ์ง€๋ง‰ 20์ค„ ํ™•์ธ",
"task_description": "`/var/log/syslog` ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰ 20์ค„์„ ํ™•์ธํ•˜์„ธ์š”.",
"expected_command": "tail -n 20 /var/log/syslog",
"grading_conditions": [
"tail",
"-n",
"20",
"/var/log/syslog"
],
"hint": "tail์— -n ์˜ต์…˜์œผ๋กœ ์ถœ๋ ฅํ•  ์ค„ ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"explanation": "`tail -n 20 /var/log/syslog`๋Š” ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰ 20์ค„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-32",
"title": "๋กœ๊ทธ ํŒŒ์ผ ์‹ค์‹œ๊ฐ„ ์ถ”์ ",
"task_description": "`/var/log/syslog` ํŒŒ์ผ์— ์ถ”๊ฐ€๋˜๋Š” ๋‚ด์šฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•˜์„ธ์š”.",
"expected_command": "tail -f /var/log/syslog",
"grading_conditions": [
"tail",
"-f",
"/var/log/syslog"
],
"hint": "`-f` ์˜ต์…˜์€ follow์˜ ์•ฝ์ž๋กœ ํŒŒ์ผ ๋์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`tail -f /var/log/syslog`๋Š” ํŒŒ์ผ์— ์ถ”๊ฐ€๋˜๋Š” ๋‚ด์šฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณ„์† ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-33",
"title": "ํŒŒ์ผ ์ƒ์œ„ 10์ค„ ํ™•์ธ",
"task_description": "`/etc/passwd` ํŒŒ์ผ์˜ ์ฒ˜์Œ 10์ค„์„ ํ™•์ธํ•˜์„ธ์š”.",
"expected_command": "head /etc/passwd",
"grading_conditions": [
"head",
"/etc/passwd"
],
"hint": "head๋Š” ๊ธฐ๋ณธ์œผ๋กœ ์ฒ˜์Œ 10์ค„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`head /etc/passwd`๋Š” ํŒŒ์ผ์˜ ์ฒ˜์Œ 10์ค„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. `-n`์œผ๋กœ ์ค„ ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-34",
"title": "sed๋กœ ํ…์ŠคํŠธ ๊ต์ฒด",
"task_description": "`config.txt`์—์„œ `old_value`๋ฅผ `new_value`๋กœ ๋ชจ๋‘ ๊ต์ฒดํ•ด ์ถœ๋ ฅํ•˜์„ธ์š”.",
"expected_command": "sed 's/old_value/new_value/g' config.txt",
"grading_conditions": [
"sed",
"old_value",
"new_value",
"config.txt"
],
"hint": "`s/ํŒจํ„ด/๊ต์ฒด/g` ํ˜•ํƒœ๋กœ ๊ต์ฒด ๋ช…๋ น์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. `g`๋Š” ํ•œ ์ค„์—์„œ ๋ชจ๋‘ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`sed 's/old_value/new_value/g' config.txt`๋Š” ํŒŒ์ผ์—์„œ old_value๋ฅผ ๋ชจ๋‘ new_value๋กœ ๊ต์ฒดํ•ด ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-35",
"title": "sed ์ธํ”Œ๋ ˆ์ด์Šค ์ˆ˜์ •",
"task_description": "`nginx.conf`์—์„œ `localhost`๋ฅผ `127.0.0.1`๋กœ ์ง์ ‘ ์ˆ˜์ •ํ•˜์„ธ์š”.",
"expected_command": "sed -i 's/localhost/127.0.0.1/g' nginx.conf",
"grading_conditions": [
"sed",
"-i",
"localhost",
"127.0.0.1",
"nginx.conf"
],
"hint": "`-i` ์˜ต์…˜์€ ํ‘œ์ค€ ์ถœ๋ ฅ ๋Œ€์‹  ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`sed -i 's/localhost/127.0.0.1/g' nginx.conf`๋Š” nginx.conf ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-36",
"title": "cut์œผ๋กœ ์‚ฌ์šฉ์ž ์ด๋ฆ„ ์ถ”์ถœ",
"task_description": "`/etc/passwd`์—์„œ ์ฝœ๋ก (`:`) ๊ตฌ๋ถ„์ž์˜ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ(์‚ฌ์šฉ์ž ์ด๋ฆ„)๋งŒ ์ถ”์ถœํ•˜์„ธ์š”.",
"expected_command": "cut -d':' -f1 /etc/passwd",
"grading_conditions": [
"cut",
"-d",
"-f1",
"/etc/passwd"
],
"hint": "`-d`๋กœ ๊ตฌ๋ถ„์ž๋ฅผ, `-f`๋กœ ์ถœ๋ ฅํ•  ํ•„๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`cut -d':' -f1 /etc/passwd`๋Š” ์ฝœ๋ก  ๊ตฌ๋ถ„์ž์—์„œ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ(์‚ฌ์šฉ์ž ์ด๋ฆ„)๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-37",
"title": "sort์™€ uniq์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ",
"task_description": "`access.log`์—์„œ ์ค‘๋ณต ์ค„์„ ์ œ๊ฑฐํ•˜๊ณ  ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์ถœ๋ ฅํ•˜์„ธ์š”.",
"expected_command": "sort access.log | uniq",
"grading_conditions": [
"sort",
"access.log",
"uniq"
],
"hint": "`uniq`์€ ์—ฐ์†๋œ ์ค‘๋ณต๋งŒ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ ๋จผ์ € `sort`๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`sort access.log | uniq`์€ ํŒŒ์ผ์„ ์ •๋ ฌํ•œ ๋’ค ์ค‘๋ณต ์ค„์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-38",
"title": "wc๋กœ ์ค„ ์ˆ˜ ์„ธ๊ธฐ",
"task_description": "`/var/log/auth.log` ํŒŒ์ผ์˜ ์ค„ ์ˆ˜๋ฅผ ์„ธ์„ธ์š”.",
"expected_command": "wc -l /var/log/auth.log",
"grading_conditions": [
"wc",
"-l",
"/var/log/auth.log"
],
"hint": "`wc -l`์€ ์ค„ ์ˆ˜, `-w`๋Š” ๋‹จ์–ด ์ˆ˜, `-c`๋Š” ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ์…‰๋‹ˆ๋‹ค.",
"explanation": "`wc -l /var/log/auth.log`๋Š” ํŒŒ์ผ์˜ ์ค„ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-39",
"title": "awk๋กœ ๋‘ ๋ฒˆ์งธ ํ•„๋“œ ์ถœ๋ ฅ",
"task_description": "`access.log`์˜ ๊ฐ ์ค„์—์„œ ๋‘ ๋ฒˆ์งธ ํ•„๋“œ๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.",
"expected_command": "awk '{print $2}' access.log",
"grading_conditions": [
"awk",
"$2",
"access.log"
],
"hint": "awk์—์„œ `$1`, `$2`๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๊ฐ ํ•„๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`awk '{print $2}' access.log`๋Š” ๊ฐ ์ค„์˜ ๋‘ ๋ฒˆ์งธ ํ•„๋“œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-40",
"title": "์‹ฌ๋ณผ๋ฆญ ๋งํฌ ์ƒ์„ฑ",
"task_description": "`/etc/nginx/nginx.conf`๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ `~/nginx.conf`๋ฅผ ๋งŒ๋“œ์„ธ์š”.",
"expected_command": "ln -s /etc/nginx/nginx.conf ~/nginx.conf",
"grading_conditions": [
"ln",
"-s",
"/etc/nginx/nginx.conf",
"nginx.conf"
],
"hint": "`ln -s ์›๋ณธ ๋งํฌ์ด๋ฆ„` ํ˜•ํƒœ๋กœ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.",
"explanation": "`ln -s /etc/nginx/nginx.conf ~/nginx.conf`๋Š” ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์— nginx.conf ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-41",
"title": "๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ๋ชฉ๋ก ํ™•์ธ",
"task_description": "ํ˜„์žฌ ์‰˜์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ๋ชฉ๋ก์„ ํ™•์ธํ•˜์„ธ์š”.",
"expected_command": "jobs",
"grading_conditions": [
"jobs"
],
"hint": "`jobs` ๋ช…๋ น์œผ๋กœ ํ˜„์žฌ ์‰˜์˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"explanation": "`jobs`๋Š” ํ˜„์žฌ ์‰˜์—์„œ `&`๋กœ ์‹คํ–‰๋˜๊ฑฐ๋‚˜ Ctrl+Z๋กœ ์ •์ง€๋œ ์ž‘์—… ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-42",
"title": "nohup ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰",
"task_description": "`long_process.sh` ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ„ฐ๋ฏธ๋„์ด ๋‹ซํ˜€๋„ ๊ณ„์† ์‹คํ–‰๋˜๋„๋ก ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜์„ธ์š”.",
"expected_command": "nohup ./long_process.sh &",
"grading_conditions": [
"nohup",
"long_process.sh",
"&"
],
"hint": "`nohup`์€ HUP ์‹œ๊ทธ๋„์„ ๋ฌด์‹œํ•ด ํ„ฐ๋ฏธ๋„ ์ข…๋ฃŒ ํ›„์—๋„ ๊ณ„์† ์‹คํ–‰๋˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`nohup ./long_process.sh &`๋Š” ํ„ฐ๋ฏธ๋„์ด ๋‹ซํ˜€๋„ ๊ณ„์† ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ nohup.out์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-43",
"title": "๊ถŒํ•œ ๋ณด์กด ํŒŒ์ผ ๋ฐฑ์—…",
"task_description": "`/etc/passwd` ํŒŒ์ผ์„ ๊ถŒํ•œยท์†Œ์œ ์žยทํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ณด์กดํ•ด `/tmp/passwd.bak`์œผ๋กœ ๋ณต์‚ฌํ•˜์„ธ์š”.",
"expected_command": "cp -a /etc/passwd /tmp/passwd.bak",
"grading_conditions": [
"cp",
"-a",
"/etc/passwd",
"/tmp/passwd.bak"
],
"hint": "์ผ๋ฐ˜ `cp`๋Š” ์†์„ฑ์„ ๋ณด์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—… ์‹œ์—๋Š” `-a` ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"explanation": "`cp -a`๋Š” `-dR --preserve=all`์˜ ๋‹จ์ถ•์œผ๋กœ ์‹ฌ๋ณผ๋ฆญ ๋งํฌยท๊ถŒํ•œยท์†Œ์œ ์žยทํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ชจ๋‘ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-44",
"title": "๋””๋ ‰ํ„ฐ๋ฆฌ ์žฌ๊ท€ ์‚ญ์ œ ์ „ ํ™•์ธ",
"task_description": "`/tmp/testdir` ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ญ์ œ ์ „ ๊ฐ ํŒŒ์ผ์„ ํ™•์ธํ•˜๋ฉด์„œ ์ œ๊ฑฐํ•˜์„ธ์š”.",
"expected_command": "rm -ri /tmp/testdir",
"grading_conditions": [
"rm",
"-r",
"-i",
"/tmp/testdir"
],
"hint": "`-r`์€ ์žฌ๊ท€ ์‚ญ์ œ, `-i`๋Š” ๊ฐ ํŒŒ์ผ๋งˆ๋‹ค ํ™•์ธ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "์ค‘์š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์‚ญ์ œํ•  ๋•Œ๋Š” `-i`๋กœ ํ•œ ํŒŒ์ผ์”ฉ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์ด ์‚ฌ๊ณ ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-45",
"title": "MBR ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ (fdisk)",
"task_description": "`/dev/sdb`์— fdisk๋ฅผ ์‚ฌ์šฉํ•ด 20GB ์ฃผ ํŒŒํ‹ฐ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์ €์žฅํ•˜์„ธ์š”. (์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ: n โ†’ p โ†’ 1 โ†’ Enter โ†’ +20G โ†’ w)",
"expected_command": "fdisk /dev/sdb",
"grading_conditions": [
"fdisk",
"/dev/sdb"
],
"hint": "fdisk ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๋ชจ๋“œ์—์„œ `n`(์ƒˆ ํŒŒํ‹ฐ์…˜), `p`(์ฃผ), `1`(๋ฒˆํ˜ธ), Enter(๊ธฐ๋ณธ ์‹œ์ž‘), `+20G`(ํฌ๊ธฐ), `w`(์ €์žฅ) ์ˆœ์„œ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "fdisk๋Š” MBR ๋ฐฉ์‹์œผ๋กœ ์ตœ๋Œ€ 2TB ๋””์Šคํฌ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ `w`๋ฅผ ์ž…๋ ฅํ•ด์•ผ ์‹ค์ œ ๋””์Šคํฌ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-46",
"title": "ext4 ํŒŒ์ผ์‹œ์Šคํ…œ ์ƒ์„ฑ",
"task_description": "`/dev/sdb1` ํŒŒํ‹ฐ์…˜์— ext4 ํŒŒ์ผ์‹œ์Šคํ…œ์„ ์ƒ์„ฑํ•˜์„ธ์š”.",
"expected_command": "mkfs.ext4 /dev/sdb1",
"grading_conditions": [
"mkfs.ext4",
"/dev/sdb1"
],
"hint": "`mkfs.ext4` ๋˜๋Š” `mkfs -t ext4`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ ํ›„ ํŒŒ์ผ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์•ผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ๋งทํ•˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋ฏ€๋กœ ๋Œ€์ƒ ๋””๋ฐ”์ด์Šค๋ฅผ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์„ธ์š”.",
"difficulty": "easy"
},
{
"id": "linux-lab-47",
"title": "ํŒŒ์ผ์‹œ์Šคํ…œ UUID ํ™•์ธ",
"task_description": "`/dev/sdb1`์˜ UUID๋ฅผ ํ™•์ธํ•˜์„ธ์š”.",
"expected_command": "blkid /dev/sdb1",
"grading_conditions": [
"blkid",
"/dev/sdb1"
],
"hint": "`blkid`๋Š” ๋ธ”๋ก ๋””๋ฐ”์ด์Šค์˜ UUID์™€ ํŒŒ์ผ์‹œ์Šคํ…œ ์œ ํ˜•์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "fstab์— ์žฅ์น˜๋ช… ๋Œ€์‹  UUID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์žฌ๋ถ€ํŒ… ์‹œ ๋””๋ฐ”์ด์Šค ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์˜ฌ๋ฐ”๋ฅธ ํŒŒํ‹ฐ์…˜์ด ๋งˆ์šดํŠธ๋ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-48",
"title": "๊ทธ๋ฃน ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉ์ž ์ถ”๊ฐ€",
"task_description": "`devteam` ๊ทธ๋ฃน์„ ๋งŒ๋“ค๊ณ  `alice`๋ฅผ ๊ธฐ์กด ๊ทธ๋ฃน์„ ์œ ์ง€ํ•œ ์ฑ„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.",
"expected_command": "groupadd devteam && usermod -aG devteam alice",
"grading_conditions": [
"groupadd devteam",
"usermod",
"-aG",
"devteam",
"alice"
],
"hint": "๊ทธ๋ฃน ์ƒ์„ฑ์€ `groupadd`, ์‚ฌ์šฉ์ž๋ฅผ ๋ณด์กฐ ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” `-aG`(append)๋ฅผ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"explanation": "`-a` ์—†์ด `-G`๋งŒ ์“ฐ๋ฉด alice์˜ ๊ธฐ์กด ๋ณด์กฐ ๊ทธ๋ฃน์ด ๋ชจ๋‘ devteam์œผ๋กœ ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค. `-aG`๊ฐ€ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-49",
"title": "์ฒซ ๋กœ๊ทธ์ธ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ฐ•์ œ",
"task_description": "์ƒˆ ์‚ฌ์šฉ์ž `bob`์ด ์ฒซ ๋กœ๊ทธ์ธ ์‹œ ๋ฐ˜๋“œ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ์„ค์ •ํ•˜์„ธ์š”.",
"expected_command": "chage -d 0 bob",
"grading_conditions": [
"chage",
"-d 0",
"bob"
],
"hint": "`chage -d 0`์€ ๋งˆ์ง€๋ง‰ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์ผ์„ ์—ํฌํฌ๋กœ ์„ค์ •ํ•ด ์ฆ‰์‹œ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "๋‹ค์Œ ๋กœ๊ทธ์ธ ์‹œ PAM์ด ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งŒ๋ฃŒ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์‹ ๊ทœ ๊ณ„์ • ๋ฐœ๊ธ‰ ์‹œ ํ‘œ์ค€ ๋ณด์•ˆ ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-50",
"title": "systemd ์„œ๋น„์Šค ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”",
"task_description": "`/usr/local/bin/myapp`์„ ์‹คํ–‰ํ•˜๋Š” `myapp.service`๋ฅผ ๋งŒ๋“ค๊ณ  ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ํ•˜๋„๋ก ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.",
"expected_command": "systemctl daemon-reload && systemctl enable --now myapp",
"grading_conditions": [
"systemctl daemon-reload",
"systemctl enable",
"myapp"
],
"hint": "์œ ๋‹› ํŒŒ์ผ์„ `/etc/systemd/system/myapp.service`์— ์ž‘์„ฑํ•œ ๋’ค daemon-reload โ†’ enable --now ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "`daemon-reload`๋Š” ๋ณ€๊ฒฝ๋œ ์œ ๋‹› ํŒŒ์ผ์„ systemd๊ฐ€ ์ธ์‹ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. `enable --now`๋Š” ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ ๋“ฑ๋ก๊ณผ ์ฆ‰์‹œ ์‹คํ–‰์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "medium"
},
{
"id": "linux-lab-51",
"title": "์ผํšŒ์„ฑ ์ž‘์—… ์˜ˆ์•ฝ (at)",
"task_description": "2์‹œ๊ฐ„ ํ›„์— `/usr/local/bin/backup.sh`๋ฅผ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•˜๋„๋ก ์˜ˆ์•ฝํ•˜์„ธ์š”.",
"expected_command": "echo '/usr/local/bin/backup.sh' | at now + 2 hours",
"grading_conditions": [
"at",
"now + 2 hours"
],
"hint": "`echo '๋ช…๋ น' | at now + 2 hours` ํ˜•์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. `at` ๋ช…๋ น ํ›„ Ctrl+D๋กœ๋„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"explanation": "`at`์€ ์ผํšŒ์„ฑ ์Šค์ผ€์ค„๋ง ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ์‹คํ–‰์ด ํ•„์š”ํ•˜๋ฉด cron์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์˜ˆ์•ฝ ๋ชฉ๋ก์€ `atq`๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-52",
"title": "Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋ฐ ํ™•์ธ",
"task_description": "nginx ์ด๋ฏธ์ง€๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜๊ณ  ํ˜ธ์ŠคํŠธ ํฌํŠธ 8080์„ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ 80์— ์—ฐ๊ฒฐํ•œ ๋’ค, ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.",
"expected_command": "docker run -d -p 8080:80 nginx && docker ps",
"grading_conditions": [
"docker run",
"-d",
"-p 8080:80",
"nginx",
"docker ps"
],
"hint": "`-d`๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ(detach), `-p ํ˜ธ์ŠคํŠธ:์ปจํ…Œ์ด๋„ˆ`๋กœ ํฌํŠธ๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰ ์ค‘์ด๋ฉด `docker ps`์—์„œ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค. ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ๊นŒ์ง€ ๋ณด๋ ค๋ฉด `docker ps -a`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "easy"
},
{
"id": "linux-lab-53",
"title": "[์‹œ๋‚˜๋ฆฌ์˜ค] ์‹ ๊ทœ ๋””์Šคํฌ ์ „์ฒด ์„ค์ • (ํŒŒํ‹ฐ์…˜โ†’ํฌ๋งทโ†’๋งˆ์šดํŠธโ†’fstab)",
"task_description": "์‹ ๊ทœ ๋””์Šคํฌ `/dev/sdb`์— ํŒŒํ‹ฐ์…˜์„ ๋งŒ๋“ค๊ณ  ext4๋กœ ํฌ๋งทํ•œ ๋’ค `/data`์— ์˜๊ตฌ ๋งˆ์šดํŠธํ•˜๋Š” ์ „์ฒด ์ ˆ์ฐจ๋ฅผ ์™„์„ฑํ•˜์„ธ์š”.\n\n๋‹จ๊ณ„:\n1. `/dev/sdb`์— ๋‹จ์ผ ์ฃผ ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ (fdisk)\n2. `/dev/sdb1`์— ext4 ํŒŒ์ผ์‹œ์Šคํ…œ ์ƒ์„ฑ\n3. `/data` ๋งˆ์šดํŠธ ํฌ์ธํŠธ ์ƒ์„ฑ\n4. `/dev/sdb1`์„ `/data`์— ๋งˆ์šดํŠธ\n5. `/etc/fstab`์— UUID ๊ธฐ๋ฐ˜์œผ๋กœ ๋“ฑ๋ก ํ›„ `mount -a`๋กœ ๊ฒ€์ฆ\n\n์ด ๋‹จ๊ณ„ ์ค‘ `blkid /dev/sdb1`์˜ ๋ชฉ์ ์„ ์„œ์ˆ ํ•˜์„ธ์š”.",
"expected_command": "fdisk /dev/sdb && mkfs.ext4 /dev/sdb1 && mkdir /data && mount /dev/sdb1 /data && blkid /dev/sdb1",
"grading_conditions": [
"fdisk /dev/sdb",
"mkfs.ext4 /dev/sdb1",
"mkdir /data",
"mount /dev/sdb1 /data",
"blkid /dev/sdb1"
],
"hint": "์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค: fdisk โ†’ mkfs โ†’ mkdir โ†’ mount โ†’ blkid(UUID ํ™•์ธ) โ†’ fstab ๋“ฑ๋ก โ†’ mount -a",
"explanation": "์ด ํ๋ฆ„์€ LFCS ์‹ค๊ธฐ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋ณตํ•ฉ ์Šคํ† ๋ฆฌ์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. fstab์— UUID๋ฅผ ์“ฐ๋Š” ์ด์œ ๋Š” ์žฌ๋ถ€ํŒ… ์‹œ ๋””๋ฐ”์ด์Šค ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์˜ฌ๋ฐ”๋ฅธ ํŒŒํ‹ฐ์…˜์ด ๋งˆ์šดํŠธ๋˜๋„๋ก ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.",
"difficulty": "hard"
},
{
"id": "linux-lab-54",
"title": "[์‹œ๋‚˜๋ฆฌ์˜ค] LVM ๋ณผ๋ฅจ ํ™•์žฅ (PVโ†’VG ํ™•์žฅโ†’LV ํ™•์žฅโ†’FS ํ™•์žฅ)",
"task_description": "๊ธฐ์กด VG `vg_data`์— ์ƒˆ PV `/dev/sdc`๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , LV `lv_app`์„ 10GB ๋Š˜๋ฆฐ ๋’ค ext4 ํŒŒ์ผ์‹œ์Šคํ…œ๊นŒ์ง€ ํ™•์žฅํ•˜์„ธ์š”.\n\n๋‹จ๊ณ„:\n1. `/dev/sdc`๋ฅผ PV๋กœ ์ดˆ๊ธฐํ™”\n2. `/dev/sdc`๋ฅผ `vg_data`์— ์ถ”๊ฐ€\n3. `lv_app`์„ 10GB ์ฆ๊ฐ€\n4. ext4 ํŒŒ์ผ์‹œ์Šคํ…œ ํ™•์žฅ (๋ฌด์ค‘๋‹จ)",
"expected_command": "pvcreate /dev/sdc && vgextend vg_data /dev/sdc && lvextend -L +10G /dev/vg_data/lv_app && resize2fs /dev/vg_data/lv_app",
"grading_conditions": [
"pvcreate /dev/sdc",
"vgextend vg_data /dev/sdc",
"lvextend",
"+10G",
"/dev/vg_data/lv_app",
"resize2fs"
],
"hint": "LVM ํ™•์žฅ ์ˆœ์„œ: pvcreate โ†’ vgextend โ†’ lvextend โ†’ resize2fs. `lvextend -r` ์˜ต์…˜์œผ๋กœ resize2fs๋ฅผ ํ†ตํ•ฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.",
"explanation": "LVM์˜ ๊ฐ•์ ์€ ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ๋ณผ๋ฅจ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. `lvextend -r`์€ LV ํ™•์žฅ๊ณผ ํŒŒ์ผ์‹œ์Šคํ…œ ํ™•์žฅ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "hard"
},
{
"id": "linux-lab-55",
"title": "[์‹œ๋‚˜๋ฆฌ์˜ค] ํŒ€ ๊ณต์œ  ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ณด์•ˆ ์„ค์ • (๊ทธ๋ฃน+SGID+ACL)",
"task_description": "๊ฐœ๋ฐœํŒ€ ๊ณต์œ  ๋””๋ ‰ํ„ฐ๋ฆฌ `/srv/devteam`์„ ์„ค์ •ํ•˜์„ธ์š”.\n\n์š”๊ตฌ์‚ฌํ•ญ:\n1. `devteam` ๊ทธ๋ฃน ์ƒ์„ฑ\n2. `alice`์™€ `bob`์„ `devteam`์— ์ถ”๊ฐ€\n3. `/srv/devteam` ์†Œ์œ  ๊ทธ๋ฃน์„ `devteam`์œผ๋กœ ์„ค์ •\n4. ๊ทธ๋ฃน์— rwx ๊ถŒํ•œ ๋ถ€์—ฌ, ๊ธฐํƒ€ ์‚ฌ์šฉ์ž๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€\n5. ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ๋„ ์ž๋™์œผ๋กœ `devteam` ์†Œ์œ ๊ฐ€ ๋˜๋„๋ก SGID ์„ค์ •\n6. ์˜ค์ง `alice`์—๊ฒŒ๋งŒ ACL๋กœ ์ถ”๊ฐ€ ์‹คํ–‰ ๊ถŒํ•œ ๋ถ€์—ฌ",
"expected_command": "groupadd devteam && usermod -aG devteam alice && usermod -aG devteam bob && chgrp devteam /srv/devteam && chmod 2770 /srv/devteam && setfacl -m u:alice:rwx /srv/devteam",
"grading_conditions": [
"groupadd devteam",
"usermod -aG devteam alice",
"usermod -aG devteam bob",
"chgrp devteam",
"chmod 2770",
"setfacl -m u:alice"
],
"hint": "SGID ๋น„ํŠธ๋Š” chmod ์•ž์— 2๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค(์˜ˆ: 2770). ACL์€ ๊ธฐ๋ณธ ๊ถŒํ•œ๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "2770 = SGID(2) + ์†Œ์œ ์žrwx(7) + ๊ทธ๋ฃนrwx(7) + ๊ธฐํƒ€์—†์Œ(0). SGID๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ƒ์„ฑ๋œ ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ทธ๋ฃน์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "hard"
},
{
"id": "linux-lab-56",
"title": "[์‹œ๋‚˜๋ฆฌ์˜ค] ์ปค์Šคํ…€ systemd ์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™”",
"task_description": "`/opt/myapp/run.sh` ์Šคํฌ๋ฆฝํŠธ๋ฅผ systemd ์„œ๋น„์Šค๋กœ ๋“ฑ๋กํ•˜์„ธ์š”.\n\n์š”๊ตฌ์‚ฌํ•ญ:\n1. `/etc/systemd/system/myapp.service` ํŒŒ์ผ ์ž‘์„ฑ\n2. ์ „์šฉ ์‹œ์Šคํ…œ ๊ณ„์ • `myapp`์œผ๋กœ ์‹คํ–‰ (๋กœ๊ทธ์ธ ๋ถˆ๊ฐ€)\n3. ๋„คํŠธ์›Œํฌ ์ค€๋น„ ํ›„ ์‹œ์ž‘ (`After=network.target`)\n4. ์‹คํŒจ ์‹œ ์ž๋™ ์žฌ์‹œ์ž‘\n5. ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ ์„ค์ •\n\n์ž‘์„ฑ ํ›„ ์ฆ‰์‹œ ์‹œ์ž‘๊นŒ์ง€ ์™„๋ฃŒํ•˜์„ธ์š”.",
"expected_command": "useradd -r -s /sbin/nologin myapp && systemctl daemon-reload && systemctl enable --now myapp",
"grading_conditions": [
"useradd -r",
"-s /sbin/nologin myapp",
"systemctl daemon-reload",
"systemctl enable",
"myapp"
],
"hint": "์‹œ์Šคํ…œ ์„œ๋น„์Šค ๊ณ„์ •์€ `useradd -r`(์‹œ์Šคํ…œ ๊ณ„์ •)๊ณผ `-s /sbin/nologin`(๋กœ๊ทธ์ธ ์ฐจ๋‹จ)์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์œ ๋‹› ํŒŒ์ผ ์ž‘์„ฑ ํ›„ daemon-reload ํ•„์ˆ˜.",
"explanation": "์šด์˜ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค๋Š” ์ „์šฉ ์ตœ์†Œ ๊ถŒํ•œ ๊ณ„์ •์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. `-r` ํ”Œ๋ž˜๊ทธ๋Š” ์‹œ์Šคํ…œ ๊ณ„์ •์šฉ ๋‚ฎ์€ UID๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "hard"
},
{
"id": "linux-lab-57",
"title": "[์‹œ๋‚˜๋ฆฌ์˜ค] SSH ๋ณด์•ˆ ๊ฐ•ํ™” (ํ‚ค ์ธ์ฆ ์ „ํ™˜ + ๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐจ๋‹จ)",
"task_description": "์„œ๋ฒ„ SSH๋ฅผ ํ‚ค ๊ธฐ๋ฐ˜ ์ธ์ฆ์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ ๋กœ๊ทธ์ธ์„ ์ฐจ๋‹จํ•˜์„ธ์š”.\n\n๋‹จ๊ณ„:\n1. ๋กœ์ปฌ์—์„œ ED25519 ํ‚ค ์Œ ์ƒ์„ฑ\n2. ๊ณต๊ฐœ ํ‚ค๋ฅผ ์„œ๋ฒ„ `alice` ๊ณ„์ •์— ๋ณต์‚ฌ (`ssh-copy-id`)\n3. `/etc/ssh/sshd_config`์—์„œ:\n - `PasswordAuthentication no`\n - `PermitRootLogin prohibit-password`\n4. sshd ์žฌ์‹œ์ž‘ ์ „ ์„ค์ • ๋ฌธ๋ฒ• ๊ฒ€์ฆ\n5. sshd ์žฌ์‹œ์ž‘",
"expected_command": "ssh-keygen -t ed25519 && ssh-copy-id alice@server && sshd -t && systemctl restart sshd",
"grading_conditions": [
"ssh-keygen -t ed25519",
"ssh-copy-id",
"sshd -t",
"systemctl restart sshd"
],
"hint": "`sshd -t`๋Š” ์„ค์ • ํŒŒ์ผ ๋ฌธ๋ฒ•์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์žฌ์‹œ์ž‘ ์ „์— ๋ฐ˜๋“œ์‹œ ์‹คํ–‰ํ•ด ์ž ๊ธˆ ๋ฐฉ์ง€.",
"explanation": "๋น„๋ฐ€๋ฒˆํ˜ธ ์ธ์ฆ์„ ๋„๊ธฐ ์ „ ํ‚ค ์ธ์ฆ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. `sshd -t` ์‹คํŒจ ์‹œ ์žฌ์‹œ์ž‘ํ•˜๋ฉด ์„œ๋ฒ„์— ์ ‘์† ๋ถˆ๊ฐ€ ์ƒํƒœ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"difficulty": "hard"
},
{
"id": "linux-lab-58",
"title": "[์‹œ๋‚˜๋ฆฌ์˜ค] ๋ธŒ๋ฃจํŠธํฌ์Šค IP ํƒ์ง€ ํ›„ ๋ฐฉํ™”๋ฒฝ ์ฐจ๋‹จ",
"task_description": "`/var/log/auth.log`๋ฅผ ๋ถ„์„ํ•ด SSH ๋กœ๊ทธ์ธ ์‹คํŒจ IP๋ฅผ ์ฐพ๊ณ  ufw๋กœ ์ฐจ๋‹จํ•˜์„ธ์š”.\n\n๋‹จ๊ณ„:\n1. auth.log์—์„œ 'Failed' ํฌํ•จ ์ค„์˜ IP(ํ•„๋“œ 11)๋ฅผ ์ถ”์ถœ\n2. ํšŸ์ˆ˜ ๊ธฐ์ค€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ\n3. ์ƒ์œ„ IP๋ฅผ ufw deny๋กœ ์ฐจ๋‹จ\n4. ufw ๊ทœ์น™ ํ™•์ธ",
"expected_command": "grep 'Failed' /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn | head -5",
"grading_conditions": [
"grep 'Failed' /var/log/auth.log",
"awk",
"sort",
"uniq -c",
"sort -rn"
],
"hint": "grepโ†’awkโ†’sortโ†’uniq -cโ†’sort -rn ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ IP๋ณ„ ์‹คํŒจ ํšŸ์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค.",
"explanation": "์ด ํŒŒ์ดํ”„๋ผ์ธ์€ ๋ณด์•ˆ ๋ถ„์„์˜ ๊ธฐ๋ณธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ํƒ์ง€๋œ IP๋Š” `ufw deny from 1.2.3.4`๋กœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. fail2ban์ด ์ด ๊ณผ์ •์„ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค.",
"difficulty": "hard"
},
{
"id": "linux-lab-59",
"title": "[์‹œ๋‚˜๋ฆฌ์˜ค] Docker ์ปจํ…Œ์ด๋„ˆ ์›น ์„œ๋ฒ„ ๋ฐฐํฌ ๋ฐ ๋กœ๊ทธ ํ™•์ธ",
"task_description": "nginx ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์šด์˜ ์ƒํƒœ๋ฅผ ๊ฒ€์ฆํ•˜์„ธ์š”.\n\n๋‹จ๊ณ„:\n1. nginx:latest ์ด๋ฏธ์ง€ pull\n2. ์ด๋ฆ„ `webserver`, ํ˜ธ์ŠคํŠธ 8080โ†’์ปจํ…Œ์ด๋„ˆ 80, ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰\n3. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ƒํƒœ ํ™•์ธ\n4. `curl localhost:8080`์œผ๋กœ ์‘๋‹ต ํ™•์ธ\n5. ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ๋งˆ์ง€๋ง‰ 20์ค„ ํ™•์ธ",
"expected_command": "docker pull nginx:latest && docker run -d -p 8080:80 --name webserver nginx && docker ps && curl localhost:8080 && docker logs --tail 20 webserver",
"grading_conditions": [
"docker pull nginx",
"docker run -d -p 8080:80 --name webserver nginx",
"docker ps",
"curl localhost:8080",
"docker logs --tail 20 webserver"
],
"hint": "`docker logs --tail N`์œผ๋กœ ์ตœ๊ทผ N์ค„๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `--follow`๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ๋ฉ๋‹ˆ๋‹ค.",
"explanation": "์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ ํ›„ ps๋กœ ์ƒํƒœ, curl๋กœ ์‘๋‹ต, logs๋กœ ๋‚ด๋ถ€ ๋™์ž‘์„ ํ™•์ธํ•˜๋Š” 3๋‹จ๊ณ„ ๊ฒ€์ฆ์€ ์šด์˜ ํ™˜๊ฒฝ ํ‘œ์ค€ ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค.",
"difficulty": "hard"
}
]