Spaces:
Running
Running
| [ | |
| { | |
| "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` ์คํ ํ์ด๋ฐ์ด ์์ฃผ ์ถ์ ๋ฉ๋๋ค." | |
| ] | |
| } | |
| ] |