Kentlo's picture
Sync from GitHub 37f011465a0aa2abdfdd94d8bd5f31cfe932c669
28677d8 verified
Raw
History Blame Contribute Delete
83.5 kB
[
{
"id": "linux-pwd",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "pwd โ€” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ํ™•์ธ",
"summary": "ํ˜„์žฌ ์‰˜์˜ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์กฐ์ž‘ ๋ช…๋ น์€ ๋ชจ๋‘ ์ด ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ž‘์—… ์ „ ํ™•์ธ ์Šต๊ด€์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.",
"example": "pwd\n# /home/ubuntu\ncd /var/log && pwd\n# /var/log",
"common_mistake": "์ƒ๋Œ€๊ฒฝ๋กœ(../dir)๋Š” pwd ๊ฒฐ๊ณผ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค. ํ—ท๊ฐˆ๋ฆฌ๋ฉด ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"keywords": [
"pwd",
"working directory",
"absolute path"
],
"source_id": "linux-bash-manual",
"details": [
"`pwd`๋Š” ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ์— ํ‘œ์‹œ๋œ ๊ฒฝ๋กœ๊ฐ€ ์ž˜๋ฆด ๋•Œ ์ •ํ™•ํ•œ ์œ„์น˜๋ฅผ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ์”๋‹ˆ๋‹ค.",
"์Šคํฌ๋ฆฝํŠธ์—์„œ `DIR=$(pwd)`๋กœ ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ ์ €์žฅํ•ด๋‘๋ฉด `cd` ํ›„ `cd $DIR`๋กœ ๋ณต๊ท€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜์—์„œ๋Š” `cd`๋กœ ์ด๋™ ํ›„ `pwd` ๊ฒฐ๊ณผ๋ฅผ ๋ฌป๊ฑฐ๋‚˜, ์ƒ๋Œ€๊ฒฝ๋กœ ๋ช…๋ น์ด ์–ด๋А ์œ„์น˜์— ์ ์šฉ๋˜๋Š”์ง€ ์ถ”๋ก ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-ls",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ls โ€” ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก ํ™•์ธ",
"summary": "๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ๊ณผ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œยท์†Œ์œ ์žยทํฌ๊ธฐยท์ˆ˜์ •์‹œ๊ฐ„๊นŒ์ง€ ๋ณด๋ ค๋ฉด `-l`, ์ˆจ๊น€ํŒŒ์ผ ํฌํ•จ์€ `-a`๋ฅผ ์”๋‹ˆ๋‹ค.",
"example": "ls -al /etc\nls -lh /var/log\nls -lt # ์ˆ˜์ •์‹œ๊ฐ„ ์—ญ์ˆœ ์ •๋ ฌ",
"common_mistake": "`ls -l`์˜ ์ฒซ ์ปฌ๋Ÿผ์€ ๊ถŒํ•œ ๋น„ํŠธ(rwxrwxrwx)์ž…๋‹ˆ๋‹ค. d๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋””๋ ‰ํ„ฐ๋ฆฌ, -๋ฉด ์ผ๋ฐ˜ ํŒŒ์ผ, l์ด๋ฉด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ.",
"keywords": [
"ls",
"-l",
"-a",
"-h",
"hidden files",
"permissions"
],
"source_id": "linux-bash-manual",
"details": [
"`ls -l` ์ถœ๋ ฅ: `๊ถŒํ•œ ๋งํฌ์ˆ˜ ์†Œ์œ ์ž ๊ทธ๋ฃน ํฌ๊ธฐ ๋‚ ์งœ ์ด๋ฆ„` ์ˆœ์„œ. ๊ถŒํ•œ ๋น„ํŠธ ์ฝ๊ธฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ตํ˜€์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"`-a`๋Š” `.`์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆจ๊น€ํŒŒ์ผ ํฌํ•จ. `-h`๋Š” ์šฉ๋Ÿ‰์„ KB/MB๋กœ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ํŒŒ์ผ ๊ถŒํ•œยท์†Œ์œ ์ž๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜, ์ตœ๊ทผ ์ˆ˜์ • ํŒŒ์ผ์„ ์ฐพ๋Š” ๋ฌธ์ œ์—์„œ `ls -lt` ์กฐํ•ฉ์ด ์ž์ฃผ ๋‚˜์˜ต๋‹ˆ๋‹ค."
]
},
{
"id": "linux-cd",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "cd โ€” ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋™",
"summary": "์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ƒ๋Œ€๊ฒฝ๋กœ ๋ช…๋ น์˜ ๊ธฐ์ค€์ด ๋ฐ”๋€๋‹ˆ๋‹ค.",
"example": "cd /etc/nginx # ์ ˆ๋Œ€๊ฒฝ๋กœ ์ด๋™\ncd .. # ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ\ncd ~ # ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ\ncd - # ์ด์ „ ๋””๋ ‰ํ„ฐ๋ฆฌ",
"common_mistake": "`cd ..`์€ ํ•œ ๋‹จ๊ณ„ ์œ„, `cd /`๋Š” ๋ฃจํŠธ๋กœ ์ด๋™. `cd -`๋Š” ๋ฐ”๋กœ ์ง์ „ ์œ„์น˜๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.",
"keywords": [
"cd",
"relative path",
"absolute path",
"home"
],
"source_id": "linux-bash-cd",
"details": [
"`cd ์ ˆ๋Œ€๊ฒฝ๋กœ`๋Š” ์–ด๋””์„œ๋“  ๋™์ผ ์œ„์น˜๋กœ ์ด๋™. `cd ์ƒ๋Œ€๊ฒฝ๋กœ`๋Š” ํ˜„์žฌ ์œ„์น˜ ๊ธฐ์ค€์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.",
"`cd ~user`๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž ์ž‘์—… ์‹œ ์ž์ฃผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์—ฌ๋Ÿฌ ๋ฒˆ `cd`๋กœ ์ด๋™ ํ›„ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๋ฌป๊ฑฐ๋‚˜, ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ๋กœ ํ‘œํ˜„์‹์„ ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-mkdir",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "mkdir โ€” ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ",
"summary": "์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. `-p` ์˜ต์…˜์œผ๋กœ ์ค‘๊ฐ„ ๊ฒฝ๋กœ๊ฐ€ ์—†์–ด๋„ ํ•œ ๋ฒˆ์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"example": "mkdir logs\nmkdir -p /srv/app/config # ์ค‘๊ฐ„ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ž๋™ ์ƒ์„ฑ\nmkdir -m 750 secure_dir # ๊ถŒํ•œ ์ง€์ •ํ•ด ์ƒ์„ฑ",
"common_mistake": "๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒฝ๋กœ์— `mkdir`๋งŒ ์“ฐ๋ฉด ์—๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. `-p`๋ฅผ ๋ถ™์ด๋ฉด ๋ถ€๋ชจ๊นŒ์ง€ ์ž๋™ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.",
"keywords": [
"mkdir",
"-p",
"directory",
"create"
],
"source_id": "linux-bash-manual",
"details": [
"`mkdir -p a/b/c`๋Š” a, a/b, a/b/c๋ฅผ ํ•œ ๋ฒˆ์— ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฒฝ๋กœ ์ค€๋น„ ์‹œ ํ•„์ˆ˜ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.",
"`-m ๋ชจ๋“œ`๋กœ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ๊ถŒํ•œ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: `mkdir -m 700 private`.",
"์‹œํ—˜ ํŒจํ„ด: ์‹ค์Šต์—์„œ ํŠน์ • ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด์–ด์„œ ๊ถŒํ•œยท์†Œ์œ ์ž๋ฅผ ์„ค์ •ํ•˜๋Š” ํ๋ฆ„์œผ๋กœ ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-touch",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "touch โ€” ํŒŒ์ผ ์ƒ์„ฑ / ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐฑ์‹ ",
"summary": "๋นˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์ด๋ฏธ ์žˆ๋Š” ํŒŒ์ผ์˜ ์ˆ˜์ • ์‹œ๊ฐ„์„ ํ˜„์žฌ ์‹œ๊ฐ์œผ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.",
"example": "touch newfile.txt\ntouch -t 202401010000 old.txt # ํŠน์ • ์‹œ๊ฐ์œผ๋กœ ์„ค์ •",
"common_mistake": "์ด๋ฏธ ์žˆ๋Š” ํŒŒ์ผ์— `touch`๋ฅผ ์“ฐ๋ฉด ๋‚ด์šฉ์„ ์ง€์šฐ์ง€ ์•Š๊ณ  ์‹œ๊ฐ„ ์ •๋ณด๋งŒ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.",
"keywords": [
"touch",
"timestamp",
"create",
"mtime"
],
"source_id": "linux-bash-manual",
"details": [
"ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๋นˆ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ์žˆ์œผ๋ฉด atime(์ ‘๊ทผ)๊ณผ mtime(์ˆ˜์ •) ์‹œ๊ฐ์„ ํ˜„์žฌ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.",
"`-t YYYYMMDDhhmm` ํ˜•ํƒœ๋กœ ์›ํ•˜๋Š” ์‹œ๊ฐ์„ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŒŒ์ผ ์ƒ์„ฑ ํ›„ `ls -l`๋กœ ์กด์žฌยท์‹œ๊ฐ ํ™•์ธ, ๋˜๋Š” `find -newer`๋กœ ์ตœ๊ทผ ํŒŒ์ผ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ๋ฆ„๊ณผ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-cat",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "cat โ€” ํŒŒ์ผ ๋‚ด์šฉ ์ถœ๋ ฅ",
"summary": "ํŒŒ์ผ ๋‚ด์šฉ์„ ํ‘œ์ค€ ์ถœ๋ ฅ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์œผ๋กœ ํŒŒ์ผ์„ ๋งŒ๋“ค ๋•Œ๋„ ์”๋‹ˆ๋‹ค.",
"example": "cat /etc/hostname\ncat file1.txt file2.txt > merged.txt\ncat -n file.txt # ์ค„ ๋ฒˆํ˜ธ ํ‘œ์‹œ",
"common_mistake": "ํฐ ํŒŒ์ผ์€ `cat` ๋Œ€์‹  `less`(์Šคํฌ๋กค), `head`/`tail`(์ผ๋ถ€๋งŒ)์„ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"keywords": [
"cat",
"stdout",
"concatenate",
"-n"
],
"source_id": "linux-bash-manual",
"details": [
"`cat`์€ ํŒŒ์ผ ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. `/etc/passwd`, `/etc/hosts` ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ ๋น ๋ฅด๊ฒŒ ๋ณผ ๋•Œ ์”๋‹ˆ๋‹ค.",
"`cat file1 file2 > combined`๋กœ ๋‘ ํŒŒ์ผ์„ ํ•ฉ์นฉ๋‹ˆ๋‹ค. `>>` ์‚ฌ์šฉ ์‹œ ๊ธฐ์กด ํŒŒ์ผ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: `cat > file << EOF โ€ฆ EOF` ํ˜•ํƒœ์˜ here-doc์œผ๋กœ ํŒŒ์ผ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ํŒจํ„ด๋„ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-grep",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "grep โ€” ํ…์ŠคํŠธ ํŒจํ„ด ๊ฒ€์ƒ‰",
"summary": "ํŒŒ์ผ์ด๋‚˜ ํ‘œ์ค€ ์ž…๋ ฅ์—์„œ ํŒจํ„ด์ด ์žˆ๋Š” ์ค„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ๋ถ„์„๊ณผ ์„ค์ • ํŒŒ์ผ ๊ฒ€์ƒ‰์— ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.",
"example": "grep 'ERROR' /var/log/syslog\ngrep -rn 'PermitRootLogin' /etc/ssh/\ngrep -v '^#' /etc/ssh/sshd_config # ์ฃผ์„ ์ œ์™ธ",
"common_mistake": "`grep`์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ถ„ ์—†์ด ์ฐพ์œผ๋ ค๋ฉด `-i`๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.",
"keywords": [
"grep",
"-r",
"-n",
"-i",
"-v",
"pattern",
"regex"
],
"source_id": "linux-grep-manual",
"details": [
"์ฃผ์š” ์˜ต์…˜: `-r`(์žฌ๊ท€), `-n`(์ค„๋ฒˆํ˜ธ), `-i`(๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ), `-v`(์ œ์™ธ), `-l`(ํŒŒ์ผ๋ช…๋งŒ), `-c`(๊ฐœ์ˆ˜).",
"`grep -r 'failed' /var/log/`๋กœ ๋กœ๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ „์ฒด์—์„œ ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: `ps aux | grep nginx`์ฒ˜๋Ÿผ ํŒŒ์ดํ”„์™€ ํ•จ๊ป˜, ๋˜๋Š” ์„ค์ • ํŒŒ์ผ์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š” ๋ณตํ•ฉ ๋ฌธ์ œ๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-chmod",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "chmod โ€” ํŒŒ์ผ ๊ถŒํ•œ ๋ณ€๊ฒฝ",
"summary": "ํŒŒ์ผยท๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ฝ๊ธฐ(r=4), ์“ฐ๊ธฐ(w=2), ์‹คํ–‰(x=1) ๊ถŒํ•œ์„ ์†Œ์œ ์žยท๊ทธ๋ฃนยท๊ธฐํƒ€ ์‚ฌ์šฉ์ž๋ณ„๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.",
"example": "chmod 755 script.sh # rwxr-xr-x\nchmod 644 config.conf # rw-r--r--\nchmod u+x,g-w file.txt # ์‹ฌ๋ณผ๋ฆญ ๋ฐฉ์‹",
"common_mistake": "8์ง„์ˆ˜ ๋ฐฉ์‹: 7=rwx, 6=rw-, 5=r-x, 4=r--. `chmod 777`์€ ๋ชจ๋“  ์‚ฌ์šฉ์ž์— ๋ชจ๋“  ๊ถŒํ•œ โ€” ๋ณด์•ˆ์ƒ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"chmod",
"permissions",
"rwx",
"octal",
"symbolic"
],
"source_id": "ubuntu-server-docs",
"details": [
"8์ง„์ˆ˜ ํ‘œ๊ธฐ: ์ฒซ์งธ ์ž๋ฆฌ=์†Œ์œ ์ž(u), ๋‘˜์งธ=๊ทธ๋ฃน(g), ์…‹์งธ=๊ธฐํƒ€(o). ๊ฐ ์ž๋ฆฌ๋Š” r(4)+w(2)+x(1) ํ•ฉ์‚ฐ์ž…๋‹ˆ๋‹ค.",
"์‹ฌ๋ณผ๋ฆญ ํ‘œ๊ธฐ: `u+x`(์†Œ์œ ์ž์— ์‹คํ–‰ ์ถ”๊ฐ€), `go-w`(๊ทธ๋ฃนยท๊ธฐํƒ€ ์“ฐ๊ธฐ ์ œ๊ฑฐ), `a=r`(๋ชจ๋‘ ์ฝ๊ธฐ๋งŒ).",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ๊ถŒํ•œ ๋น„ํŠธ๋ฅผ ๋ณด๊ณ  8์ง„์ˆ˜ ์ˆซ์ž๋ฅผ ๋งž์ถ”๊ฑฐ๋‚˜, ์š”๊ตฌ ์กฐ๊ฑด์— ๋งž๋Š” chmod ๋ช…๋ น์„ ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-chown",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "chown โ€” ์†Œ์œ ์žยท๊ทธ๋ฃน ๋ณ€๊ฒฝ",
"summary": "ํŒŒ์ผยท๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์†Œ์œ ์ž์™€ ๊ทธ๋ฃน์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. `chmod`๋Š” ๊ถŒํ•œ ๋น„ํŠธ, `chown`์€ ์†Œ์œ ์ž๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์œผ๋กœ ์—ญํ• ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.",
"example": "sudo chown ubuntu:ubuntu /srv/app\nchown -R www-data:www-data /var/www/html\nchown :developers project/ # ๊ทธ๋ฃน๋งŒ ๋ณ€๊ฒฝ",
"common_mistake": "`chown user file`์€ ์†Œ์œ ์ž๋งŒ, `chown user:group file`์€ ์†Œ์œ ์ž์™€ ๊ทธ๋ฃน์„ ํ•จ๊ป˜ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.",
"keywords": [
"chown",
"owner",
"group",
"-R",
"sudo"
],
"source_id": "ubuntu-user-management",
"details": [
"`chown ์‚ฌ์šฉ์ž:๊ทธ๋ฃน ํŒŒ์ผ` ํ˜•์‹. `:๊ทธ๋ฃน`๋งŒ ์“ฐ๋ฉด ๊ทธ๋ฃน๋งŒ ๋ณ€๊ฒฝ. `-R`์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.",
"์›น ์„œ๋ฒ„ ์„ค์ •์—์„œ `/var/www/html`์˜ ์†Œ์œ ์ž๋ฅผ `www-data`๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ํŒจํ„ด์ด ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: `chown`๊ณผ `chmod`๋ฅผ ์กฐํ•ฉํ•ด ํŠน์ • ์‚ฌ์šฉ์ž๋งŒ ์ ‘๊ทผํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ์‹ค์Šต ๋ฌธ์ œ์— ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-umask",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "umask โ€” ๊ธฐ๋ณธ ๊ถŒํ•œ ๋งˆ์Šคํฌ",
"summary": "์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผยท๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ธฐ๋ณธ ๊ถŒํ•œ์—์„œ ์ฐจ๊ฐํ•  ๋น„ํŠธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ umask 022๋Š” ํŒŒ์ผ 644, ๋””๋ ‰ํ„ฐ๋ฆฌ 755๋ฅผ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค.",
"example": "umask # ํ˜„์žฌ ๋งˆ์Šคํฌ ํ™•์ธ\numask 027 # ํŒŒ์ผ 640, ๋””๋ ‰ํ„ฐ๋ฆฌ 750\numask -S # ์‹ฌ๋ณผ๋ฆญ ํ‘œ๊ธฐ๋กœ ํ™•์ธ",
"common_mistake": "umask ๊ฐ’์€ ๊ถŒํ•œ์ด ์•„๋‹ˆ๋ผ '๋นผ๋Š” ๊ฐ’'์ž…๋‹ˆ๋‹ค. umask 022 โ†’ ํŒŒ์ผ ๊ธฐ๋ณธ 666-022=644, ๋””๋ ‰ํ„ฐ๋ฆฌ 777-022=755.",
"keywords": [
"umask",
"default permissions",
"mask",
"022"
],
"source_id": "ubuntu-server-docs",
"details": [
"ํŒŒ์ผ ๊ธฐ๋ณธ ์ตœ๋Œ€ ๊ถŒํ•œ์€ 666, ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” 777. ์—ฌ๊ธฐ์„œ umask๋ฅผ ๋นผ๋ฉด ์‹ค์ œ ์ƒ์„ฑ ๊ถŒํ•œ์ด ๋ฉ๋‹ˆ๋‹ค.",
"์‚ฌ์šฉ์ž๋ณ„ umask๋Š” `~/.bashrc` ๋˜๋Š” `/etc/profile`์—์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ์ „์ฒด๋Š” `/etc/login.defs`.",
"์‹œํ—˜ ํŒจํ„ด: umask ๊ฐ’์„ ์ฃผ๊ณ  ํŒŒ์ผ ์ƒ์„ฑ ์‹œ ๊ถŒํ•œ์ด ๋ฌด์—‡์ธ์ง€, ๋˜๋Š” ์›ํ•˜๋Š” ๊ธฐ๋ณธ ๊ถŒํ•œ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ umask ๊ฐ’์„ ๋ฌป์Šต๋‹ˆ๋‹ค."
]
},
{
"id": "linux-find",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "find โ€” ํŒŒ์ผ ๊ฒ€์ƒ‰",
"summary": "์ด๋ฆ„, ํฌ๊ธฐ, ์ˆ˜์ • ์‹œ๊ฐ, ๊ถŒํ•œ, ์†Œ์œ ์ž ๋“ฑ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์œผ๋กœ ํŒŒ์ผ์‹œ์Šคํ…œ์—์„œ ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.",
"example": "find /etc -name '*.conf'\nfind /var/log -mtime -1 # ํ•˜๋ฃจ ์ด๋‚ด ์ˆ˜์ •\nfind / -perm /4000 -type f # SUID ํŒŒ์ผ",
"common_mistake": "`find -name '*.conf'`์—์„œ ๋”ฐ์˜ดํ‘œ๋ฅผ ๋น ๋œจ๋ฆฌ๋ฉด ์‰˜์ด glob์„ ๋จผ์ € ํ•ด์„ํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.",
"keywords": [
"find",
"-name",
"-type",
"-mtime",
"-perm",
"-exec"
],
"source_id": "linux-bash-manual",
"details": [
"์ฃผ์š” ์กฐ๊ฑด: `-name`(์ด๋ฆ„), `-type f/d`(ํŒŒ์ผ/๋””๋ ‰ํ„ฐ๋ฆฌ), `-size +10M`(ํฌ๊ธฐ), `-mtime -7`(7์ผ ์ด๋‚ด ์ˆ˜์ •), `-user`(์†Œ์œ ์ž).",
"`-exec ๋ช…๋ น {} \\;`๋กœ ์ฐพ์€ ํŒŒ์ผ์— ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค: `find . -name '*.tmp' -exec rm {} \\;`.",
"์‹œํ—˜ ํŒจํ„ด: SUID/SGID ํŒŒ์ผ ์ฐพ๊ธฐ(`-perm /4000`), ํŠน์ • ์‚ฌ์šฉ์ž ํŒŒ์ผ ์ฐพ๊ธฐ(`-user`), ์˜ค๋ž˜๋œ ํŒŒ์ผ ์ •๋ฆฌ๊ฐ€ ์ž์ฃผ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-pipe-redirect",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ํŒŒ์ดํ”„์™€ ๋ฆฌ๋‹ค์ด๋ ‰์…˜",
"summary": "ํŒŒ์ดํ”„(`|`)๋Š” ๋ช…๋ น์˜ ์ถœ๋ ฅ์„ ๋‹ค์Œ ๋ช…๋ น์˜ ์ž…๋ ฅ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฆฌ๋‹ค์ด๋ ‰์…˜(`>`, `>>`, `<`)์€ ์ถœ๋ ฅยท์ž…๋ ฅ์„ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.",
"example": "cat /etc/passwd | grep root\nls -la > filelist.txt\necho 'append' >> log.txt\ncommand 2>&1 | tee output.log",
"common_mistake": "`>`๋Š” ํŒŒ์ผ์„ ๋ฎ์–ด์“ฐ๊ณ , `>>`๋Š” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ํŒŒ์ผ์— ์‹ค์ˆ˜๋กœ `>`๋ฅผ ์“ฐ๋ฉด ๋‚ด์šฉ์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.",
"keywords": [
"pipe",
"redirect",
">",
">>",
"2>&1",
"stdin",
"stdout"
],
"source_id": "linux-bash-cd",
"details": [
"stdout ๋ฆฌ๋‹ค์ด๋ ‰์…˜: `>` ๋ฎ์–ด์“ฐ๊ธฐ, `>>` ์ถ”๊ฐ€. stderr ๋ฆฌ๋‹ค์ด๋ ‰์…˜: `2>`. `2>&1`์€ stderr๋ฅผ stdout์œผ๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค.",
"`tee` ๋ช…๋ น์€ stdout์„ ํ™”๋ฉด๊ณผ ํŒŒ์ผ์— ๋™์‹œ์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค: `command | tee log.txt`.",
"์‹œํ—˜ ํŒจํ„ด: ๋ช…๋ น ์ถœ๋ ฅ์„ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ฑฐ๋‚˜, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋กœ๊ทธ์— ๊ธฐ๋กํ•˜๋Š” ๋ณตํ•ฉ ํŒŒ์ดํ”„๋ผ์ธ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-tar",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "tar โ€” ์•„์นด์ด๋ธŒ์™€ ์••์ถ•",
"summary": "์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ์•„์นด์ด๋ธŒ๋กœ ๋ฌถ๊ฑฐ๋‚˜ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค. `-c`(์ƒ์„ฑ), `-x`(ํ•ด์ œ), `-z`(gzip), `-j`(bzip2)๋ฅผ ์กฐํ•ฉํ•ด ์”๋‹ˆ๋‹ค.",
"example": "tar czf backup.tar.gz /etc\ntar xzf backup.tar.gz -C /tmp\ntar tvf archive.tar.gz # ๋‚ด์šฉ ๋ชฉ๋ก",
"common_mistake": "`c`(create)์™€ `x`(extract)๋ฅผ ํ˜ผ๋™ํ•˜์ง€ ๋งˆ์„ธ์š”. `-C`๋กœ ์••์ถ• ํ•ด์ œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ์œ„์น˜์— ํ’€๋ฆฝ๋‹ˆ๋‹ค.",
"keywords": [
"tar",
"-czf",
"-xzf",
"gzip",
"archive",
"backup"
],
"source_id": "linux-bash-manual",
"details": [
"์˜ต์…˜ ์˜๋ฏธ: `c`=์ƒ์„ฑ, `x`=ํ•ด์ œ, `t`=๋ชฉ๋ก, `v`=์ƒ์„ธ์ถœ๋ ฅ, `f`=ํŒŒ์ผ์ง€์ •, `z`=gzip, `j`=bzip2, `J`=xz.",
"๋ฐฑ์—… ํŒจํ„ด: `tar czf /backup/etc-$(date +%Y%m%d).tar.gz /etc`๋กœ ๋‚ ์งœ ํฌํ•จ ๋ฐฑ์—… ํŒŒ์ผ ์ƒ์„ฑ.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์••์ถ•ํ•˜๊ฑฐ๋‚˜ ์ง€์ • ์œ„์น˜์— ํ’€์–ด๋‚ด๋Š” ๋ช…๋ น์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-process-ps-kill",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ps, kill โ€” ํ”„๋กœ์„ธ์Šค ํ™•์ธ๊ณผ ์ข…๋ฃŒ",
"summary": "`ps`๋กœ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์กฐํšŒํ•˜๊ณ , `kill`๋กœ ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.",
"example": "ps aux | grep nginx\nkill -15 1234 # SIGTERM (์ •์ƒ ์ข…๋ฃŒ ์š”์ฒญ)\nkill -9 1234 # SIGKILL (๊ฐ•์ œ ์ข…๋ฃŒ)\nkillall nginx # ์ด๋ฆ„์œผ๋กœ ์ข…๋ฃŒ",
"common_mistake": "`kill -9`๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •๋ฆฌ ๊ณผ์ • ์—†์ด ์ฆ‰์‹œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋จผ์ € `-15`(SIGTERM)์„ ์‹œ๋„ํ•˜๊ณ , ์‘๋‹ต ์—†์„ ๋•Œ๋งŒ `-9`๋ฅผ ์”๋‹ˆ๋‹ค.",
"keywords": [
"ps",
"kill",
"SIGTERM",
"SIGKILL",
"PID",
"aux"
],
"source_id": "linux-bash-manual",
"details": [
"`ps aux`: a=๋ชจ๋“  ์‚ฌ์šฉ์ž, u=์‚ฌ์šฉ์ž/CPU/๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด, x=ํ„ฐ๋ฏธ๋„ ์—†๋Š” ํ”„๋กœ์„ธ์Šค ํฌํ•จ. PID๊ฐ€ ๋‘ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์ž…๋‹ˆ๋‹ค.",
"์ฃผ์š” ์‹œ๊ทธ๋„: 1(SIGHUP ์žฌ์‹œ์ž‘), 9(SIGKILL ๊ฐ•์ œ์ข…๋ฃŒ), 15(SIGTERM ์ •์ƒ์ข…๋ฃŒ ์š”์ฒญ), 2(SIGINT Ctrl+C).",
"์‹œํ—˜ ํŒจํ„ด: `ps aux | grep ํ”„๋กœ์„ธ์Šค๋ช…`์œผ๋กœ PID๋ฅผ ์ฐพ๊ณ  `kill`๋กœ ์ข…๋ฃŒํ•˜๋Š” ๋‘ ๋‹จ๊ณ„ ํ๋ฆ„์ด ์ž์ฃผ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-systemctl",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "systemctl โ€” ์„œ๋น„์Šค ๊ด€๋ฆฌ",
"summary": "systemd ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ยท์ค‘์ง€ยท์žฌ์‹œ์ž‘ํ•˜๊ณ , ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ ์—ฌ๋ถ€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. Ubuntu 16.04 ์ดํ›„ ํ‘œ์ค€์ž…๋‹ˆ๋‹ค.",
"example": "systemctl start nginx\nsystemctl enable --now ssh # ์ฆ‰์‹œ ์‹œ์ž‘ + ๋ถ€ํŒ… ์ž๋™ ์‹œ์ž‘\nsystemctl status nginx\nsystemctl list-units --type=service",
"common_mistake": "`enable`์€ ๋ถ€ํŒ… ์ž๋™ ์‹œ์ž‘ ์„ค์ •, `start`๋Š” ์ง€๊ธˆ ๋‹น์žฅ ์‹œ์ž‘. ๋‘˜ ๋‹ค ํ•˜๋ ค๋ฉด `enable --now`๋ฅผ ์”๋‹ˆ๋‹ค.",
"keywords": [
"systemctl",
"enable",
"disable",
"start",
"stop",
"status",
"systemd"
],
"source_id": "linux-systemd-systemctl",
"details": [
"์ฃผ์š” ์„œ๋ธŒ์ปค๋งจ๋“œ: `start/stop/restart/reload`(์‹คํ–‰ ์ œ์–ด), `enable/disable`(๋ถ€ํŒ… ์ž๋™ ์‹œ์ž‘), `status`(์ƒํƒœ ํ™•์ธ), `is-active/is-enabled`(์กฐ๊ฑด ํ™•์ธ).",
"`systemctl status ์„œ๋น„์Šค`๋Š” ํ˜„์žฌ ์ƒํƒœ, ์ตœ๊ทผ ๋กœ๊ทธ, PID, ์‹คํ–‰ ์‹œ๊ฐ„์„ ํ•จ๊ป˜ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์„œ๋น„์Šค๋ฅผ '์ง€๊ธˆ ์‹œ์ž‘ํ•˜๊ณ  ๋ถ€ํŒ…์—๋„ ์ž๋™ ์‹œ์ž‘'ํ•˜๋„๋ก ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ์„œ๋น„์Šค ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-journalctl",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "journalctl โ€” systemd ๋กœ๊ทธ ์กฐํšŒ",
"summary": "systemd journal์— ๊ธฐ๋ก๋œ ์‹œ์Šคํ…œ ๋กœ๊ทธ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ณ„, ์‹œ๊ฐ„๋ณ„, ์šฐ์„ ์ˆœ์œ„๋ณ„ ํ•„ํ„ฐ๋ง์ด ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"example": "journalctl -u nginx --since today\njournalctl -p err -n 50\njournalctl -f # ์‹ค์‹œ๊ฐ„ ์ถ”์ \njournalctl --disk-usage",
"common_mistake": "`journalctl`์€ journal์— ์ €์žฅ๋œ ๋กœ๊ทธ๋งŒ ๋ด…๋‹ˆ๋‹ค. `/var/log/` ํ…์ŠคํŠธ ํŒŒ์ผ ๋กœ๊ทธ๋Š” `cat`/`tail`๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"journalctl",
"-u",
"-f",
"--since",
"-p",
"systemd",
"journal"
],
"source_id": "linux-systemd-systemctl",
"details": [
"์ฃผ์š” ์˜ต์…˜: `-u ์„œ๋น„์Šค`(์„œ๋น„์Šค๋ณ„), `-p err`(์—๋Ÿฌ ์ด์ƒ), `--since '2024-01-01'`(์‹œ๊ฐ„ ๋ฒ”์œ„), `-n 100`(์ตœ๊ทผ 100์ค„), `-f`(์‹ค์‹œ๊ฐ„).",
"`journalctl -b`๋Š” ํ˜„์žฌ ๋ถ€ํŒ… ์ดํ›„ ๋กœ๊ทธ, `-b -1`์€ ์ด์ „ ๋ถ€ํŒ… ๋กœ๊ทธ. ์žฌ๋ถ€ํŒ… ํ›„ ์˜ค๋ฅ˜ ์ถ”์ ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์„œ๋น„์Šค์˜ ์˜ค๋ฅ˜ ๋กœ๊ทธ๋ฅผ ์ฐพ๊ฑฐ๋‚˜, ํŠน์ • ์‹œ๊ฐ„ ์ดํ›„ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-ip-ss",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ip, ss โ€” ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์†Œ์ผ“ ํ™•์ธ",
"summary": "`ip`๋กœ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šคยท๋ผ์šฐํŒ…ยทIP ์„ค์ •์„ ํ™•์ธํ•˜๊ณ , `ss`๋กœ ํ˜„์žฌ ์—ด๋ฆฐ ํฌํŠธ์™€ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.",
"example": "ip addr show\nip route show\nss -tlnp # TCP ๋ฆฌ์Šค๋‹ ํฌํŠธ์™€ ํ”„๋กœ์„ธ์Šค\nss -s # ์†Œ์ผ“ ํ†ต๊ณ„ ์š”์•ฝ",
"common_mistake": "`ifconfig`์™€ `netstat`์€ ๊ตฌ์‹ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” `ip`์™€ `ss`๊ฐ€ ํ‘œ์ค€์ด๋ฉฐ ์‹œํ—˜์—์„œ๋„ ์ด์ชฝ์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.",
"keywords": [
"ip",
"ss",
"addr",
"route",
"netstat",
"socket",
"-tlnp"
],
"source_id": "linux-man7-ip",
"details": [
"`ip addr`์€ ์ธํ„ฐํŽ˜์ด์Šค๋ณ„ IP, `ip route`๋Š” ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”, `ip link`๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.",
"`ss -tlnp`: t=TCP, l=listening, n=์ˆซ์žํ‘œ์‹œ, p=ํ”„๋กœ์„ธ์Šค๋ช…. ์–ด๋–ค ์„œ๋น„์Šค๊ฐ€ ์–ด๋А ํฌํŠธ๋ฅผ ์—ด์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ํฌํŠธ๋ฅผ ๋ฆฌ์Šค๋‹ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜, IP ์„ค์ • ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-df-du-mount",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "df, du, mount โ€” ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋งˆ์šดํŠธ",
"summary": "`df`๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ ์ „์ฒด ์šฉ๋Ÿ‰, `du`๋Š” ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, `mount`๋Š” ๋ธ”๋ก ์žฅ์น˜๋ฅผ ํŒŒ์ผ์‹œ์Šคํ…œ ํŠธ๋ฆฌ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.",
"example": "df -h\ndu -sh /var/log/*\nmount /dev/sdb1 /mnt/data\nfindmnt # ๋งˆ์šดํŠธ ํŠธ๋ฆฌ ํ™•์ธ",
"common_mistake": "`df`๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ ์ „์ฒด, `du`๋Š” ํŠน์ • ๊ฒฝ๋กœ์˜ ์‹ค์ œ ์‚ฌ์šฉ ํฌ๊ธฐ. ๋‘ ์ˆซ์ž๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์‚ญ์ œ๋์ง€๋งŒ ์—ด๋ฆฐ ํŒŒ์ผ ๋“ฑ).",
"keywords": [
"df",
"du",
"mount",
"-h",
"-sh",
"filesystem"
],
"source_id": "ubuntu-storage",
"details": [
"`df -h`๋Š” ๋ชจ๋“  ๋งˆ์šดํŠธ ํŒŒํ‹ฐ์…˜์˜ ์‚ฌ์šฉ๋ฅ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋””์Šคํฌ ํ’€ ๊ฒฝ๊ณ  ์‹œ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์ž…๋‹ˆ๋‹ค.",
"`du -sh /๊ฒฝ๋กœ/*`๋กœ ์–ด๋А ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š”์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ๋””์Šคํฌ ์‚ฌ์šฉ๋ฅ  ํ™•์ธ, ์ž„์‹œ ๋งˆ์šดํŠธ ๋ช…๋ น ์ž‘์„ฑ, `findmnt`๋กœ ๋งˆ์šดํŠธ ์ •๋ณด ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-useradd",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "useradd โ€” ์‚ฌ์šฉ์ž ์ถ”๊ฐ€",
"summary": "์ƒˆ ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. `-m`์œผ๋กœ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ž๋™ ์ƒ์„ฑ, `-s`๋กœ ๋กœ๊ทธ์ธ ์‰˜, `-G`๋กœ ์ถ”๊ฐ€ ๊ทธ๋ฃน์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.",
"example": "sudo useradd -m -s /bin/bash -G sudo alice\nuseradd -r -s /usr/sbin/nologin svcuser # ์„œ๋น„์Šค ๊ณ„์ •\npasswd alice # ์ƒ์„ฑ ํ›„ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •",
"common_mistake": "`useradd`๋งŒ ์“ฐ๋ฉด ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. `-m`์„ ๋ฐ˜๋“œ์‹œ ๋ถ™์ด๊ฑฐ๋‚˜ `adduser`(๋Œ€ํ™”ํ˜•)๋ฅผ ์”๋‹ˆ๋‹ค.",
"keywords": [
"useradd",
"-m",
"-s",
"-G",
"adduser",
"home directory"
],
"source_id": "ubuntu-user-management",
"details": [
"์ฃผ์š” ์˜ต์…˜: `-m`(ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ƒ์„ฑ), `-d ๊ฒฝ๋กœ`(ํ™ˆ ๊ฒฝ๋กœ ์ง€์ •), `-s ์‰˜`(๋กœ๊ทธ์ธ ์‰˜), `-G ๊ทธ๋ฃน`(์ถ”๊ฐ€ ๊ทธ๋ฃน), `-r`(์‹œ์Šคํ…œ ๊ณ„์ •).",
"์„œ๋น„์Šค ๊ณ„์ •์€ `-r -s /usr/sbin/nologin`์œผ๋กœ ์ƒ์„ฑํ•ด ๋กœ๊ทธ์ธ์„ ๋ง‰๊ณ  ์‹œ์Šคํ…œ ์„œ๋น„์Šค ์ „์šฉ์œผ๋กœ ์”๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์กฐ๊ฑด(ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ, ๊ทธ๋ฃน, ์‰˜)์„ ๋งŒ์กฑํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•˜๋Š” ์‹ค์Šต ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-usermod",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "usermod โ€” ์‚ฌ์šฉ์ž ์ •๋ณด ๋ณ€๊ฒฝ",
"summary": "๊ธฐ์กด ์‚ฌ์šฉ์ž ๊ณ„์ •์˜ ๊ทธ๋ฃน, ์‰˜, ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ, ์ž ๊ธˆ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.",
"example": "usermod -aG docker alice # docker ๊ทธ๋ฃน ์ถ”๊ฐ€\nusermod -s /bin/zsh alice # ์‰˜ ๋ณ€๊ฒฝ\nusermod -L alice # ๊ณ„์ • ์ž ๊ธˆ\nusermod -U alice # ์ž ๊ธˆ ํ•ด์ œ",
"common_mistake": "`-G`๋งŒ ์“ฐ๋ฉด ๊ธฐ์กด ๊ทธ๋ฃน์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ `-aG`(append)๋ฅผ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"usermod",
"-aG",
"-L",
"-U",
"-s",
"group",
"lock"
],
"source_id": "ubuntu-user-management",
"details": [
"`-aG ๊ทธ๋ฃน`์€ ๊ธฐ์กด ๊ทธ๋ฃน์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ทธ๋ฃน์„ ์ถ”๊ฐ€. ๊ทธ๋ฃน ๋ณ€๊ฒฝ ํ›„ ์žฌ๋กœ๊ทธ์ธํ•ด์•ผ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.",
"`-L`(lock) / `-U`(unlock)๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•ž์— `!`๋ฅผ ๋ถ™์—ฌ ๋กœ๊ทธ์ธ์„ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์‚ฌ์šฉ์ž๋ฅผ ํŠน์ • ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ณ„์ •์„ ์ž ๊ธˆํ•˜๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-passwd",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "passwd โ€” ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ณ„์ • ์ž ๊ธˆ",
"summary": "์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๊ณ„์ • ๋งŒ๋ฃŒยท์ž ๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. root๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"example": "passwd # ํ˜„์žฌ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ\nsudo passwd alice # alice ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ\npasswd -l alice # ๊ณ„์ • ์ž ๊ธˆ\nchage -l alice # ๋งŒ๋ฃŒ ์ •๋ณด ํ™•์ธ",
"common_mistake": "`passwd -l`๋กœ ์ž ๊ทผ ๊ณ„์ •๋„ SSH ํ‚ค ์ธ์ฆ์œผ๋กœ๋Š” ์ ‘์† ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ ์ฐจ๋‹จ์€ `/etc/shadow`์˜ ์‰˜์„ nologin์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"passwd",
"-l",
"-u",
"-e",
"chage",
"password",
"lock"
],
"source_id": "ubuntu-user-management",
"details": [
"`passwd -l`์€ `/etc/shadow`์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•ž์— `!`๋ฅผ ๋ถ™์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋กœ๊ทธ์ธ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.",
"`chage -M 90 user`๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ตœ๋Œ€ ์‚ฌ์šฉ ๊ธฐ๊ฐ„, `chage -E ๋‚ ์งœ`๋กœ ๊ณ„์ • ๋งŒ๋ฃŒ์ผ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ, ๊ณ„์ • ์ž ๊ธˆ/ํ•ด์ œ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งŒ๋ฃŒ ์ •์ฑ… ์„ค์ • ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-groups-id",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "id, groups โ€” ์‚ฌ์šฉ์žยท๊ทธ๋ฃน ํ™•์ธ",
"summary": "`id`๋Š” ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ UID, GID, ์†Œ์† ๊ทธ๋ฃน์„ ๋ณด์—ฌ์ฃผ๊ณ , `groups`๋Š” ๊ทธ๋ฃน ๋ชฉ๋ก๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"example": "id\n# uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),27(sudo)\nid alice\ngroups alice",
"common_mistake": "`usermod -aG`๋กœ ๊ทธ๋ฃน์„ ์ถ”๊ฐ€ํ•œ ๋’ค `id`์— ๋ฐ˜์˜๋˜๋ ค๋ฉด ์žฌ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. `newgrp ๊ทธ๋ฃน๋ช…`์œผ๋กœ ์ฆ‰์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"keywords": [
"id",
"groups",
"UID",
"GID",
"whoami"
],
"source_id": "ubuntu-user-management",
"details": [
"`id` ์ถœ๋ ฅ์—์„œ uid(์‚ฌ์šฉ์ž ๋ฒˆํ˜ธ), gid(๊ธฐ๋ณธ ๊ทธ๋ฃน), groups(๋ชจ๋“  ์†Œ์† ๊ทธ๋ฃน)๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"root์˜ uid์™€ gid๋Š” 0์ž…๋‹ˆ๋‹ค. `id -u`๋กœ ์ˆซ์ž๋งŒ, `id -un`์œผ๋กœ ์ด๋ฆ„๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๊ทธ๋ฃน์— ์†ํ•ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜, uid/gid๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-sudoers",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "sudo์™€ sudoers โ€” ๊ถŒํ•œ ์œ„์ž„",
"summary": "์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋ช…๋ น์„ root ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. `/etc/sudoers`๋Š” ๋ฐ˜๋“œ์‹œ `visudo`๋กœ ํŽธ์ง‘ํ•ฉ๋‹ˆ๋‹ค.",
"example": "sudo apt update\nvisudo # /etc/sudoers ์•ˆ์ „ ํŽธ์ง‘\n# /etc/sudoers.d/alice ๋‚ด์šฉ:\nalice ALL=(ALL) NOPASSWD: /usr/bin/systemctl",
"common_mistake": "`/etc/sudoers`๋ฅผ ์ง์ ‘ vi๋กœ ์—ด์–ด ์ˆ˜์ •ํ•˜๋ฉด ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ์‹œ sudo๊ฐ€ ์™„์ „ํžˆ ์ž ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ `visudo`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"keywords": [
"sudo",
"sudoers",
"visudo",
"NOPASSWD",
"ALL"
],
"source_id": "ubuntu-user-management",
"details": [
"`sudo` ๊ทธ๋ฃน ๋˜๋Š” wheel ๊ทธ๋ฃน์— ์†ํ•œ ์‚ฌ์šฉ์ž๋Š” ๊ธฐ๋ณธ์œผ๋กœ sudo ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค: `usermod -aG sudo alice`.",
"`/etc/sudoers.d/` ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๊ฐœ๋ณ„ ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด ๋ฉ”์ธ sudoers๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ๋ช…๋ น๋งŒ sudo ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜, NOPASSWD ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-acl",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ACL โ€” ํ™•์žฅ ์ ‘๊ทผ ์ œ์–ด",
"summary": "๊ธฐ๋ณธ ์œ ๋‹‰์Šค ๊ถŒํ•œ(์†Œ์œ ์ž/๊ทธ๋ฃน/๊ธฐํƒ€)๋งŒ์œผ๋กœ๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋Š” ์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ์„ ํŠน์ • ์‚ฌ์šฉ์ž๋‚˜ ๊ทธ๋ฃน๋ณ„๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.",
"example": "getfacl /srv/project\nsetfacl -m u:alice:rwx /srv/project\nsetfacl -m g:dev:r-x /srv/project\nsetfacl -R -m u:bob:r-- /data # ์žฌ๊ท€",
"common_mistake": "ACL์ด ์„ค์ •๋œ ํŒŒ์ผ์€ `ls -l`์—์„œ ๊ถŒํ•œ ๋’ค์— `+`๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ชจ๋ฅด๋ฉด ๊ถŒํ•œ ์„ค์ •์ด ๋๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.",
"keywords": [
"ACL",
"setfacl",
"getfacl",
"-m",
"-R",
"access control"
],
"source_id": "ubuntu-server-docs",
"details": [
"`setfacl -m u:์‚ฌ์šฉ์ž:rwx ๊ฒฝ๋กœ`๋กœ ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ ์ถ”๊ฐ€. `getfacl`๋กœ ํ˜„์žฌ ACL ํ™•์ธ.",
"๊ธฐ๋ณธ ACL(`setfacl -d`)์„ ์„ค์ •ํ•˜๋ฉด ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์— ์ž๋™์œผ๋กœ ACL์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค๋ฅธ ๊ถŒํ•œ์„ ์ฃผ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ chmod ๋Œ€์‹  setfacl์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-special-perms",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ํŠน์ˆ˜ ๊ถŒํ•œ โ€” SUID, SGID, Sticky Bit",
"summary": "SUID(4)๋Š” ํŒŒ์ผ ์†Œ์œ ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰, SGID(2)๋Š” ๊ทธ๋ฃน ๊ถŒํ•œ ์ƒ์†, Sticky Bit(1)์€ ๋ณธ์ธ ํŒŒ์ผ๋งŒ ์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.",
"example": "chmod u+s /usr/bin/passwd # SUID\nchmod g+s /srv/shared # SGID (๊ณต์œ  ๋””๋ ‰ํ„ฐ๋ฆฌ)\nchmod +t /tmp # Sticky bit\nls -la /tmp # drwxrwxrwt ์—์„œ t ํ™•์ธ",
"common_mistake": "SUID๊ฐ€ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ถ™์œผ๋ฉด ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. SGID๊ฐ€ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ถ™์œผ๋ฉด ์ƒ์„ฑ๋˜๋Š” ํŒŒ์ผ์ด ๋ถ€๋ชจ ๊ทธ๋ฃน์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"SUID",
"SGID",
"sticky bit",
"chmod 4755",
"chmod 1777"
],
"source_id": "ubuntu-server-docs",
"details": [
"SUID ์„ค์ •๋œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ฉด ์‹คํ–‰ํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ ํŒŒ์ผ ์†Œ์œ ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. `/usr/bin/passwd`๊ฐ€ ๋Œ€ํ‘œ ์˜ˆ์ž…๋‹ˆ๋‹ค.",
"SGID๋ฅผ ๊ณต์œ  ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์„ค์ •ํ•˜๋ฉด ๊ทธ ์•ˆ์— ๋งŒ๋“  ํŒŒ์ผ๋“ค์ด ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ทธ๋ฃน์„ ์ž๋™์œผ๋กœ ์ƒ์†ํ•ด ํ˜‘์—…์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: `ls -l`์—์„œ `s`, `S`, `t`, `T` ํ‘œ์‹œ๋ฅผ ๋ณด๊ณ  ์–ด๋–ค ํŠน์ˆ˜ ๊ถŒํ•œ์ธ์ง€, ๋˜๋Š” 8์ง„์ˆ˜ 4์ž๋ฆฌ ํ‘œ๊ธฐ๋ฅผ ํ•ด์„ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-ssh",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "SSH โ€” ์›๊ฒฉ ์ ‘์†",
"summary": "SSH(Secure Shell)๋กœ ์›๊ฒฉ ์„œ๋ฒ„์— ์•”ํ˜ธํ™”๋œ ์—ฐ๊ฒฐ์„ ๋งบ์Šต๋‹ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ์€ ์„œ๋ฒ„ ์ชฝ `/etc/ssh/sshd_config`, ํด๋ผ์ด์–ธํŠธ ์ชฝ `~/.ssh/config`์ž…๋‹ˆ๋‹ค.",
"example": "ssh alice@192.168.1.10\nssh -p 2222 user@server\nssh -i ~/.ssh/mykey.pem ubuntu@host\nsystemctl restart sshd # ์„ค์ • ๋ณ€๊ฒฝ ํ›„ ์žฌ์‹œ์ž‘",
"common_mistake": "`sshd_config` ๋ณ€๊ฒฝ ํ›„ `systemctl reload sshd`๋ฅผ ํ•ด์•ผ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜์ • ์ „ `sshd -t`๋กœ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ๋ฅผ ๋จผ์ € ํ•˜์„ธ์š”.",
"keywords": [
"ssh",
"sshd",
"sshd_config",
"-p",
"-i",
"PermitRootLogin"
],
"source_id": "ubuntu-networking",
"details": [
"`sshd_config` ์ฃผ์š” ์„ค์ •: `Port`(ํฌํŠธ ๋ณ€๊ฒฝ), `PermitRootLogin no`(root ์ง์ ‘ ์ ‘์† ์ฐจ๋‹จ), `PasswordAuthentication no`(ํ‚ค ์ธ์ฆ๋งŒ ํ—ˆ์šฉ).",
"`~/.ssh/config`์— `Host`, `HostName`, `User`, `IdentityFile`์„ ์ •์˜ํ•˜๋ฉด `ssh ๋ณ„์นญ`์œผ๋กœ ๊ฐ„๋‹จํžˆ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: root ๋กœ๊ทธ์ธ ์ฐจ๋‹จ, ํฌํŠธ ๋ณ€๊ฒฝ, ํ‚ค ์ธ์ฆ ๊ฐ•์ œ ๋“ฑ sshd_config ๋ณด์•ˆ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-ssh-key",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "SSH ํ‚ค ์ธ์ฆ",
"summary": "๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ๊ณต๊ฐœํ‚ค/๊ฐœ์ธํ‚ค ์Œ์œผ๋กœ SSH ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ์—, ๊ณต๊ฐœํ‚ค๋Š” ์„œ๋ฒ„์˜ `~/.ssh/authorized_keys`์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.",
"example": "ssh-keygen -t ed25519 -C 'work key'\nssh-copy-id alice@server # ๊ณต๊ฐœํ‚ค ์ž๋™ ๋ณต์‚ฌ\ncat ~/.ssh/id_ed25519.pub # ๊ณต๊ฐœํ‚ค ํ™•์ธ",
"common_mistake": "`~/.ssh/` ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” 700, `authorized_keys`๋Š” 600 ๊ถŒํ•œ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ์ด ๋„ˆ๋ฌด ์—ด๋ ค ์žˆ์œผ๋ฉด SSH๊ฐ€ ํ‚ค๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"ssh-keygen",
"authorized_keys",
"ed25519",
"public key",
"private key"
],
"source_id": "ubuntu-networking",
"details": [
"`ssh-keygen -t ed25519`๋กœ ์ตœ์‹  ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‚ค ์ƒ์„ฑ. ์ƒ์„ฑ๋œ ๊ณต๊ฐœํ‚ค(`.pub`)๋ฅผ ์„œ๋ฒ„ `~/.ssh/authorized_keys`์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.",
"๋””๋ ‰ํ„ฐ๋ฆฌ/ํŒŒ์ผ ๊ถŒํ•œ: `~/.ssh`=700, `authorized_keys`=600, ๊ฐœ์ธํ‚ค=600. ์ด๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ์ ‘์† ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํ‚ค ์ƒ์„ฑ, ๊ณต๊ฐœํ‚ค ๋ฐฐํฌ, authorized_keys ๊ถŒํ•œ ์„ค์ •๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์‹ค์Šต ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-hostname-hosts",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "hostname๊ณผ /etc/hosts",
"summary": "`hostname`์œผ๋กœ ํ˜„์žฌ ํ˜ธ์ŠคํŠธ๋ช…์„ ํ™•์ธํ•˜๊ณ , `/etc/hosts`๋กœ DNS ์—†์ด IP-์ด๋ฆ„ ๋งคํ•‘์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.",
"example": "hostname\nhostnamectl set-hostname webserver01\ncat /etc/hosts\necho '192.168.1.10 db.internal' >> /etc/hosts",
"common_mistake": "`hostname ์ด๋ฆ„`์€ ์ž„์‹œ ๋ณ€๊ฒฝ์ž…๋‹ˆ๋‹ค. ์žฌ๋ถ€ํŒ… ํ›„์—๋„ ์œ ์ง€ํ•˜๋ ค๋ฉด `hostnamectl set-hostname`์„ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"keywords": [
"hostname",
"hostnamectl",
"/etc/hosts",
"FQDN"
],
"source_id": "ubuntu-networking",
"details": [
"`hostnamectl set-hostname ์ด๋ฆ„`์€ `/etc/hostname`์„ ์ˆ˜์ •ํ•ด ์˜๊ตฌ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. `hostnamectl status`๋กœ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.",
"`/etc/hosts`๋Š” DNS๋ณด๋‹ค ๋จผ์ € ์กฐํšŒ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€๋ง ์„œ๋ฒ„ ์ด๋ฆ„ ๋งคํ•‘์ด๋‚˜ DNS ์ฐจ๋‹จ ํ…Œ์ŠคํŠธ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์„œ๋ฒ„์˜ ํ˜ธ์ŠคํŠธ๋ช…์„ ์˜๊ตฌ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, /etc/hosts์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-dns-resolve",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "DNS ์กฐํšŒ โ€” dig, nslookup, resolvectl",
"summary": "๋„๋ฉ”์ธ ์ด๋ฆ„์„ IP๋กœ ํ•ด์„ํ•˜๋Š” ๊ณผ์ •์„ ํ™•์ธํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•ฉ๋‹ˆ๋‹ค. DNS ์„œ๋ฒ„๋Š” `/etc/resolv.conf` ๋˜๋Š” `systemd-resolved`๊ฐ€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.",
"example": "dig google.com\nnslookup google.com\nresolvectl status\ncat /etc/resolv.conf",
"common_mistake": "Ubuntu์—์„œ `/etc/resolv.conf`๋Š” `systemd-resolved`์˜ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์ž…๋‹ˆ๋‹ค. DNS ์„œ๋ฒ„ ๋ณ€๊ฒฝ์€ `resolvectl`์ด๋‚˜ netplan์—์„œ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"dig",
"nslookup",
"resolv.conf",
"nameserver",
"systemd-resolved"
],
"source_id": "ubuntu-networking",
"details": [
"`dig ๋„๋ฉ”์ธ` ๊ฒฐ๊ณผ์—์„œ ANSWER SECTION์˜ IP๊ฐ€ ์‹ค์ œ ํ•ด์„๋œ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. `dig +short ๋„๋ฉ”์ธ`์œผ๋กœ IP๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"DNS ์„œ๋ฒ„๋Š” `/etc/resolv.conf`์˜ `nameserver` ์ค„์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Ubuntu 22.04๋Š” 127.0.0.53(๋กœ์ปฌ stub)์ด ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: DNS ์กฐํšŒ ๋ช…๋ น์œผ๋กœ ๋„๋ฉ”์ธ ํ•ด์„ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜, DNS ์„œ๋ฒ„ ์„ค์ • ํŒŒ์ผ ์œ„์น˜๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-route",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "๋ผ์šฐํŒ… ํ™•์ธ โ€” ip route",
"summary": "ํŒจํ‚ท์ด ์–ด๋А ๊ฒฝ๋กœ๋กœ ๋‚˜๊ฐ€๋Š”์ง€ ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์„ ํ™•์ธํ•˜๊ณ , ์ž„์‹œ ๋ผ์šฐํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.",
"example": "ip route show\nip route add 10.0.0.0/8 via 192.168.1.1\nip route del 10.0.0.0/8\nip route get 8.8.8.8 # ํŠน์ • IP๋กœ ๊ฐ€๋Š” ๊ฒฝ๋กœ",
"common_mistake": "`ip route add`๋กœ ์ถ”๊ฐ€ํ•œ ๋ผ์šฐํŠธ๋Š” ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์˜๊ตฌ ์„ค์ •์€ netplan ๋˜๋Š” `/etc/network/interfaces`์—์„œ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"ip route",
"gateway",
"routing table",
"default",
"via"
],
"source_id": "linux-man7-ip",
"details": [
"`ip route show`์—์„œ `default via ๊ฒŒ์ดํŠธ์›จ์ดIP dev ์ธํ„ฐํŽ˜์ด์Šค` ์ค„์ด ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด์ž…๋‹ˆ๋‹ค.",
"`ip route get ๋ชฉ์ ์ง€IP`๋Š” ์‹ค์ œ๋กœ ๊ทธ IP์— ํŒจํ‚ท์„ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•  ๊ฒฝ๋กœ์™€ ์ถœ๊ตฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ๋ผ์šฐํŒ… ํ…Œ์ด๋ธ”์—์„œ ๊ธฐ๋ณธ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋„คํŠธ์›Œํฌ๋กœ ์ž„์‹œ ๋ผ์šฐํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-netplan",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "netplan โ€” ๋„คํŠธ์›Œํฌ ์„ค์ •",
"summary": "Ubuntu 18.04 ์ดํ›„ ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ์„ค์ • ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. `/etc/netplan/*.yaml` ํŒŒ์ผ์— ์„ค์ •ํ•˜๊ณ  `netplan apply`๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"example": "# /etc/netplan/00-installer-config.yaml\nnetwork:\n ethernets:\n eth0:\n addresses: [192.168.1.100/24]\n gateway4: 192.168.1.1\nnetplan apply",
"common_mistake": "YAML์€ ๋“ค์—ฌ์“ฐ๊ธฐ(์ŠคํŽ˜์ด์Šค๋งŒ, ํƒญ ๊ธˆ์ง€)๊ฐ€ ๋งค์šฐ ์—„๊ฒฉํ•ฉ๋‹ˆ๋‹ค. ๋“ค์—ฌ์“ฐ๊ธฐ ์˜ค๋ฅ˜ ์‹œ `netplan apply`๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"netplan",
"yaml",
"static IP",
"gateway4",
"nameservers"
],
"source_id": "ubuntu-networking",
"details": [
"`netplan generate`๋Š” ์„ค์ •์„ ๋ฐฑ์—”๋“œ ์„ค์ • ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๋งŒ ํ•˜๊ณ , `netplan apply`๊ฐ€ ์‹ค์ œ ๋„คํŠธ์›Œํฌ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"์ •์  IP ์„ค์ •: `addresses`, `gateway4/routes`, `nameservers.addresses`๋ฅผ YAML์— ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์ •์  IP๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ DNS ์„œ๋ฒ„๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” netplan YAML ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-curl",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "curl โ€” HTTP ์š”์ฒญ๊ณผ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ",
"summary": "HTTP/HTTPS ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. API ํ…Œ์ŠคํŠธ, ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ, ์„œ๋น„์Šค ๋™์ž‘ ํ™•์ธ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"example": "curl http://localhost:8080/health\ncurl -O https://example.com/file.tar.gz\ncurl -H 'Content-Type: application/json' -d '{\"key\":\"val\"}' -X POST http://api/endpoint\ncurl -I https://example.com # ํ—ค๋”๋งŒ",
"common_mistake": "`curl URL`์€ ๋‚ด์šฉ์„ stdout์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋ ค๋ฉด `-o ํŒŒ์ผ๋ช…` ๋˜๋Š” URL๊ณผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์ €์žฅ์€ `-O`๋ฅผ ์”๋‹ˆ๋‹ค.",
"keywords": [
"curl",
"-O",
"-o",
"-H",
"-d",
"-X",
"-I",
"HTTP"
],
"source_id": "linux-man7-ip",
"details": [
"์ฃผ์š” ์˜ต์…˜: `-o ํŒŒ์ผ`(์ €์žฅ), `-O`(์›๋ณธ ํŒŒ์ผ๋ช…), `-L`(๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋”ฐ๋ผ๊ฐ€๊ธฐ), `-k`(SSL ๊ฒ€์ฆ ๋ฌด์‹œ), `-s`(silent), `-v`(์ƒ์„ธ).",
"`curl -I URL`์€ HTTP ํ—ค๋”๋งŒ ํ™•์ธ. ์ƒํƒœ ์ฝ”๋“œ(200, 404, 301 ๋“ฑ)๋กœ ์„œ๋น„์Šค ์‘๋‹ต์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์„œ๋น„์Šค ๋™์ž‘ ํ™•์ธ, ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ, ๊ฐ„๋‹จํ•œ API ์š”์ฒญ ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-ping",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ping โ€” ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ํ™•์ธ",
"summary": "ICMP echo ์š”์ฒญ์œผ๋กœ ํ˜ธ์ŠคํŠธ์— ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋ฌธ์ œ ์ง„๋‹จ์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.",
"example": "ping -c 4 8.8.8.8\nping -c 1 192.168.1.1 # ๊ฒŒ์ดํŠธ์›จ์ด ํ™•์ธ\nping6 ::1 # IPv6 ๋ฃจํ”„๋ฐฑ",
"common_mistake": "๋ฐฉํ™”๋ฒฝ์ด ICMP๋ฅผ ์ฐจ๋‹จํ•˜๋ฉด ping์ด ์‹คํŒจํ•ด๋„ ์‹ค์ œ๋กœ๋Š” ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ping ์‹คํŒจ = ์„œ๋น„์Šค ์žฅ์• ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.",
"keywords": [
"ping",
"-c",
"ICMP",
"latency",
"packet loss"
],
"source_id": "ubuntu-networking",
"details": [
"`-c ํšŸ์ˆ˜`๋กœ ๋ณด๋‚ผ ํŒจํ‚ท ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ์ง€์ • ์•Š์œผ๋ฉด Ctrl+C ๋ˆ„๋ฅผ ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ „์†กํ•ฉ๋‹ˆ๋‹ค.",
"์ถœ๋ ฅ์—์„œ `time=`์€ RTT(์™•๋ณต ์‹œ๊ฐ„), `packet loss %`๋Š” ํŒจํ‚ท ์†์‹ค๋ฅ . 100% loss๋ฉด ๊ฒฝ๋กœ ๋ฌธ์ œ ๋˜๋Š” ๋ฐฉํ™”๋ฒฝ ์ฐจ๋‹จ์ž…๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํ˜ธ์ŠคํŠธ์˜ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ํ™•์ธ, `-c` ์˜ต์…˜์œผ๋กœ ํŒจํ‚ท ์ˆ˜ ์ œํ•œํ•˜๋Š” ๋ช…๋ น์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-cron",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "cron โ€” ์ž‘์—… ์Šค์ผ€์ค„๋ง",
"summary": "์ง€์ •ํ•œ ์‹œ๊ฐ์ด๋‚˜ ์ฃผ๊ธฐ์— ๋ช…๋ น์„ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. `crontab -e`๋กœ ์‚ฌ์šฉ์ž๋ณ„ ์Šค์ผ€์ค„์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.",
"example": "crontab -e # ํŽธ์ง‘\ncrontab -l # ๋ชฉ๋ก ํ™•์ธ\n# ๋งค์ผ ์ƒˆ๋ฒฝ 2์‹œ์— ๋ฐฑ์—…\n0 2 * * * /usr/local/bin/backup.sh\n# ๋งค 5๋ถ„๋งˆ๋‹ค\n*/5 * * * * /usr/local/bin/check.sh",
"common_mistake": "cron ์ž‘์—…์—์„œ๋Š” PATH๊ฐ€ ์ผ๋ฐ˜ ์‰˜๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ช…๋ น์„ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์“ฐ๊ฑฐ๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์—์„œ PATH๋ฅผ ์ง์ ‘ ์„ค์ •ํ•˜์„ธ์š”.",
"keywords": [
"cron",
"crontab",
"-e",
"-l",
"schedule",
"*/5"
],
"source_id": "ubuntu-server-docs",
"details": [
"crontab ํ˜•์‹: `๋ถ„ ์‹œ ์ผ ์›” ์š”์ผ ๋ช…๋ น`. ๋ณ„ํ‘œ(*)๋Š” '๋ชจ๋“  ๊ฐ’', `*/5`๋Š” '5๋งˆ๋‹ค', `0,30`์€ '0๊ณผ 30'์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.",
"์‹œ์Šคํ…œ ์ „์ฒด cron์€ `/etc/cron.d/`, `/etc/cron.daily/` ๋“ฑ์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. `/var/log/syslog`์— ์‹คํ–‰ ๊ธฐ๋ก์ด ๋‚จ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์ฃผ๊ธฐ(๋งค์ผ, ๋งค์‹œ๊ฐ„, ๋งค N๋ถ„)๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” crontab ํ•ญ๋ชฉ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-top",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "top โ€” ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ",
"summary": "CPUยท๋ฉ”๋ชจ๋ฆฌยทํ”„๋กœ์„ธ์Šค๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"example": "top\ntop -u alice # ํŠน์ • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋งŒ\ntop -bn 1 # 1ํšŒ๋งŒ ์ถœ๋ ฅ (์Šคํฌ๋ฆฝํŠธ์šฉ)\nhtop # ๋” ๋ณด๊ธฐ ์ข‹์€ ๋Œ€์•ˆ",
"common_mistake": "`top` ์‹คํ–‰ ์ค‘ `k` ํ‚ค๋กœ PID๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป ๋ˆ„๋ฅด์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”.",
"keywords": [
"top",
"CPU",
"memory",
"load average",
"%MEM",
"%CPU"
],
"source_id": "ubuntu-server-docs",
"details": [
"์ƒ๋‹จ ์š”์•ฝ: load average(1๋ถ„/5๋ถ„/15๋ถ„ ํ‰๊ท  ๋ถ€ํ•˜), Tasks(ํ”„๋กœ์„ธ์Šค ์ˆ˜), %Cpu(us/sy/id), Mem/Swap ์‚ฌ์šฉ๋Ÿ‰.",
"์ปฌ๋Ÿผ ์˜๋ฏธ: PID, USER, %CPU, %MEM, RES(์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ), S(์ƒํƒœ: R=์‹คํ–‰/S=๋Œ€๊ธฐ/Z=์ข€๋น„).",
"์‹œํ—˜ ํŒจํ„ด: CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ํ”„๋กœ์„ธ์Šค ์ฐพ๊ธฐ, ๋กœ๋“œ ์• ๋ฒ„๋ฆฌ์ง€ ํ•ด์„, ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ํ™•์ธ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-nice",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "nice, renice โ€” ํ”„๋กœ์„ธ์Šค ์šฐ์„ ์ˆœ์œ„",
"summary": "ํ”„๋กœ์„ธ์Šค์˜ CPU ์Šค์ผ€์ค„๋ง ์šฐ์„ ์ˆœ์œ„๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก(-20~+19) ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์œผ๋ฉฐ, ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ์„ค์ •์€ root๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.",
"example": "nice -n 10 gzip big_file.gz # ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์‹œ์ž‘\nrenice -n -5 -p 1234 # ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๋ณ€๊ฒฝ\nps -o pid,ni,cmd -p 1234 # ํ˜„์žฌ nice ๊ฐ’ ํ™•์ธ",
"common_mistake": "nice ๊ฐ’์ด ๋‚ฎ์„์ˆ˜๋ก ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค(-20์ด ์ตœ๊ณ ). ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ๋ณด๋‹ค ๋‚ฎ๊ฒŒ(๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ)๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"nice",
"renice",
"priority",
"niceness",
"-20",
"+19"
],
"source_id": "ubuntu-server-docs",
"details": [
"๊ธฐ๋ณธ nice ๊ฐ’์€ 0. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฐฐ์น˜ ์ž‘์—…์€ `nice -n 15`์ฒ˜๋Ÿผ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ์‹คํ–‰ํ•ด ์‹œ์Šคํ…œ ์˜ํ–ฅ์„ ์ค„์ž…๋‹ˆ๋‹ค.",
"`renice`๋กœ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. `-p PID`๋กœ ํ”„๋กœ์„ธ์Šค, `-u ์‚ฌ์šฉ์ž`๋กœ ์‚ฌ์šฉ์ž ์ „์ฒด๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • nice ๊ฐ’์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-lsblk",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "lsblk โ€” ๋ธ”๋ก ์žฅ์น˜ ํ™•์ธ",
"summary": "๋””์Šคํฌ, ํŒŒํ‹ฐ์…˜, LVM ๋“ฑ ๋ธ”๋ก ์žฅ์น˜์™€ ๋งˆ์šดํŠธ ์ •๋ณด๋ฅผ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.",
"example": "lsblk\nlsblk -f # ํŒŒ์ผ์‹œ์Šคํ…œ ํƒ€์ž…๊ณผ UUID ํฌํ•จ\nblkid # UUID์™€ ํƒ€์ž… ์ƒ์„ธ ํ™•์ธ",
"common_mistake": "`lsblk`๋Š” ๋ธ”๋ก ์žฅ์น˜ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , `df -h`๋Š” ๋งˆ์šดํŠธ๋œ ํŒŒ์ผ์‹œ์Šคํ…œ์˜ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์—ญํ• ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.",
"keywords": [
"lsblk",
"blkid",
"partition",
"UUID",
"FSTYPE",
"block device"
],
"source_id": "ubuntu-storage",
"details": [
"์ถœ๋ ฅ ์ปฌ๋Ÿผ: NAME(์žฅ์น˜๋ช…), SIZE, TYPE(disk/part/lvm), MOUNTPOINT. `sda`๋Š” ๋””์Šคํฌ, `sda1`์€ ์ฒซ ํŒŒํ‹ฐ์…˜.",
"`lsblk -f`๋Š” ํŒŒ์ผ์‹œ์Šคํ…œ ํƒ€์ž…(ext4, xfs ๋“ฑ)๊ณผ UUID๋ฅผ ํ•จ๊ป˜ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. `/etc/fstab` ์„ค์ • ์‹œ UUID๋ฅผ ์—ฌ๊ธฐ์„œ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ๋งˆ์šดํŠธ ๊ฐ€๋Šฅํ•œ ํŒŒํ‹ฐ์…˜ ๋ชฉ๋ก ํ™•์ธ, UUID ์กฐํšŒ, ๋””์Šคํฌ ๊ตฌ์กฐ ํŒŒ์•… ๋ฌธ์ œ์—์„œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-fstab",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "/etc/fstab โ€” ์ž๋™ ๋งˆ์šดํŠธ ์„ค์ •",
"summary": "๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ๋งˆ์šดํŠธํ•  ํŒŒ์ผ์‹œ์Šคํ…œ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. UUID, ์žฅ์น˜๋ช…, ๋งˆ์šดํŠธ ํฌ์ธํŠธ, ํŒŒ์ผ์‹œ์Šคํ…œ ํƒ€์ž…, ์˜ต์…˜, dump/pass๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.",
"example": "# UUID๋ฅผ ์‚ฌ์šฉํ•œ fstab ํ•ญ๋ชฉ\nUUID=xxxx-yyyy /mnt/data ext4 defaults 0 2\n# ํ™•์ธ ๋ฐ ํ…Œ์ŠคํŠธ\nmount -a # fstab ์ „์ฒด ๋งˆ์šดํŠธ ์‹œ๋„",
"common_mistake": "fstab์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ๋ถ€ํŒ… ์ž์ฒด๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ํ›„ `mount -a`๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ , UUID๋Š” `blkid`๋กœ ํ™•์ธํ•˜์„ธ์š”.",
"keywords": [
"fstab",
"UUID",
"mount -a",
"defaults",
"auto mount"
],
"source_id": "ubuntu-storage",
"details": [
"fstab ํ˜•์‹: `์žฅ์น˜ ๋งˆ์šดํŠธํฌ์ธํŠธ ํƒ€์ž… ์˜ต์…˜ dump pass`. dump=0(๋ฐฑ์—… ์ œ์™ธ), pass=0(๊ฒ€์‚ฌ ์•ˆ ํ•จ)/1(๋ฃจํŠธ)/2(๊ธฐํƒ€).",
"์žฅ์น˜ ์ง€์ •์€ UUID๊ฐ€ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. `/dev/sda1`์€ ๋””์Šคํฌ ์ถ”๊ฐ€ ์‹œ ์ด๋ฆ„์ด ๋ฐ”๋€” ์ˆ˜ ์žˆ์ง€๋งŒ UUID๋Š” ๊ณ ์ •์ž…๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํŒŒํ‹ฐ์…˜์„ ๋ถ€ํŒ… ์‹œ ์ž๋™ ๋งˆ์šดํŠธํ•˜๋„๋ก fstab์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์‹ค์Šต ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-swap",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "swap โ€” ์Šค์™‘ ๊ด€๋ฆฌ",
"summary": "๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ๋””์Šคํฌ ์ผ๋ถ€๋ฅผ ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์Šค์™‘ ํŒŒํ‹ฐ์…˜๊ณผ ์Šค์™‘ ํŒŒ์ผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค.",
"example": "swapon --show # ํ˜„์žฌ ์Šค์™‘ ํ™•์ธ\nfallocate -l 2G /swapfile\nchmod 600 /swapfile\nmkswap /swapfile\nswapon /swapfile",
"common_mistake": "์Šค์™‘ ํŒŒ์ผ์€ ๋ฐ˜๋“œ์‹œ root๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก `chmod 600`์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ์ด ์—ด๋ ค ์žˆ์œผ๋ฉด `swapon`์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"swap",
"swapon",
"swapoff",
"mkswap",
"swapfile",
"/proc/swaps"
],
"source_id": "ubuntu-storage",
"details": [
"์Šค์™‘ ํŒŒ์ผ ์ƒ์„ฑ ์ˆœ์„œ: `fallocate -l ํฌ๊ธฐ /swapfile` โ†’ `chmod 600` โ†’ `mkswap` โ†’ `swapon` โ†’ `/etc/fstab`์— ์ถ”๊ฐ€.",
"์˜๊ตฌ ํ™œ์„ฑํ™”: `/etc/fstab`์— `/swapfile none swap sw 0 0` ์ถ”๊ฐ€. `swapon -a`๋กœ fstab์˜ ์Šค์™‘์„ ๋ชจ๋‘ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํฌ๊ธฐ์˜ ์Šค์™‘ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ํ™œ์„ฑํ™”ํ•˜๋Š” ์ „์ฒด ๊ณผ์ •์„ ์ž‘์„ฑํ•˜๋Š” ์‹ค์Šต ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-lvm",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "LVM โ€” ๋…ผ๋ฆฌ ๋ณผ๋ฅจ ๊ด€๋ฆฌ",
"summary": "๋ฌผ๋ฆฌ ๋””์Šคํฌ(PV)๋ฅผ ๋ณผ๋ฅจ ๊ทธ๋ฃน(VG)์œผ๋กœ ๋ฌถ๊ณ , ๊ทธ ์•ˆ์— ์œ ์—ฐํ•˜๊ฒŒ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋…ผ๋ฆฌ ๋ณผ๋ฅจ(LV)์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.",
"example": "pvcreate /dev/sdb\nvgcreate datavg /dev/sdb\nlvcreate -L 10G -n datalv datavg\nmkfs.ext4 /dev/datavg/datalv\nlvextend -L +5G /dev/datavg/datalv && resize2fs /dev/datavg/datalv",
"common_mistake": "`lvextend`๋กœ LV ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฐ ๋’ค ํŒŒ์ผ์‹œ์Šคํ…œ๋„ ๋Š˜๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ext4๋Š” `resize2fs`, xfs๋Š” `xfs_growfs`๋ฅผ ์”๋‹ˆ๋‹ค.",
"keywords": [
"LVM",
"pvcreate",
"vgcreate",
"lvcreate",
"lvextend",
"resize2fs"
],
"source_id": "ubuntu-storage",
"details": [
"LVM 3๊ณ„์ธต: PV(๋ฌผ๋ฆฌ ๋ณผ๋ฅจ, ์‹ค์ œ ๋””์Šคํฌ/ํŒŒํ‹ฐ์…˜) โ†’ VG(๋ณผ๋ฅจ ๊ทธ๋ฃน) โ†’ LV(๋…ผ๋ฆฌ ๋ณผ๋ฅจ, ํŒŒ์ผ์‹œ์Šคํ…œ์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๊ณณ).",
"ํ™•์žฅ ์ ˆ์ฐจ: `lvextend -L +ํฌ๊ธฐ /dev/VG/LV` ํ›„ `resize2fs /dev/VG/LV`(ext4) ๋˜๋Š” `xfs_growfs /๋งˆ์šดํŠธํฌ์ธํŠธ`(xfs).",
"์‹œํ—˜ ํŒจํ„ด: PVโ†’VGโ†’LV ์ƒ์„ฑ ์ˆœ์„œ, LV ํ™•์žฅ ํ›„ ํŒŒ์ผ์‹œ์Šคํ…œ ํ™•์žฅ๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์‹ค์Šต ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-logs-var",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "/var/log โ€” ์‹œ์Šคํ…œ ๋กœ๊ทธ ํŒŒ์ผ",
"summary": "Linux์˜ ์ฃผ์š” ๋กœ๊ทธ ํŒŒ์ผ๋“ค์€ `/var/log/`์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๋ณ„, ๋ชฉ์ ๋ณ„๋กœ ํŒŒ์ผ์ด ๋‚˜๋‰˜์–ด ์žˆ์–ด ๋ฌธ์ œ ์ง„๋‹จ์˜ ์ถœ๋ฐœ์ ์ž…๋‹ˆ๋‹ค.",
"example": "tail -f /var/log/syslog\ngrep 'ERROR' /var/log/auth.log\nls -lh /var/log/\nzcat /var/log/syslog.1.gz # ํšŒ์ „๋œ ๋กœ๊ทธ",
"common_mistake": "`/var/log/syslog`๋Š” ์ผ๋ฐ˜ ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€, `/var/log/auth.log`๋Š” ์ธ์ฆ ๊ด€๋ จ. journalctl์€ ์ด ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ journal์„ ์ฝ์Šต๋‹ˆ๋‹ค.",
"keywords": [
"syslog",
"auth.log",
"dmesg",
"/var/log",
"logrotate"
],
"source_id": "ubuntu-server-docs",
"details": [
"์ฃผ์š” ํŒŒ์ผ: `syslog`(์ผ๋ฐ˜ ์‹œ์Šคํ…œ), `auth.log`(SSH/sudo/PAM ์ธ์ฆ), `kern.log`(์ปค๋„), `dpkg.log`(ํŒจํ‚ค์ง€ ์„ค์น˜/์ œ๊ฑฐ).",
"`logrotate`๊ฐ€ ์ž๋™์œผ๋กœ ๋กœ๊ทธ๋ฅผ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋กœ๊ทธ๋Š” `.1`, `.2` ๋˜๋Š” `.gz`(์••์ถ•) ํ˜•ํƒœ๋กœ ๋ณด๊ด€๋ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์ด๋ฒคํŠธ(๋กœ๊ทธ์ธ ์‹คํŒจ, ์„œ๋น„์Šค ์˜ค๋ฅ˜)๋ฅผ ํ•ด๋‹น ๋กœ๊ทธ ํŒŒ์ผ์—์„œ ์ฐพ๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-dmesg",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "dmesg โ€” ์ปค๋„ ๋ง ๋ฒ„ํผ ๋กœ๊ทธ",
"summary": "์ปค๋„์ด ๋ถ€ํŒ… ์‹œ์™€ ํ•˜๋“œ์›จ์–ด ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ๊ธฐ๋กํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋””์Šคํฌ ์˜ค๋ฅ˜, ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค UP/DOWN ๋“ฑ ํ•˜๋“œ์›จ์–ด ๋ฌธ์ œ ์ง„๋‹จ์— ์”๋‹ˆ๋‹ค.",
"example": "dmesg | tail -20\ndmesg | grep -i error\ndmesg -T # ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํƒ€์ž„์Šคํƒฌํ”„\ndmesg --level=err,warn",
"common_mistake": "`dmesg`๋Š” ์ปค๋„ ๋ ˆ๋ฒจ ๋ฉ”์‹œ์ง€๋งŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๋กœ๊ทธ๋Š” `journalctl -u ์„œ๋น„์Šค๋ช…`์œผ๋กœ ํ™•์ธํ•˜์„ธ์š”.",
"keywords": [
"dmesg",
"kernel",
"hardware",
"-T",
"--level",
"ring buffer"
],
"source_id": "ubuntu-server-docs",
"details": [
"๋””์Šคํฌ I/O ์˜ค๋ฅ˜๋Š” `dmesg | grep -i 'error\\|fail\\|sda'`๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"`dmesg -T`๋Š” ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ์‰ฌ์šด ๋‚ ์งœ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ถœ๋ ฅ์€ ๋ถ€ํŒ… ์ดํ›„ ์ดˆ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์˜ค๋ฅ˜๋‚˜ ํ•˜๋“œ์›จ์–ด ๋ฌธ์ œ๋ฅผ dmesg์—์„œ ์ฐพ๋Š” ๋ฌธ์ œ, ๋˜๋Š” ๋กœ๊ทธ ๋ ˆ๋ฒจ ํ•„ํ„ฐ๋ง ๋ช…๋ น์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-env-path",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ PATH",
"summary": "ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์‰˜๊ณผ ํ”„๋กœ์„ธ์Šค์— ์„ค์ •์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. PATH๋Š” ๋ช…๋ น์„ ์ฐพ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชฉ๋ก์œผ๋กœ, ์ƒˆ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ ํ›„ PATH์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"example": "echo $PATH\nexport PATH=$PATH:/opt/myapp/bin\nprintenv HOME USER\nenv | grep JAVA\nunset MYVAR",
"common_mistake": "`export VAR=๊ฐ’`์€ ํ˜„์žฌ ์‰˜๊ณผ ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜๊ตฌ ์„ค์ •์€ `~/.bashrc` ๋˜๋Š” `/etc/environment`์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.",
"keywords": [
"PATH",
"export",
"env",
"printenv",
"$HOME",
"~/.bashrc"
],
"source_id": "linux-bash-cd",
"details": [
"`export ๋ณ€์ˆ˜=๊ฐ’`์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์—†์ด `๋ณ€์ˆ˜=๊ฐ’`๋งŒ ํ•˜๋ฉด ํ˜„์žฌ ์‰˜์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.",
"์˜๊ตฌ ์„ค์ • ์œ„์น˜: ์‚ฌ์šฉ์ž๋ณ„์€ `~/.bashrc` ๋˜๋Š” `~/.profile`, ์‹œ์Šคํ…œ ์ „์ฒด๋Š” `/etc/environment` ๋˜๋Š” `/etc/profile`.",
"์‹œํ—˜ ํŒจํ„ด: PATH์— ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ™•์ธ/์„ค์ •ํ•˜๋Š” ๋ช…๋ น, ์˜๊ตฌ ์„ค์ • ํŒŒ์ผ ์œ„์น˜๋ฅผ ๋ฌป๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-wildcard",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "์™€์ผ๋“œ์นด๋“œ์™€ ํŒŒ์ผ ๊ธ€๋กœ๋น™",
"summary": "์‰˜์ด ํŒจํ„ด์„ ์‹ค์ œ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. `*`(๋ชจ๋“  ๋ฌธ์ž), `?`(ํ•œ ๋ฌธ์ž), `[abc]`(๋ฌธ์ž ํด๋ž˜์Šค)๋ฅผ ์กฐํ•ฉํ•ด ์”๋‹ˆ๋‹ค.",
"example": "ls *.log\nrm /tmp/test?.txt # test1.txt, test2.txt ๋“ฑ\ncp /etc/[a-z]*.conf /backup/\nls {*.txt,*.md} # brace expansion",
"common_mistake": "์™€์ผ๋“œ์นด๋“œ๋Š” ์‰˜์ด ๋ช…๋ น ์‹คํ–‰ ์ „์— ํŒŒ์ผ ๋ชฉ๋ก์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งค์นญ๋˜๋Š” ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๋ช…๋ น์ด ํŒจํ„ด ๋ฌธ์ž์—ด์„ ๊ทธ๋Œ€๋กœ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.",
"keywords": [
"wildcard",
"glob",
"*",
"?",
"[]",
"brace expansion"
],
"source_id": "linux-bash-cd",
"details": [
"`*`๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž„์˜ ๋ฌธ์ž, `?`๋Š” ์ •ํ™•ํžˆ 1๊ฐœ ๋ฌธ์ž, `[0-9]`๋Š” ๋ฒ”์œ„ ์•ˆ์˜ ํ•œ ๋ฌธ์ž, `[!abc]`๋Š” ์ œ์™ธ์ž…๋‹ˆ๋‹ค.",
"Brace expansion: `file{1,2,3}.txt`๋Š” file1.txt file2.txt file3.txt๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์—†์–ด๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํŒจํ„ด์˜ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ์™€์ผ๋“œ์นด๋“œ ํ‘œํ˜„์‹์ด ์–ด๋–ค ํŒŒ์ผ์— ๋งค์นญ๋˜๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-exit-code",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "exit code โ€” ๋ช…๋ น ์ข…๋ฃŒ ์ฝ”๋“œ",
"summary": "๋ช…๋ น ์‹คํ–‰ ํ›„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ˆซ์ž(0~255). 0์€ ์„ฑ๊ณต, 0์ด ์•„๋‹ˆ๋ฉด ์˜ค๋ฅ˜. ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด์ „ ๋ช…๋ น ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ `$?`๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.",
"example": "ls /etc && echo '์„ฑ๊ณต'\nls /์—†๋Š”๊ฒฝ๋กœ || echo '์‹คํŒจ'\necho $?\ncommand; [ $? -eq 0 ] && echo ok",
"common_mistake": "`$?`๋Š” ๋ฐ”๋กœ ์ง์ „ ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ฝ”๋“œ๋งŒ ๋‹ด์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ช…๋ น ์‹คํ–‰ ํ›„ ์ด์ „ `$?`๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๋ณ€์ˆ˜์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"exit code",
"$?",
"&&",
"||",
"return code",
"0=success"
],
"source_id": "linux-bash-cd",
"details": [
"`&&`๋Š” ์•ž ๋ช…๋ น์ด ์„ฑ๊ณต(exit 0)ํ•  ๋•Œ๋งŒ ๋’ค๋ฅผ ์‹คํ–‰. `||`๋Š” ์‹คํŒจ(exit โ‰ 0)ํ•  ๋•Œ๋งŒ ๋’ค๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.",
"์ž์ฃผ ๋ณด๋Š” ์ฝ”๋“œ: 0=์„ฑ๊ณต, 1=์ผ๋ฐ˜ ์˜ค๋ฅ˜, 2=๋ช…๋ น ์˜ค์šฉ, 126=์‹คํ–‰ ๊ถŒํ•œ ์—†์Œ, 127=๋ช…๋ น ์—†์Œ, 130=Ctrl+C.",
"์‹œํ—˜ ํŒจํ„ด: `&&`์™€ `||`๋กœ ์กฐ๊ฑด๋ถ€ ์‹คํ–‰์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, `$?` ๊ฐ’์œผ๋กœ ์ด์ „ ๋ช…๋ น ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-service-port",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "์„œ๋น„์Šค์™€ ํฌํŠธ ์—ฐ๊ฒฐ",
"summary": "์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค๊ฐ€ ์–ด๋А ํฌํŠธ๋ฅผ ์—ด๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋ฐฉํ™”๋ฒฝ ์„ค์ •๊ณผ ํ•จ๊ป˜ ํฌํŠธ ์ ‘๊ทผ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.",
"example": "ss -tlnp | grep 80\ncat /etc/services | grep ssh\nlsof -i :443\nufw allow 80/tcp",
"common_mistake": "ํฌํŠธ๋ฅผ ์—ด์—ˆ์–ด๋„ ๋ฐฉํ™”๋ฒฝ(ufw/firewalld)์ด ์ฐจ๋‹จํ•˜๋ฉด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค์™€ ๋ฐฉํ™”๋ฒฝ์„ ํ•จ๊ป˜ ํ™•์ธํ•˜์„ธ์š”.",
"keywords": [
"ss",
"lsof",
"/etc/services",
"port",
"firewall",
"ufw"
],
"source_id": "ubuntu-networking",
"details": [
"`ss -tlnp`๋Š” TCP ๋ฆฌ์Šค๋‹ ํฌํŠธ์™€ ์„œ๋น„์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. `lsof -i :ํฌํŠธ`๋Š” ํ•ด๋‹น ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.",
"`/etc/services`๋Š” ํฌํŠธ ๋ฒˆํ˜ธ์™€ ์„œ๋น„์Šค ์ด๋ฆ„ ๋งคํ•‘ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. 22=ssh, 80=http, 443=https, 3306=mysql.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํฌํŠธ๋ฅผ ๋ฆฌ์Šค๋‹ํ•˜๋Š” ์„œ๋น„์Šค ํ™•์ธ, ๋ฐฉํ™”๋ฒฝ์—์„œ ํฌํŠธ ๊ฐœ๋ฐฉ, ์„œ๋น„์Šค ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-apt",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "apt โ€” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ",
"summary": "Ubuntu/Debian ๊ณ„์—ด์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์„ค์น˜, ์—…๋ฐ์ดํŠธ, ๊ฒ€์ƒ‰, ์‚ญ์ œ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.",
"example": "apt update && apt upgrade -y\napt install nginx\napt search 'web server'\napt show nginx\napt list --installed | grep nginx",
"common_mistake": "`apt install` ์ „์— `apt update`๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•ด์•ผ ์ตœ์‹  ํŒจํ‚ค์ง€ ๋ชฉ๋ก์—์„œ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. update ์—†์ด ์„ค์น˜ํ•˜๋ฉด ๊ตฌ๋ฒ„์ „์ด ์„ค์น˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"keywords": [
"apt",
"apt update",
"apt install",
"apt upgrade",
"dpkg"
],
"source_id": "ubuntu-package-management",
"details": [
"`apt update`๋Š” ํŒจํ‚ค์ง€ ๋ชฉ๋ก๋งŒ ๊ฐฑ์‹ , `apt upgrade`๋Š” ์‹ค์ œ ์—…๋ฐ์ดํŠธ ์„ค์น˜. ํ•ญ์ƒ update โ†’ upgrade ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.",
"`dpkg -l | grep ํŒจํ‚ค์ง€`๋กœ ์„ค์น˜ ์—ฌ๋ถ€ ํ™•์ธ, `dpkg -L ํŒจํ‚ค์ง€`๋กœ ์„ค์น˜๋œ ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํŒจํ‚ค์ง€ ์„ค์น˜, ์„ค์น˜ ์—ฌ๋ถ€ ํ™•์ธ, ๋ชจ๋“  ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-repo",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "APT ์ €์žฅ์†Œ ๊ด€๋ฆฌ",
"summary": "ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ์ €์žฅ์†Œ(repository) ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. `/etc/apt/sources.list` ๋˜๋Š” `/etc/apt/sources.list.d/`์— ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.",
"example": "cat /etc/apt/sources.list\nadd-apt-repository ppa:name/repo\napt-key add key.gpg # ๊ตฌ์‹\ncurl -fsSL URL | gpg --dearmor > /etc/apt/keyrings/key.gpg",
"common_mistake": "์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ GPG ํ‚ค๋„ ํ•จ๊ป˜ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค ์—†์ด ์ €์žฅ์†Œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด `apt update` ์‹œ ์„œ๋ช… ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.",
"keywords": [
"sources.list",
"PPA",
"repository",
"gpg",
"apt-key",
"add-apt-repository"
],
"source_id": "ubuntu-package-management",
"details": [
"`/etc/apt/sources.list.d/`์— ๊ฐœ๋ณ„ `.list` ํŒŒ์ผ์„ ๋„ฃ๋Š” ๋ฐฉ์‹์ด ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ฃผ sources.list๋Š” ๊ฐ€๊ธ‰์  ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.",
"์ตœ์‹  ๋ฐฉ์‹์€ GPG ํ‚ค๋ฅผ `/etc/apt/keyrings/`์— ์ €์žฅํ•˜๊ณ  sources ํŒŒ์ผ์—์„œ `signed-by=` ์˜ต์…˜์œผ๋กœ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์ €์žฅ์†Œ ์ถ”๊ฐ€ ํ›„ `apt update`, ํŒจํ‚ค์ง€ ์„ค์น˜๊นŒ์ง€ ์ด์–ด์ง€๋Š” ์ ˆ์ฐจ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-remove-purge",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ํŒจํ‚ค์ง€ ์ œ๊ฑฐ โ€” remove์™€ purge",
"summary": "`apt remove`๋Š” ํŒจํ‚ค์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋งŒ ์ œ๊ฑฐํ•˜๊ณ  ์„ค์ • ํŒŒ์ผ์€ ๋‚จ๊น๋‹ˆ๋‹ค. `apt purge`๋Š” ์„ค์ • ํŒŒ์ผ๊นŒ์ง€ ์™„์ „ํžˆ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.",
"example": "apt remove nginx\napt purge nginx\napt autoremove # ์˜์กด์„ฑ์œผ๋กœ๋งŒ ์„ค์น˜๋œ ๋ถˆํ•„์š” ํŒจํ‚ค์ง€ ์ œ๊ฑฐ\ndpkg --list | grep ^rc # ์„ค์ • ๋‚จ์€ ์ œ๊ฑฐ๋œ ํŒจํ‚ค์ง€",
"common_mistake": "`remove` ํ›„ ์žฌ์„ค์น˜ํ•˜๋ฉด ์ด์ „ ์„ค์ • ํŒŒ์ผ์ด ๋‚จ์•„ ์žˆ์–ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋™์ž‘์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊นจ๋—์ด ์ œ๊ฑฐํ•˜๋ ค๋ฉด `purge`๋ฅผ ์”๋‹ˆ๋‹ค.",
"keywords": [
"apt remove",
"apt purge",
"autoremove",
"dpkg --purge"
],
"source_id": "ubuntu-package-management",
"details": [
"`apt autoremove`๋Š” ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์˜์กด์„ฑ์œผ๋กœ ์„ค์น˜๋๋‹ค๊ฐ€ ๋” ์ด์ƒ ํ•„์š” ์—†๋Š” ํŒจํ‚ค์ง€๋“ค์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.",
"`dpkg --list | grep '^rc'`๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์ง€์›Œ์กŒ์ง€๋งŒ ์„ค์ • ํŒŒ์ผ์ด ๋‚จ์€ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŒจํ‚ค์ง€๋ฅผ ์„ค์ • ํŒŒ์ผ๊นŒ์ง€ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜, ๋ถˆํ•„์š” ์˜์กด์„ฑ์„ ์ •๋ฆฌํ•˜๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-ufw",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ufw โ€” ๋ฐฉํ™”๋ฒฝ ๊ด€๋ฆฌ",
"summary": "Ubuntu์˜ ๊ฐ„๋‹จํ•œ ๋ฐฉํ™”๋ฒฝ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. iptables ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ ์„œ๋น„์Šค ์ด๋ฆ„์ด๋‚˜ ํฌํŠธ๋กœ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"example": "ufw status verbose\nufw enable\nufw allow 22/tcp\nufw allow 'Nginx Full'\nufw deny 3306\nufw delete allow 80",
"common_mistake": "`ufw enable` ์ „์— ๋ฐ˜๋“œ์‹œ SSH ํฌํŠธ(22)๋ฅผ ํ—ˆ์šฉํ•˜์„ธ์š”. ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๋ฉด SSH ์—ฐ๊ฒฐ์ด ๋Š๊ฒจ ์„œ๋ฒ„์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"ufw",
"enable",
"allow",
"deny",
"status",
"firewall"
],
"source_id": "ubuntu-firewall",
"details": [
"๊ทœ์น™ ์ถ”๊ฐ€ ํ˜•์‹: `ufw allow/deny ํฌํŠธ/ํ”„๋กœํ† ์ฝœ` ๋˜๋Š” `ufw allow 'Apache'`์ฒ˜๋Ÿผ ์‚ฌ์ „ ์ •์˜๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ•„ ์‚ฌ์šฉ.",
"`ufw status numbered`๋กœ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ ๊ทœ์น™ ๋ชฉ๋ก ํ™•์ธ ํ›„ `ufw delete ๋ฒˆํ˜ธ`๋กœ ํŠน์ • ๊ทœ์น™์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํฌํŠธ ๊ฐœ๋ฐฉ/์ฐจ๋‹จ, SSH๋Š” ํ—ˆ์šฉํ•˜๋ฉด์„œ ๋ถˆํ•„์š”ํ•œ ํฌํŠธ ์ฐจ๋‹จ, ๋ฐฉํ™”๋ฒฝ ์ƒํƒœ ํ™•์ธ ๋ช…๋ น์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-head-tail",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "head, tail โ€” ํŒŒ์ผ ์•ž๋’ค ํ™•์ธ",
"summary": "`head`๋Š” ํŒŒ์ผ ์ฒ˜์Œ N์ค„, `tail`์€ ๋งˆ์ง€๋ง‰ N์ค„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. `tail -f`๋Š” ๋กœ๊ทธ ํŒŒ์ผ์— ์ถ”๊ฐ€๋˜๋Š” ๋‚ด์šฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.",
"example": "head -n 20 /etc/passwd\ntail -n 50 /var/log/syslog\ntail -f /var/log/nginx/error.log\ntail -f /var/log/syslog | grep ERROR",
"common_mistake": "`head`๋Š” ํŒŒ์ผ ์‹œ์ž‘, `tail`์€ ํŒŒ์ผ ๋์—์„œ ์ฝ์Šต๋‹ˆ๋‹ค. `-n` ์—†์ด ์“ฐ๋ฉด ๊ธฐ๋ณธ 10์ค„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"head",
"tail",
"-n",
"-f",
"log",
"follow"
],
"source_id": "linux-bash-manual",
"details": [
"`tail -f`๋Š” ํŒŒ์ผ์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๋‚ด์šฉ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์„œ๋น„์Šค ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ ๊ฐ€์žฅ ๋งŽ์ด ์”๋‹ˆ๋‹ค.",
"`tail -n +5`๋Š” 5๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋” ํ–‰์„ ๊ฑด๋„ˆ๋›ธ ๋•Œ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ๋กœ๊ทธ ๋งˆ์ง€๋ง‰ N์ค„ ํ™•์ธ, ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ถ”์ , ํŒŒ์ดํ”„๋กœ grep๊ณผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ช…๋ น์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-sed",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "sed โ€” ์ŠคํŠธ๋ฆผ ํŽธ์ง‘๊ธฐ",
"summary": "ํŒŒ์ผ์ด๋‚˜ ํŒŒ์ดํ”„ ์ž…๋ ฅ์—์„œ ํŒจํ„ด์„ ์ฐพ์•„ ๊ต์ฒดยท์‚ญ์ œยท์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ํŒŒ์ผ ์ž๋™ ์ˆ˜์ •๊ณผ ํ…์ŠคํŠธ ๋ณ€ํ™˜ ์Šคํฌ๋ฆฝํŠธ์— ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.",
"example": "sed 's/old/new/g' file.txt\nsed -i 's/localhost/127.0.0.1/g' nginx.conf\nsed -n '5,10p' file.txt # 5~10์ค„๋งŒ ์ถœ๋ ฅ\nsed '/^#/d' config.txt # ์ฃผ์„ ์ค„ ์‚ญ์ œ",
"common_mistake": "`-i` ์—†์ด๋Š” ์›๋ณธ์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  stdout์œผ๋กœ๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. `-i.bak`์œผ๋กœ ์›๋ณธ์„ ๋ฐฑ์—…ํ•˜๋ฉด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"keywords": [
"sed",
"s/old/new/g",
"-i",
"stream editor",
"substitute",
"delete"
],
"source_id": "linux-bash-manual",
"details": [
"์น˜ํ™˜ ๋ช…๋ น: `s/ํŒจํ„ด/๊ต์ฒด/g`. `g` ํ”Œ๋ž˜๊ทธ ์—†์œผ๋ฉด ์ค„๋‹น ์ฒซ ๋ฒˆ์งธ๋งŒ, `I` ํ”Œ๋ž˜๊ทธ๋Š” ๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ.",
"์ค„ ๋‹จ์œ„ ์ž‘์—…: `Nd`(N๋ฒˆ ์ค„ ์‚ญ์ œ), `Np`(N๋ฒˆ ์ค„๋งŒ ์ถœ๋ ฅ, `-n`๊ณผ ํ•จ๊ป˜), `/ํŒจํ„ด/d`(ํŒจํ„ด ์ค„ ์‚ญ์ œ).",
"์‹œํ—˜ ํŒจํ„ด: ์„ค์ • ํŒŒ์ผ์—์„œ ๊ฐ’์„ ์น˜ํ™˜ํ•˜๊ฑฐ๋‚˜(`-i`), ํŠน์ • ์ค„์„ ์ถœ๋ ฅ/์‚ญ์ œํ•˜๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-text-pipeline",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ โ€” cut, sort, uniq, wc",
"summary": "ํ…์ŠคํŠธ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ๋“ค์ž…๋‹ˆ๋‹ค. ํ•„๋“œ ์ถ”์ถœ(cut), ์ •๋ ฌ(sort), ์ค‘๋ณต ์ œ๊ฑฐ(uniq), ์ค„/๋‹จ์–ด ์ˆ˜ ์„ธ๊ธฐ(wc)๋ฅผ ํŒŒ์ดํ”„๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.",
"example": "cut -d':' -f1 /etc/passwd | sort | uniq\nwc -l /var/log/syslog\ncat access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn | head -10",
"common_mistake": "`uniq`๋Š” ์—ฐ์†๋œ ์ค‘๋ณต๋งŒ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ `sort` ํ›„ `uniq`๋ฅผ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"cut",
"sort",
"uniq",
"wc",
"-d",
"-f",
"-c",
"-rn"
],
"source_id": "linux-bash-manual",
"details": [
"`cut -d๊ตฌ๋ถ„์ž -fํ•„๋“œ๋ฒˆํ˜ธ`: ์ฝœ๋ก  ๊ตฌ๋ถ„์ž์—์„œ 1๋ฒˆ ํ•„๋“œ โ†’ `cut -d':' -f1`. ์—ฌ๋Ÿฌ ํ•„๋“œ๋Š” `-f1,3` ๋˜๋Š” `-f1-3`.",
"`sort -rn`: r=์—ญ์ˆœ, n=์ˆซ์ž ์ •๋ ฌ. `uniq -c`๋Š” ์ค‘๋ณต ๊ฐœ์ˆ˜๋ฅผ ์•ž์— ๋ถ™์—ฌ ์ค๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ๋กœ๊ทธ์—์„œ ์ƒ์œ„ ์ ‘์† IP ์ถ”์ถœ, ์ค‘๋ณต ์ œ๊ฑฐ ํ›„ ์ •๋ ฌ, ์ค„ ์ˆ˜ ์„ธ๊ธฐ ๋“ฑ ํŒŒ์ดํ”„๋ผ์ธ์„ ์กฐํ•ฉํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-awk",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "awk โ€” ํ•„๋“œ ๊ธฐ๋ฐ˜ ํ…์ŠคํŠธ ์ฒ˜๋ฆฌ",
"summary": "๊ณต๋ฐฑ์ด๋‚˜ ์ง€์ • ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋‰œ ํ•„๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. `cut`๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๋ฉฐ ์กฐ๊ฑด๋ฌธ, ์—ฐ์‚ฐ, ํ•ฉ์‚ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.",
"example": "awk '{print $1, $3}' access.log\nawk -F':' '{print $1}' /etc/passwd\nawk '$3 > 1000 {print $1}' /etc/passwd\nps aux | awk '{print $1, $11}' | head",
"common_mistake": "awk์—์„œ `$0`์€ ์ค„ ์ „์ฒด, `$1`์€ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ์ž…๋‹ˆ๋‹ค. `-F`๋กœ ๊ตฌ๋ถ„์ž๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์œผ๋กœ ๊ณต๋ฐฑ/ํƒญ์ด ๊ตฌ๋ถ„์ž์ž…๋‹ˆ๋‹ค.",
"keywords": [
"awk",
"-F",
"$1",
"NR",
"NF",
"print",
"field"
],
"source_id": "linux-bash-manual",
"details": [
"๊ธฐ๋ณธ ํŒจํ„ด: `awk '์กฐ๊ฑด {๋™์ž‘}' ํŒŒ์ผ`. ์กฐ๊ฑด ์—†์ด `{print $2}`๋งŒ ์“ฐ๋ฉด ๋ชจ๋“  ์ค„์—์„œ 2๋ฒˆ์งธ ํ•„๋“œ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.",
"๋‚ด์žฅ ๋ณ€์ˆ˜: `NR`=ํ˜„์žฌ ์ค„ ๋ฒˆํ˜ธ, `NF`=ํ•„๋“œ ๊ฐœ์ˆ˜. `NR==1`์€ ์ฒซ ๋ฒˆ์งธ ์ค„๋งŒ, `$NF`๋Š” ๋งˆ์ง€๋ง‰ ํ•„๋“œ์ž…๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ํ•„๋“œ๋งŒ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ์กฐ๊ฑด์— ๋งž๋Š” ์ค„๋งŒ ์ถœ๋ ฅํ•˜๋Š” awk ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-ln-symlink",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "ln โ€” ํ•˜๋“œ ๋งํฌ์™€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ",
"summary": "์‹ฌ๋ณผ๋ฆญ ๋งํฌ(`ln -s`)๋Š” ์›๋ณธ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. ํ•˜๋“œ ๋งํฌ๋Š” ๊ฐ™์€ inode๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.",
"example": "ln -s /etc/nginx/nginx.conf ~/nginx.conf\nln /data/file.txt /backup/file.txt # ํ•˜๋“œ ๋งํฌ\nls -la ~/nginx.conf # -> ์›๋ณธ ๊ฒฝ๋กœ ํ‘œ์‹œ\nreadlink -f ~/nginx.conf # ์‹ค์ œ ๊ฒฝ๋กœ ํ™•์ธ",
"common_mistake": "์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š” ์›๋ณธ์ด ์‚ญ์ œ๋˜๋ฉด ๋Š๊ธด ๋งํฌ(dangling symlink)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ ๋งํฌ๋Š” ์›๋ณธ ์‚ญ์ œ ํ›„์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.",
"keywords": [
"ln",
"-s",
"symlink",
"hard link",
"inode",
"readlink"
],
"source_id": "linux-bash-manual",
"details": [
"์‹ฌ๋ณผ๋ฆญ ๋งํฌ: `ln -s ์›๋ณธ๊ฒฝ๋กœ ๋งํฌ๊ฒฝ๋กœ`. `ls -la`์—์„œ `l`๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ `->` ๋’ค์— ์›๋ณธ ๊ฒฝ๋กœ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.",
"ํ•˜๋“œ ๋งํฌ๋Š” ๊ฐ™์€ ํŒŒํ‹ฐ์…˜ ๋‚ด์—์„œ๋งŒ ๊ฐ€๋Šฅ, ๋””๋ ‰ํ„ฐ๋ฆฌ์—๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€. ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š” ํŒŒํ‹ฐ์…˜๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ๊ฒฝ๋กœ์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜, ๋งํฌ ํƒ€์ž…์„ `ls -la`๋กœ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-bg-fg-jobs",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… โ€” jobs, bg, fg, nohup",
"summary": "ํ„ฐ๋ฏธ๋„์„ ๋ธ”๋กํ•˜์ง€ ์•Š๊ณ  ๋ช…๋ น์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. `&`๋กœ ์‹œ์ž‘, `Ctrl+Z`๋กœ ์ผ์‹œ ์ •์ง€, `fg`/`bg`๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.",
"example": "long_task.sh & # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹œ์ž‘\njobs -l # ์ž‘์—… ๋ชฉ๋ก\nfg %1 # 1๋ฒˆ ์ž‘์—… ํฌ๊ทธ๋ผ์šด๋“œ ๋ณต๊ท€\nnohup ./script.sh & # ํ„ฐ๋ฏธ๋„ ๋‹ซํ˜€๋„ ๊ณ„์† ์‹คํ–‰",
"common_mistake": "`&`๋กœ ์‹คํ–‰ํ•œ ์ž‘์—…์€ ํ„ฐ๋ฏธ๋„์„ ๋‹ซ์œผ๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ ์ข…๋ฃŒ ํ›„์—๋„ ๊ณ„์† ์‹คํ–‰ํ•˜๋ ค๋ฉด `nohup`์„ ํ•จ๊ป˜ ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"jobs",
"bg",
"fg",
"nohup",
"&",
"Ctrl+Z",
"SIGHUP"
],
"source_id": "linux-bash-cd",
"details": [
"`Ctrl+Z`๋Š” ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์— SIGTSTP๋ฅผ ๋ณด๋‚ด ์ผ์‹œ ์ •์ง€. `bg`๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์žฌ๊ฐœ, `fg`๋กœ ํฌ๊ทธ๋ผ์šด๋“œ ๋ณต๊ท€.",
"`nohup ๋ช…๋ น &`: SIGHUP ์‹œ๊ทธ๋„์„ ๋ฌด์‹œํ•˜๋ฏ€๋กœ ํ„ฐ๋ฏธ๋„ ์ข…๋ฃŒ ํ›„์—๋„ ์‹คํ–‰ ์œ ์ง€. ์ถœ๋ ฅ์€ ๊ธฐ๋ณธ์œผ๋กœ `nohup.out`์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.",
"์‹œํ—˜ ํŒจํ„ด: ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ณต๊ท€์‹œํ‚ค๋Š” ๋ช…๋ น, nohup ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-shell-script-basics",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "์‰˜ ์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ",
"summary": "๋ฐ˜๋ณต ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฐ์‹œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. shebang ๋ผ์ธ, ๋ณ€์ˆ˜, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ, ํ•จ์ˆ˜๊ฐ€ ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.",
"example": "#!/bin/bash\nset -euo pipefail\nBACKUP_DIR=/backup\n[ -d $BACKUP_DIR ] || mkdir -p $BACKUP_DIR\nfor f in /etc/*.conf; do\n cp $f $BACKUP_DIR/\ndone",
"common_mistake": "`#!/bin/bash`(shebang)๊ฐ€ ์—†์œผ๋ฉด `/bin/sh`๋กœ ์‹คํ–‰๋ผ bash ์ „์šฉ ๋ฌธ๋ฒ•์ด ์˜ค๋ฅ˜๋‚ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ถŒํ•œ(`chmod +x`)๋„ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•˜์„ธ์š”.",
"keywords": [
"shebang",
"#!/bin/bash",
"if",
"for",
"while",
"function",
"chmod +x"
],
"source_id": "linux-bash-cd",
"details": [
"`set -euo pipefail`: `-e`(์—๋Ÿฌ ์‹œ ์ฆ‰์‹œ ์ข…๋ฃŒ), `-u`(๋ฏธ์ •์˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์‹œ ์—๋Ÿฌ), `-o pipefail`(ํŒŒ์ดํ”„ ์ค‘๊ฐ„ ์‹คํŒจ ๊ฐ์ง€). ์Šคํฌ๋ฆฝํŠธ ์ƒ๋‹จ์— ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.",
"์กฐ๊ฑด ํ™•์ธ: `[ -f ํŒŒ์ผ ]`(ํŒŒ์ผ ์กด์žฌ), `[ -d ๋””๋ ‰ํ„ฐ๋ฆฌ ]`(๋””๋ ‰ํ„ฐ๋ฆฌ ์กด์žฌ), `[ $var -eq 1 ]`(์ˆซ์ž ๋น„๊ต), `[[ $str == 'a' ]]`(๋ฌธ์ž์—ด).",
"์‹œํ—˜ ํŒจํ„ด: ํŠน์ • ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ถ„๊ธฐํ•˜๋Š” if๋ฌธ, ํŒŒ์ผ ๋ชฉ๋ก์„ ์ฒ˜๋ฆฌํ•˜๋Š” for ๋ฃจํ”„, ํ•จ์ˆ˜ ์ •์˜ ๋“ฑ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-cp-mv-rm",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "cp, mv, rm โ€” ํŒŒ์ผ ๋ณต์‚ฌยท์ด๋™ยท์‚ญ์ œ",
"summary": "ํŒŒ์ผ๊ณผ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณต์‚ฌ(`cp`), ์ด๋™/์ด๋ฆ„๋ณ€๊ฒฝ(`mv`), ์‚ญ์ œ(`rm`)ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์˜ต์…˜์˜ ์กฐํ•ฉ์ด ์‹œํ—˜์—์„œ ์‹œ๋‚˜๋ฆฌ์˜ค ํ˜•ํƒœ๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.",
"example": "cp -a /etc/nginx /backup/nginx.bak # ๊ถŒํ•œยทํƒ€์ž„์Šคํƒฌํ”„ ๋ณด์กด ๋ณต์‚ฌ\nmv config.txt config.bak # ์ด๋ฆ„ ๋ณ€๊ฒฝ\nrm -rf /tmp/old_build/ # ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฐ•์ œ ์‚ญ์ œ",
"common_mistake": "`cp -r`์€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜์ง€๋งŒ ๊ถŒํ•œ๊ณผ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋ณด์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—… ๋ชฉ์ ์ด๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ `cp -a`๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"keywords": [
"cp",
"mv",
"rm",
"-a",
"-r",
"-i",
"-f",
"๋ฐฑ์—…"
],
"source_id": "manual-linux-basic",
"details": [
"**`cp` ํ•ต์‹ฌ ์˜ต์…˜**: `-r`(๋””๋ ‰ํ„ฐ๋ฆฌ ์žฌ๊ท€), `-a`(archive: `-dR --preserve=all`, ๋ฐฑ์—… ์‹œ ํ‘œ์ค€), `-i`(๋ฎ์–ด์“ฐ๊ธฐ ์ „ ํ™•์ธ), `-p`(๊ถŒํ•œยทํƒ€์ž„์Šคํƒฌํ”„ ๋ณด์กด).",
"**`mv`**: ๊ฐ™์€ ํŒŒ์ผ์‹œ์Šคํ…œ ๋‚ด ์ด๋™์€ inode๋งŒ ๊ฐฑ์‹ ํ•ด ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒŒํ‹ฐ์…˜ ๊ฐ„ ์ด๋™์€ ์‹ค์ œ ๋ณต์‚ฌ ํ›„ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.",
"**์‹œํ—˜ ํŒจํ„ด**: 'ํผ๋ฏธ์…˜์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ฐฑ์—…' โ†’ `cp -a`, '์‹ค์ˆ˜ ์—†์ด ์‚ญ์ œ' โ†’ `rm -i`, 'force ์‚ญ์ œ' โ†’ `rm -f`."
]
},
{
"id": "linux-fdisk-parted",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "fdisk, parted โ€” ๋””์Šคํฌ ํŒŒํ‹ฐ์…”๋‹",
"summary": "์ƒˆ ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „ ํŒŒํ‹ฐ์…˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ํŒŒํ‹ฐ์…˜์„ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. MBR์€ `fdisk`, GPT(2TB ์ด์ƒ)๋Š” `parted` ๋˜๋Š” `gdisk`๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"example": "fdisk /dev/sdb # MBR ํŒŒํ‹ฐ์…˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ํŽธ์ง‘\n# n(์ƒˆ ํŒŒํ‹ฐ์…˜) โ†’ p โ†’ 1 โ†’ Enter โ†’ +20G โ†’ w(์ €์žฅ)\nparted /dev/sdc mklabel gpt\nparted /dev/sdc mkpart primary ext4 1MiB 21GiB",
"common_mistake": "`fdisk`๋Š” ํŒŒํ‹ฐ์…˜ ํ…Œ์ด๋ธ”์„ ๋ณ€๊ฒฝํ•ด๋„ `w`๋กœ ์ €์žฅํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋””์Šคํฌ์— ๊ธฐ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ 2TB ์ดˆ๊ณผ ๋””์Šคํฌ์—๋Š” MBR(fdisk) ๋Œ€์‹  GPT(parted/gdisk)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"fdisk",
"parted",
"gdisk",
"MBR",
"GPT",
"partition table",
"lsblk"
],
"source_id": "manual-linux-storage",
"details": [
"**ํŒŒํ‹ฐ์…˜ ํ…Œ์ด๋ธ” ์œ ํ˜•**: MBR(์ตœ๋Œ€ 4 ์ฃผํŒŒํ‹ฐ์…˜, 2TB ํ•œ๊ณ„), GPT(์ตœ๋Œ€ 128 ํŒŒํ‹ฐ์…˜, ์‚ฌ์‹ค์ƒ ๋ฌด์ œํ•œ ์šฉ๋Ÿ‰).",
"**fdisk ํ๋ฆ„**: `n`(์ƒˆ ํŒŒํ‹ฐ์…˜) โ†’ ์œ ํ˜• ์„ ํƒ(p/e) โ†’ ๋ฒˆํ˜ธ โ†’ ์‹œ์ž‘/๋ ์„นํ„ฐ(๋˜๋Š” `+20G`) โ†’ `w`(์ €์žฅ ํ›„ ์ข…๋ฃŒ). `p`๋กœ ํ˜„์žฌ ์ƒํƒœ ํ™•์ธ.",
"**์‹œํ—˜ ํŒจํ„ด**: lsblk๋กœ ์žฅ์น˜ ํ™•์ธ โ†’ fdisk๋กœ ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ โ†’ mkfs๋กœ ํฌ๋งท โ†’ mount ์ˆœ์„œ๊ฐ€ ์ „์ฒด ์Šคํ† ๋ฆฌ์ง€ ์„ค์ • ํ๋ฆ„์œผ๋กœ ์ž์ฃผ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-mkfs-fsck",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "mkfs, fsck โ€” ํŒŒ์ผ์‹œ์Šคํ…œ ์ƒ์„ฑ๊ณผ ๊ฒ€์‚ฌ",
"summary": "ํŒŒํ‹ฐ์…˜์— ํŒŒ์ผ์‹œ์Šคํ…œ์„ ์ƒ์„ฑ(`mkfs`)ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์‚ฌยท์ˆ˜์ •(`fsck`)ํ•ฉ๋‹ˆ๋‹ค. ํฌ๋งท ํ›„ ๋งˆ์šดํŠธํ•ด์•ผ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.",
"example": "mkfs.ext4 /dev/sdb1 # ext4 ํŒŒ์ผ์‹œ์Šคํ…œ ์ƒ์„ฑ\nmkfs.xfs /dev/sdb2 # XFS ํŒŒ์ผ์‹œ์Šคํ…œ ์ƒ์„ฑ\numount /dev/sdb1 && fsck /dev/sdb1 # ๊ฒ€์‚ฌ ์ „ ๋ฐ˜๋“œ์‹œ ์–ธ๋งˆ์šดํŠธ",
"common_mistake": "`fsck`๋Š” ๋งˆ์šดํŠธ๋œ ํŒŒ์ผ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ์–ธ๋งˆ์šดํŠธํ•˜๊ฑฐ๋‚˜ ์‹ฑ๊ธ€ ์œ ์ € ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"mkfs",
"mkfs.ext4",
"mkfs.xfs",
"fsck",
"e2fsck",
"tune2fs",
"ํŒŒ์ผ์‹œ์Šคํ…œ"
],
"source_id": "manual-linux-storage",
"details": [
"**์ฃผ์š” ํŒŒ์ผ์‹œ์Šคํ…œ**: ext4(๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ณธ, ์ €๋„๋ง), xfs(๋Œ€์šฉ๋Ÿ‰ยท๊ณ ์„ฑ๋Šฅ, RHEL ๊ธฐ๋ณธ), btrfs(์Šค๋ƒ…์ƒทยท์„œ๋ธŒ๋ณผ๋ฅจ ์ง€์›).",
"**`tune2fs -l /dev/sdb1`**: ext4 ํŒŒ์ผ์‹œ์Šคํ…œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(UUID, ๋งˆ์šดํŠธ ํšŸ์ˆ˜, ์ƒ์„ฑ์ผ ๋“ฑ)๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. UUID๋Š” fstab ์„ค์ • ์‹œ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.",
"**์‹œํ—˜ ํŒจํ„ด**: ํŒŒํ‹ฐ์…˜ ์ƒ์„ฑ ํ›„ mkfs โ†’ UUID ํ™•์ธ(`blkid`) โ†’ fstab์— ๋“ฑ๋ก โ†’ mount -a ์ˆœ์„œ๊ฐ€ ํ†ตํ•ฉ ์Šคํ† ๋ฆฌ์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-groupadd",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "groupadd, groupmod, groupdel โ€” ๊ทธ๋ฃน ๊ด€๋ฆฌ",
"summary": "๊ทธ๋ฃน์„ ์ƒ์„ฑ(`groupadd`), ์ˆ˜์ •(`groupmod`), ์‚ญ์ œ(`groupdel`)ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋ฅผ ๋ณด์กฐ ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•˜๋Š” `usermod -aG`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"example": "groupadd developers # ๊ทธ๋ฃน ์ƒ์„ฑ\ngroupmod -n devops developers # ๊ทธ๋ฃน ์ด๋ฆ„ ๋ณ€๊ฒฝ\nusermod -aG developers alice # alice๋ฅผ developers ๊ทธ๋ฃน์— ์ถ”๊ฐ€\ngetent group developers # ๊ทธ๋ฃน ๋ฉค๋ฒ„ ํ™•์ธ",
"common_mistake": "`groupdel`์€ ํ•ด๋‹น ๊ทธ๋ฃน์ด ๋ˆ„๊ตฐ๊ฐ€์˜ ๊ธฐ๋ณธ ๊ทธ๋ฃน(primary group)์ด๋ฉด ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๊ทธ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ ๊ทธ๋ฃน์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"groupadd",
"groupmod",
"groupdel",
"usermod -aG",
"/etc/group",
"GID"
],
"source_id": "ubuntu-user-management",
"details": [
"**`/etc/group` ๊ตฌ์กฐ**: `๊ทธ๋ฃน๋ช…:์•”ํ˜ธ:GID:๋ฉค๋ฒ„๋ชฉ๋ก` ํ˜•์‹. `getent group <์ด๋ฆ„>`์œผ๋กœ ํŠน์ • ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.",
"**๋ณด์กฐ ๊ทธ๋ฃน ์ถ”๊ฐ€**: `usermod -aG groupname username`. `-a`(append) ์—†์ด `-G`๋งŒ ์“ฐ๋ฉด ๊ธฐ์กด ๋ณด์กฐ ๊ทธ๋ฃน์ด ๊ต์ฒด๋ฉ๋‹ˆ๋‹ค.",
"**์‹œํ—˜ ํŒจํ„ด**: ์ƒˆ ํŒ€ ์ƒ์„ฑ โ†’ ๊ทธ๋ฃน ๋งŒ๋“ค๊ธฐ โ†’ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋ฅผ ๊ทธ๋ฃน์— ์ถ”๊ฐ€ โ†’ ๊ทธ๋ฃน ๊ณต์œ  ๋””๋ ‰ํ„ฐ๋ฆฌ์— SGID ์„ค์ •ํ•˜๋Š” ๋ณตํ•ฉ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ž์ฃผ ๋‚˜์˜ต๋‹ˆ๋‹ค."
]
},
{
"id": "linux-chage",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "chage โ€” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งŒ๋ฃŒ ์ •์ฑ…",
"summary": "์‚ฌ์šฉ์ž ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋งŒ๋ฃŒ์ผ, ์ตœ๋Œ€ ์‚ฌ์šฉ ๊ธฐ๊ฐ„, ๊ฒฝ๊ณ  ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ •์ฑ… ์ ์šฉ๊ณผ ๊ณ„์ • ๋งŒ๋ฃŒ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.",
"example": "chage -l alice # ํ˜„์žฌ ๋งŒ๋ฃŒ ์ •์ฑ… ํ™•์ธ\nchage -M 90 alice # ์ตœ๋Œ€ 90์ผ๋งˆ๋‹ค ๋ณ€๊ฒฝ ๊ฐ•์ œ\nchage -E 2025-12-31 alice # ๊ณ„์ • ๋งŒ๋ฃŒ์ผ ์„ค์ •\nchage -d 0 alice # ๋‹ค์Œ ๋กœ๊ทธ์ธ ์‹œ ์ฆ‰์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ฐ•์ œ",
"common_mistake": "`chage -d 0`์€ ๋งˆ์ง€๋ง‰ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์ผ์„ ์—ํฌํฌ(1970-01-01)๋กœ ์„ค์ •ํ•ด ๋‹ค์Œ ๋กœ๊ทธ์ธ ์‹œ ์ฆ‰์‹œ ๋ณ€๊ฒฝํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. `-E 0`์€ ๊ณ„์ •์„ ์ฆ‰์‹œ ๋งŒ๋ฃŒ์‹œ์ผœ ๋กœ๊ทธ์ธ ์ž์ฒด๋ฅผ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"chage",
"-l",
"-M",
"-E",
"-d",
"/etc/shadow",
"password aging"
],
"source_id": "ubuntu-user-management",
"details": [
"**์ฃผ์š” ์˜ต์…˜**: `-M`(์ตœ๋Œ€ ์‚ฌ์šฉ์ผ), `-m`(์ตœ์†Œ ์‚ฌ์šฉ์ผ), `-W`(๋งŒ๋ฃŒ ์ „ ๊ฒฝ๊ณ ์ผ), `-I`(๋งŒ๋ฃŒ ํ›„ ๋น„ํ™œ์„ฑํ™” ์œ ์˜ˆ์ผ), `-E`(๊ณ„์ • ๋งŒ๋ฃŒ์ผ), `-d`(๋งˆ์ง€๋ง‰ ๋ณ€๊ฒฝ์ผ).",
"**`/etc/shadow`์— ์ €์žฅ**: ๋งŒ๋ฃŒ ์ •์ฑ…์€ shadow ํŒŒ์ผ์— ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„๋œ ํ•„๋“œ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. `chage`๋Š” ์ด ํŒŒ์ผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ํŽธ์ง‘ํ•˜๋Š” ๋ž˜ํผ์ž…๋‹ˆ๋‹ค.",
"**์‹œํ—˜ ํŒจํ„ด**: '์‹ ๊ทœ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒซ ๋กœ๊ทธ์ธ ์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ' โ†’ `chage -d 0`, '90์ผ๋งˆ๋‹ค ๋ณ€๊ฒฝ ๊ฐ•์ œ' โ†’ `chage -M 90` ํ˜•ํƒœ๋กœ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-systemd-unit",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "systemd ์„œ๋น„์Šค ์œ ๋‹› ํŒŒ์ผ ์ž‘์„ฑ",
"summary": "์ปค์Šคํ…€ ํ”„๋กœ์„ธ์Šค๋ฅผ systemd ์„œ๋น„์Šค๋กœ ๋“ฑ๋กํ•ด ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ํ•˜๊ณ  ์žฌ์‹œ์ž‘ ์ •์ฑ…์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. `/etc/systemd/system/`์— `.service` ํŒŒ์ผ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.",
"example": "# /etc/systemd/system/myapp.service\n[Unit]\nDescription=My Application\nAfter=network.target\n\n[Service]\nExecStart=/usr/local/bin/myapp\nRestart=on-failure\nUser=myapp\n\n[Install]\nWantedBy=multi-user.target\n\nsystemctl daemon-reload && systemctl enable --now myapp",
"common_mistake": "์œ ๋‹› ํŒŒ์ผ์„ ์ˆ˜์ •ํ•œ ํ›„ `systemctl daemon-reload` ์—†์ด ์žฌ์‹œ์ž‘ํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ˆ˜์ • ํ›„์—๋Š” ํ•ญ์ƒ daemon-reload๊ฐ€ ๋จผ์ €์ž…๋‹ˆ๋‹ค.",
"keywords": [
"service unit",
"ExecStart",
"WantedBy",
"daemon-reload",
"enable",
"After",
"Restart"
],
"source_id": "manual-linux-systemd",
"details": [
"**[Unit] ์„น์…˜**: `Description`(์„ค๋ช…), `After`(์ด ์œ ๋‹›๋ณด๋‹ค ๋Šฆ๊ฒŒ ์‹œ์ž‘), `Requires`(์˜์กด์„ฑ, ์—†์œผ๋ฉด ์‹คํŒจ).",
"**[Service] ์„น์…˜**: `ExecStart`(์‹คํ–‰ ๋ช…๋ น), `Restart=on-failure`(์‹คํŒจ ์‹œ ์žฌ์‹œ์ž‘), `User`(์‹คํ–‰ ๊ณ„์ •), `Environment`(ํ™˜๊ฒฝ ๋ณ€์ˆ˜).",
"**์‹œํ—˜ ํŒจํ„ด**: ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„œ๋น„์Šค๋กœ ๋“ฑ๋ก โ†’ ๋ถ€ํŒ… ์‹œ ์ž๋™ ์‹œ์ž‘ ์„ค์ • โ†’ ์žฌ์‹œ์ž‘ ์ •์ฑ… ์ ์šฉ์˜ ์ „์ฒด ํ๋ฆ„, daemon-reload ๋ˆ„๋ฝ ์˜ค๋ฅ˜ ์ง„๋‹จ์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-at",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "at โ€” ์ผํšŒ์„ฑ ์ž‘์—… ์Šค์ผ€์ค„๋ง",
"summary": "cron์ด ๋ฐ˜๋ณต ์ž‘์—…์šฉ์ด๋ผ๋ฉด `at`์€ ํŠน์ • ์‹œ๊ฐ์— ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ™”ํ˜•์œผ๋กœ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ํŒŒ์ดํ”„๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.",
"example": "echo 'tar -czf /backup/home.tar.gz /home' | at 02:00\nat now + 2 hours << 'EOF'\n/usr/local/bin/report.sh\nEOF\natq # ์˜ˆ์•ฝ ๋ชฉ๋ก ํ™•์ธ\natrm 3 # 3๋ฒˆ ์ž‘์—… ์ทจ์†Œ",
"common_mistake": "`at`์€ cron๊ณผ ๋‹ฌ๋ฆฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ตœ์†Œํ™”๋œ ์ƒํƒœ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.",
"keywords": [
"at",
"atq",
"atrm",
"at now",
"batch",
"์ผํšŒ์„ฑ ์Šค์ผ€์ค„"
],
"source_id": "manual-linux-basic",
"details": [
"**์‹œ๊ฐ„ ํ‘œํ˜„**: `at 14:30`, `at now + 1 hour`, `at midnight`, `at noon`, `at 2:00 tomorrow`.",
"**`batch`**: ์‹œ์Šคํ…œ ๋ถ€ํ•˜๊ฐ€ ๋‚ฎ์„ ๋•Œ ๋ช…๋ น์„ ์‹คํ–‰. at์˜ ๋ณ€ํ˜•์œผ๋กœ, ๋ถ€ํ•˜ ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.",
"**์‹œํ—˜ ํŒจํ„ด**: cron vs at ์„ ํƒ ๊ธฐ์ค€(๋ฐ˜๋ณต vs ์ผํšŒ์„ฑ), ํŠน์ • ์‹œ๊ฐ ํ›„ ์‹คํ–‰ ์˜ˆ์•ฝ, atq๋กœ ๋Œ€๊ธฐ์—ด ํ™•์ธ, atrm์œผ๋กœ ์ทจ์†Œํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-docker-basics",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "Docker โ€” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ์ดˆ",
"summary": "2023๋…„ ๊ฐœํŽธ๋œ LFCS์— ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ pull, ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ยท์ค‘์ง€ยท์‚ญ์ œ, ๋กœ๊ทธ ํ™•์ธ ๋“ฑ ๊ธฐ๋ณธ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.",
"example": "docker pull nginx:latest\ndocker run -d -p 8080:80 --name webserver nginx\ndocker ps # ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก\ndocker logs webserver\ndocker stop webserver && docker rm webserver",
"common_mistake": "`docker stop`์€ SIGTERM์œผ๋กœ ์ •์ƒ ์ข…๋ฃŒ๋ฅผ ์š”์ฒญํ•˜๊ณ , `docker kill`์€ SIGKILL๋กœ ๊ฐ•์ œ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๊ฐ€๋Šฅํ•˜๋ฉด `stop`์„ ์‚ฌ์šฉํ•˜์„ธ์š”.",
"keywords": [
"docker",
"pull",
"run",
"ps",
"stop",
"rm",
"logs",
"images",
"-d",
"-p"
],
"source_id": "manual-linux-docker",
"details": [
"**`docker run` ์ฃผ์š” ์˜ต์…˜**: `-d`(๋ฐฑ๊ทธ๋ผ์šด๋“œ), `-p ํ˜ธ์ŠคํŠธ:์ปจํ…Œ์ด๋„ˆ`(ํฌํŠธ ๋งคํ•‘), `-v`(๋ณผ๋ฅจ ๋งˆ์šดํŠธ), `--name`(์ด๋ฆ„ ์ง€์ •), `--rm`(์ข…๋ฃŒ ์‹œ ์ž๋™ ์‚ญ์ œ).",
"**์ด๋ฏธ์ง€ vs ์ปจํ…Œ์ด๋„ˆ**: `docker images`(๋กœ์ปฌ ์ด๋ฏธ์ง€ ๋ชฉ๋ก), `docker ps -a`(์ค‘์ง€๋œ ๊ฒƒ ํฌํ•จ ์ „์ฒด ์ปจํ…Œ์ด๋„ˆ). `docker rmi`๋กœ ์ด๋ฏธ์ง€, `docker rm`์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.",
"**์‹œํ—˜ ํŒจํ„ด**: ์ด๋ฏธ์ง€ pull โ†’ ํฌํŠธ ๋งคํ•‘ํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ โ†’ ๋กœ๊ทธ ํ™•์ธ โ†’ ์ค‘์ง€ ํ›„ ์‚ญ์ œ ํ๋ฆ„, ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘๊ทผ(`docker exec -it`)์ด ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
},
{
"id": "linux-grub-boot",
"certification": "LFCS / ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ",
"title": "๋ถ€ํŒ… ํ”„๋กœ์„ธ์Šค์™€ GRUB",
"summary": "BIOS/UEFI โ†’ GRUB โ†’ ์ปค๋„ โ†’ initramfs โ†’ systemd ์ˆœ์œผ๋กœ ๋ถ€ํŒ…๋ฉ๋‹ˆ๋‹ค. GRUB ์„ค์ •์„ ์ˆ˜์ •ํ•˜๊ณ  ๋ณต๊ตฌ ๋ชจ๋“œ๋กœ ์ง„์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์‹œํ—˜์— ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค.",
"example": "# GRUB ๊ธฐ๋ณธ ์„ค์ • ์ˆ˜์ •\nvim /etc/default/grub\n# GRUB_TIMEOUT=5, GRUB_CMDLINE_LINUX=\"quiet splash\"\nupdate-grub # Ubuntu (grub2-mkconfig -o /boot/grub2/grub.cfg on RHEL)\nsystemctl get-default # ํ˜„์žฌ ๊ธฐ๋ณธ target ํ™•์ธ\nsystemctl set-default multi-user.target",
"common_mistake": "`/etc/default/grub`์„ ์ˆ˜์ •ํ•ด๋„ `update-grub`(Ubuntu) ๋˜๋Š” `grub2-mkconfig`(RHEL)์„ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์‹ค์ œ ๋ถ€ํŠธ๋กœ๋” ์„ค์ •์— ๋ฐ˜์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.",
"keywords": [
"GRUB",
"update-grub",
"grub2-mkconfig",
"systemd target",
"initramfs",
"boot"
],
"source_id": "manual-linux-boot",
"details": [
"**๋ถ€ํŒ… ์ˆœ์„œ**: BIOS/UEFI โ†’ MBR/ESP์˜ GRUB โ†’ `/boot/grub/grub.cfg` ๋กœ๋“œ โ†’ ์ปค๋„+initramfs ๋ฉ”๋ชจ๋ฆฌ ์ ์žฌ โ†’ systemd PID 1 ์‹œ์ž‘.",
"**systemd target**: `multi-user.target`(CLI, runlevel 3), `graphical.target`(GUI, runlevel 5), `rescue.target`(๋‹จ์ผ ์‚ฌ์šฉ์ž ๋ณต๊ตฌ).",
"**์‹œํ—˜ ํŒจํ„ด**: ๋ถ€ํŒ… ์‹คํŒจ ์‹œ GRUB์—์„œ ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜์ •(eํ‚ค), ๊ธฐ๋ณธ target ๋ณ€๊ฒฝ, `update-grub` ์‹คํ–‰ ํƒ€์ด๋ฐ์ด ์ž์ฃผ ์ถœ์ œ๋ฉ๋‹ˆ๋‹ค."
]
}
]