Skip to content

Latest commit

ย 

History

History
597 lines (347 loc) ยท 48.1 KB

README-ko.md

File metadata and controls

597 lines (347 loc) ยท 48.1 KB

๐ŸŒ ฤŒeลกtina โˆ™ Deutsch โˆ™ ฮ•ฮปฮปฮทฮฝฮนฮบฮฌ โˆ™ English โˆ™ Espaรฑol โˆ™ Franรงais โˆ™ Indonesia โˆ™ Italiano โˆ™ ๆ—ฅๆœฌ่ชž โˆ™ ํ•œ๊ตญ์–ด โˆ™ Portuguรชs โˆ™ Romรขnฤƒ โˆ™ ะ ัƒััะบะธะน โˆ™ Slovenลกฤina โˆ™ ะฃะบั€ะฐั—ะฝััŒะบะฐ โˆ™ ็ฎ€ไฝ“ไธญๆ–‡ โˆ™ ็น้ซ”ไธญๆ–‡

The Art of Command Line

Ask a Question

Join the chat at https://gitter.im/jlevy/the-art-of-command-line

curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '\w+' | tr -d '`' | cowsay -W50

์ปค๋งจ๋“œ ๋ผ์ธ์„ ๋Šฅ์ˆ™ํ•˜๊ฒŒ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์€ ๋„์™ธ์‹œ๋˜๊ฑฐ๋‚˜ ์‹ ๋น„์Šค๋Ÿฝ๊ฒŒ ์—ฌ๊ฒจ์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปค๋งจ๋“œ ๋ผ์ธ์€ ๋ช…๋ฐฑํ•˜๊ณ ๋„ ๋ฏธ๋ฌ˜ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•˜๋Š” ์ž‘์—…์˜ ์œ ์—ฐ์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ๋ฆฌ๋ˆ…์Šค์—์„œ ์ž‘์—…์„ ํ•˜๋ฉด์„œ ์ฐพ์€ ๋…ธํŠธ์™€ ํŒ๋“ค์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€๋Š” ๊ธฐ์ดˆ์ ์ด๊ณ , ๋ช‡ ๊ฐ€์ง€๋Š” ์ƒ๋‹นํžˆ ๊ตฌ์ฒด์ ์ด๋ฉฐ, ์„ธ๋ จ๋˜๊ณ , ์ž˜ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” ๊ทธ๋ฆฌ ๊ธธ์ง€ ์•Š์ง€๋งŒ, ์—ฌ๊ธฐ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๊ณ , ๊ธฐ์–ตํ•ด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋ฉด, ๋งŽ์€ ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ๋Š” ๋งŽ์€ ์ž‘๊ฐ€์™€ ๋ฒˆ์—ญ๊ฐ€๊ฐ€ ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์ค‘ ์ผ๋ถ€ ๊ฒƒ์€ ์›๋ž˜ Quora์— ์˜ฌ๋ผ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฑฐ๊ธฐ์— ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ธฐ๋ณด๋‹ค, Github๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฐ€์น˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—” ๋” ์žฌ๋Šฅ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์†์‰ฝ๊ฒŒ ๊ฐœ์„ ์•ˆ์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด์ฃ . ๋งจ๋“œ ๋ž€์ด์— ๊ด€ํ•œ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ์งˆ๋ฌธํ•ด ์ฃผ์„ธ์š”. ์˜ค๋ฅ˜๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ๋” ๋‚˜์•„์งˆ ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์ด ๋ณด์ธ๋‹ค๋ฉด, ๊ธฐ์—ฌ ํ•ด ์ฃผ์„ธ์š”!

Meta

๋ฒ”์œ„:

  • ์ด ๊ฐ€์ด๋“œ๋Š” ์ดˆ๋ณด์ž์™€ ๊ฒฝํ—˜์ž ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๋ฒ”์œ„(์ „๋ถ€ ๋‹ค ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!), ๊ตฌ์ฒด์„ฑ(๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ฐ˜์ ์ธ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ œ), ๊ทธ๋ฆฌ๊ณ  ๊ฐ„๊ฒฐํ•จ(์‰ฝ๊ฒŒ ๋งˆ์ฃผ์น˜์ง€ ์•Š๋Š”, ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ , ์ง€์—ฝ์ ์ธ ๊ฒƒ์„ ํ”ผํ•จ)์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒ์€ ํŠน์ • ์ƒํ™ฉ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ๋Œ€์•ˆ๋“ค ์‚ฌ์ด์—์„œ์˜ ์‹œ๊ฐ„์„ ํ™•์—ฐํ•˜๊ฒŒ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฌธ์„œ๋Š” ๋ฆฌ๋ˆ…์Šค๋ฅผ ์œ„ํ•œ๊ฒƒ์ž…๋‹ˆ๋‹ค. "OS X only", "Windows only" ์„น์…˜์„ ์ œ์™ธํ•˜๊ณ  ๋ง์ด์ฃ . ๊ทธ ๋ฐ–์˜ ๋Œ€๋ถ€๋ถ„์€ ์œ ๋‹‰์Šค, OS X(์‹ฌ์ง€์–ด Cygwin)์—์„œ๋„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ Bash์— ์ดˆ์ ์ด ๋งž์ถ”์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ํŒ์€ ๋‹ค๋ฅธ ์‰˜์ด๋‚˜, general Bash ์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฌธ์„œ๋Š” "ํ‘œ์ค€" ์œ ๋‹‰์Šค ์ปค๋งจ๋“œ์™€ ํŠน์ • ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ ๋‘˜ ๋‹ค ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‹ค๋ฃจ๋Š” ํ‘œ์ค€ ์ปค๋งจ๋“œ์™€ ํŠน์ • ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๊ฒƒ์€ ํฌํ•จ๋  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋…ธํŠธ:

  • ์ด ๋ฌธ์„œ๋ฅผ ํ•œ ํŒŒ์ผ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์ฝ˜ํ…์ธ ๋“ค์€ ์•”์‹œ์ ์ธ ๋ ˆํผ๋Ÿฐ์Šค ํ˜•ํƒœ๋กœ ํฌํ•จ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๊ฐœ๋…์ด๋‚˜ ๋ช…๋ น์–ด์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋œ ํ›„์—, ๊ตฌ๊ธ€์—์„œ ๊ทธ์— ๋Œ€ํ•œ ์ข€ ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๋งŒํผ ๋‹น์‹ ์€ ๋˜‘๋˜‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. apt-get, yum, dnf, pacman, pip, brew (ํ˜น์€ ์ ์ ˆํ•œ ๋‹ค๋ฅธ ๊ฒƒ)์„ ์ด์šฉํ•ด ์ƒˆ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜์„ธ์š”.
  • Explainshell์„ ์ด์šฉํ•ด์„œ ๊ฐ๊ฐ์˜ ์ปค๋งจ๋“œ, ์˜ต์…˜, ํŒŒ์ดํ”„๋‚˜ ๊ทธ ์™ธ ๋“ฑ๋“ฑ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค.

Basics

  • ๊ธฐ๋ณธ Bash๋ฅผ ๋ฐฐ์šฐ์„ธ์š”. ๋งํ•˜์ž๋ฉด, ์ตœ์†Œํ•œ man bash๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ „๋ถ€๋ฅผ ํ›‘์–ด๋ณด์„ธ์š”. ๋งค๋‰ด์–ผ์˜ ๋‚ด์šฉ์€ ๋”ฐ๋ผ๊ฐ€๊ธฐ ์‰ฌ์šฐ๋ฉฐ ๊ทธ๋ฆฌ ๊ธธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‰˜๋“ค ๋˜ํ•œ ์ข‹์Šต๋‹ˆ๋‹ค๋งŒ, Bash๋Š” ๊ฐ•๋ ฅํ•˜๊ณ  ์–ธ์ œ๋‚˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(zsh, fish, ๊ทธ ์™ธ์˜ ์‰˜๋งŒ์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์€, ๋…ธํŠธ๋ถ์—์„œ๋Š” ์ข‹๊ฒ ์ง€๋งŒ, ๋งŽ์€ ๊ฒฝ์šฐ ์ œํ•œ์ด ์ƒ๊ธธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ฑ์˜ ์ผ์—์„œ ๋ง์ด์ฃ ).

  • ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์—๋””ํ„ฐ๋ฅผ ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์ •๋„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋ฐฐ์šฐ์„ธ์š”. Vim(Vi)๊ฐ€ ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ ์˜จ๊ฐ– ์ž‘์—…์„ ํ•˜๋Š”๋ฐ ๋‹ค๋ฅธ ์‹ค์งˆ์ ์ธ ๊ฒฝ์Ÿ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด์ฃ (Emacs, ๋Œ€ํ˜• IDE ๋˜๋Š” ๋ชจ๋˜ ํž™์Šคํ„ฐ์Šค๋Ÿฌ์šด ์—๋””ํ„ฐ๋ฅผ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์— ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋ง์ด์ฃ ).

  • man์„ ์ด์šฉํ•ด์„œ ๋ฌธ์„œ๋ฅผ ์ฝ๋Š” ๋ฒ•์„ ๋ฐฐ์šฐ์„ธ์š”(ํ˜ธ๊ธฐ์‹ฌ ๋งŽ์€ ์‚ฌ๋žŒ์„ ์œ„ํ•ด์„œ ํ•˜๋Š” ์–˜๊ธฐ์ž…๋‹ˆ๋‹ค๋งŒ, man man์€ ์„น์…˜ ๋ฒˆํ˜ธ๋“ค์˜ ๋ชฉ๋ก์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1์€ "regular" ์ปค๋งจ๋“œ, 5๋Š” files/conventions, ๊ทธ๋ฆฌ๊ณ  8์€ administration์ด์ฃ ). apropos๋ฅผ ์ด์šฉํ•ด์„œ man ํŽ˜์ด์ง€๋ฅผ ์ฐพ์œผ์„ธ์š”. ๋ช‡๋ช‡ ์ปค๋งจ๋“œ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปค๋งจ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์„ธ์š”. ํ•˜์ง€๋งŒ Bash ๋นŒํŠธ์ธ ํ•จ์ˆ˜๋“ค์€ help์™€ help -d๋ฅผ ์ด์šฉํ•ด์„œ ๋„์›€๋ง์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • >์™€ <, |๋ฅผ ์ด์šฉํ•œ ํŒŒ์ดํ”„๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์˜ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์„ ๋ฐฐ์šฐ์„ธ์š”. >๋Š” ์ถœ๋ ฅ ํŒŒ์ผ์„ ๋ฎ์–ด ์”Œ์šฐ๊ณ , >>๋Š” ๋ง๋ถ™์ด๋Š” ๊ฑธ ์•Œ์•„๋‘์„ธ์š”. stdout(์—ญ์ฃผ: ํ‘œ์ค€ ์ถœ๋ ฅ)๊ณผ stderr(์—ญ์ฃผ: ํ‘œ์ค€ ์—๋Ÿฌ ์ถœ๋ ฅ)์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šฐ์„ธ์š”.

  • *(๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ?๊ณผ [...])์„ ์ด์šฉํ•˜๋Š” ํŒŒ์ผ ๊ธ€๋กญ(glob) ํ™•์žฅ์„ ๋ฐฐ์šฐ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์Œ๋”ฐ์˜ดํ‘œ"์™€ ํ™‘๋”ฐ์˜ดํ‘œ'์˜ ์ฐจ์ด๋ฅผ ๋ฐฐ์šฐ์„ธ์š”. (๋ณ€์ˆ˜ ํ™•์žฅ์— ๋Œ€ํ•ด์„œ ๋” ๋ณด๋ ค๋ฉด ์•„๋ž˜๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”)

  • Bash ์ž‘์—… ๊ด€๋ฆฌ์— ์ต์ˆ™ํ•ด์ง€์„ธ์š”. &, ctrl-z, ctrl-c, jobs, fg, bg, kill ๋“ฑ๋“ฑ.

  • ssh๋ฅผ ๋ฐฐ์šฐ๊ณ , ssh-agent, ssh-add๋ฅผ ํ†ตํ•ด์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†๋Š” ์ธ์ฆ ๋ฐฉ์‹์˜ ๊ธฐ๋ณธ์„ ๋ฐฐ์šฐ์„ธ์š”.

  • ๊ธฐ๋ณธ ํŒŒ์ผ ๊ด€๋ฆฌ: ls์™€ ls -l(ํŠน๋ณ„ํžˆ, ls -l์—์„œ ๊ฐ๊ฐ์˜ ์—ด์ด ๋ฌด์Šจ ์˜๋ฏธ์ธ์ง€ ๋ฐฐ์šฐ์„ธ์š”), less, head, tail ๊ทธ๋ฆฌ๊ณ  tail -f(๋˜๋Š” ๋” ์ข‹์€ less +F), ln๊ณผ ln -s(ํ•˜๋“œ ๋งํฌ์™€ ์†Œํ”„ํŠธ ๋งํฌ์˜ ์ฐจ์ด์™€ ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์„ ๋ฐฐ์šฐ์„ธ์š”), chown, chmod, du( ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์˜ ๋น ๋ฅธ ์š”์•ฝ์„ ๋ณด๋ ค๋ฉด du -hs *). ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ๋Š” df, mount, fdisk, mkfs, lsblk. inode๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ฐฐ์šฐ์„ธ์š”.(ls -i ๋˜๋Š” df -i)

  • ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ๊ด€๋ฆฌ: ip ๋˜๋Š” ifconfig, dig.

  • git ๊ฐ™์€ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๋ฐฐ์šฐ๊ณ  ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ์ •๊ทœ ํ‘œํ˜„์‹(regular expression)์„ ์ž˜ ์•Œ์•„๋‘์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  grep/egrep์˜ ๋‹ค์–‘ํ•œ ํ”Œ๋ž˜๊ทธ๋„ ์•Œ์•„๋‘์„ธ์š”. -i, -o, -v,-A, -B์™€ -C ์˜ต์…˜์€ ์•Œ์•„๋‘˜ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • apt-get, yum, dnf ๋˜๋Š” pacman(๋ฐฐํฌํŒ๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค)์„ ์ด์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šฐ์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  pip๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์„œ, ํŒŒ์ด์„  ๊ธฐ๋ฐ˜์˜ ์ปค๋งจ๋“œ ๋ผ์ธ ๋„๊ตฌ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์„ธ์š”(๋ฐ‘์— ์„ค๋ช…๋œ ๊ฒƒ ์ค‘ ๋ช‡ ๊ฐ€์ง€๋Š” pip๋ฅผ ์ด์šฉํ•ด ์„ค์น˜ํ•˜๋Š” ๊ฒŒ ์ œ์ผ ์‰ฝ์Šต๋‹ˆ๋‹ค.

Everyday use

  • Bash ์—์„œ Tab์„ ์“ฐ๋ฉด argument๋ฅผ ์™„์„ฑํ•˜๊ณ , ctrl-r์„ ์“ฐ๋ฉด ์ปค๋งจ๋“œ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค(๋ˆ„๋ฅธ ๋‹ค์Œ, ๊ฒ€์ƒ‰ํ•  ๊ฒƒ์„ ์ž…๋ ฅํ•˜๊ณ , ctrl-r๋ฅผ ๊ณ„์† ๋ˆŒ๋Ÿฌ ์ข€ ๋” ๋งž๋Š” ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Enter๋ฅผ ๋ˆŒ๋Ÿฌ ์ฐพ์€ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ ํ™”์‚ดํ‘œ ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ ๊ฒฐ๊ณผ๋ฅผ ํ˜„์žฌ ๋ผ์ธ์— ๋ณต์‚ฌํ•ด ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

  • Bash์—์„œ ctrl-w๋Š” ๋งˆ์ง€๋ง‰ ๋‹จ์–ด๋ฅผ ์ง€์›๋‹ˆ๋‹ค. ctrl-u๋Š” ๋ผ์ธ์˜ ์ฒ˜์Œ๊นŒ์ง€ ์ „๋ถ€๋‹ค ์ง€์›๋‹ˆ๋‹ค. alt-b์™€ alt-f๋ฅผ ์ด์šฉํ•ด์„œ ๋‹จ์–ด ๋‹จ์œ„๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ctrl-a๋กœ ๋ผ์ธ์˜ ์‹œ์ž‘์ ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ณ  ctrl-e๋กœ ๋ผ์ธ์˜ ๋์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ctrl-k๋Š” ์ปค์„œ ์œ„์น˜๋ถ€ํ„ฐ ๋ผ์ธ์˜ ๋๊นŒ์ง€ ์ง€์›๋‹ˆ๋‹ค. ctrl-l์€ ํ™”๋ฉด์„ ๊นจ๋—ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. man readline์„ ์ด์šฉํ•ด์„œ Bash์˜ ๊ธฐ๋ณธ ํ‚ค ์กฐํ•ฉ์„ ์‚ดํŽด๋ณด์„ธ์š”. ๋งŽ์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด **alt-.**๊ฐ™์€ ๊ฒฝ์šฐ, ์ด๊ฑด argument๋ฅผ ๋Œ์•„๊ฐ€๋ฉด์„œ ๋‚˜ํƒ€๋‚ด๊ณ  **alt-***๋Š” ๊ธ€๋กญ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

  • vi ์Šคํƒ€์ผ์˜ ํ‚ค ์กฐํ•ฉ์„ ์‚ฌ๋ž‘ํ•œ๋‹ค๋ฉด, set -o vi๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(set -o emacs๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

  • ๊ธด ๋ช…๋ น์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์—๋””ํ„ฐ๋ฅผ ์„ค์ •ํ•œ ๋‹ค์Œ(์˜ˆ๋ฅผ ๋“ค๋ฉด, export EDITOR=vim) ctrl-x ctrl-e๋ฅผ ๋ˆŒ๋Ÿฌ ํ˜„์žฌ ๋ช…๋ น์„ ์—๋””ํ„ฐ์—์„œ ์—ด์–ด ์—ฌ๋Ÿฌ์ค„ ํŽธ์ง‘์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. vi ์Šคํƒ€์ผ์—์„œ๋Š” escape-v๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ตœ๊ทผ ์‚ฌ์šฉํ•œ ์ปค๋งจ๋“œ๋ฅผ ๋ณด๋ ค๋ฉด history๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. ๊ทธ ํ›„ !n์œผ๋กœ(์—ฌ๊ธฐ์„œ n์€ ์ปค๋งจ๋“œ ๋ฒˆํ˜ธ๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค) ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. !$(๋งˆ์ง€๋ง‰ argument), !!(๋งˆ์ง€๋ง‰ ์ปค๋งจ๋“œ)์™€ ๊ฐ™์€ ์•ฝ์–ด๋“ค์ด ๋งค์šฐ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ctrl-r์ด๋‚˜ **alt-.**๋ช…๋ น์–ด๋กœ ์ž์ฃผ ๋Œ€์ฒด๋˜๊ธฐ ์‰ฝ์ง€๋งŒ์š”.

  • cd๋กœ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์ƒ๋Œ€์ ์œผ๋กœ ํŒŒ์ผ์„ ์ ‘๊ทผํ•˜๋ ค๋ฉด ~ ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ~/.bashrc). sh ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” $HOME๋กœ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์ „์— ์ž‘์—…ํ•˜๋˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋Œ์•„๊ฐ€๋ ค๋ฉด cd -๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ์ปค๋งจ๋“œ๋ฅผ ํƒ€์ดํ•‘ํ•˜๋˜ ๋„์ค‘์— ๋งˆ์Œ์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด, **alt-#**์„ ์ณ์„œ ์‹œ์ž‘์ ์— #์„ ์‚ฝ์ž…ํ•˜๊ณ , ์—”ํ„ฐ๋ฅผ ์ณ์„œ ์ฝ”๋ฉ˜ํŠธ๋กœ ์—ฌ๊ฒจ์ง€๊ฒŒ ํ•˜์„ธ์š”(๋˜๋Š” ctrl-a, #, enter). ๋‚˜์ค‘์— ์ปค๋งจ๋“œ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ์ฐพ์•„์„œ ํƒ€์ดํ•‘ ์ค‘์ด์—ˆ๋˜ ์ปค๋งจ๋“œ๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • xargs(ํ˜น์€ parallel)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋งค์šฐ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋ผ์ธ๋‹น ๋ช‡ ๊ฐœ์˜ ์•„์ดํ…œ์ด ์‹คํ–‰๋˜๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€(-L) ๊ทธ๊ฑธ ๋ณ‘๋ ฌ๋กœ ํ•  ๊ฒƒ์ธ์ง€(-P)๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ๊ธฐ์–ตํ•˜์„ธ์š”. ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด xargs echo๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•ด๋ณด์„ธ์š”. ๋˜ -I{}๋„ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

      find . -name '*.py' | xargs grep some_function
      cat hosts | xargs -I{} ssh root@{} hostname
  • pstree -p๋Š” ํ”„๋กœ์„ธ์Šค ํŠธ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•˜๋Š”๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

  • pgrep๊ณผ pkill์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์‹œ๊ทธ๋„์„ ๋ณด๋‚ด์„ธ์š”(-f๊ฐ€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค).

  • ํ”„๋กœ์„ธ์Šค์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์‹œ๊ทธ๋„์„ ์•Œ์•„๋‘์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์‹œ ์ค‘์ง€ ํ•  ๋•Œ๋Š” kill -STOP [pid]๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๋ชฉ๋ก์€ man 7 signal์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜์›ํžˆ ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด, nohup์ด๋‚˜ disown์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฆฌ์Šค๋‹(์—ญ์ฃผ: ํŠน์ • ํฌํŠธ๋กœ ๋“ค์–ด์˜ค๋Š” ํŒจํ‚ท ๋ฆฌ์Šค๋‹)์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค๋ฉด netstat -lntp๋‚˜ ss -plat์„ ์‚ฌ์šฉํ•ด์„œ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(TCP ์ผ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. UDP์˜ ๊ฒฝ์šฐ -u์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”).

  • lsof๋ฅผ ์ด์šฉํ•ด์„œ ์—ด๋ ค์žˆ๋Š” ์†Œ์ผ“๊ณผ ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • uptime์ด๋‚˜ w๋ฅผ ์ด์šฉํ•ด์„œ ์‹œ์Šคํ…œ์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ์‹คํ–‰ ์ค‘์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ปค๋งจ๋“œ์— ๋Œ€ํ•ด์„œ alias๋ฅผ ์ด์šฉํ•ด์„œ ์ˆ์ปท์„ ๋งŒ๋“œ์„ธ์š”. ์˜ˆ๋ฅผ๋“ค์–ด, alias ll='ls -latr'์€ ์ƒˆ ๋‹จ์ถ• ๋ช…๋ น ll์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์ถ•, ์„ค์ •, ํ•จ์ˆ˜๋Š” ~/.bashrc์— ์ €์žฅํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ์ฐธ์กฐํ•˜๋Š” ๋กœ๊ทธ์ธ ์…ธ์„ ๊ณ ์ณ๋ณด์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„ค์ •์„ ๋ชจ๋“  ์…ธ ์„ธ์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์ด๋‚˜ ๋กœ๊ทธ์ธํ•  ๋•Œ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋ช…๋ น์€ ~/.bash_profile์— ๋„ฃ์œผ์„ธ์š”. ๊ทธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์˜ ๋กœ๊ทธ์ธ์˜ ์…ธ๊ณผ cron ์žก์˜ ์…ธ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •์„ ๋ถ„๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Git์œผ๋กœ ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ์—์„œ ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์„ธ์š”(์˜ˆ .bashrc, .bash_profile).

  • ๊ณต๋ฐฑ์ด ๋“ค์–ด๊ฐ„ ๋ณ€์ˆ˜๋ช…์ด๋‚˜ ํŒŒ์ผ๋ช…์€ ์ฃผ์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Bash ๋ณ€์ˆ˜๋ฅผ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„ธ์š”(์˜ˆ: "$FOO"). ํŒŒ์ผ ์ด๋ฆ„์˜ ๊ฒฝ๊ณ„์— ๊ณต๋ฐฑ ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•˜๋ ค๋ฉด -0์ด๋‚˜ -print0 ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค๋ฉด, locate -0 pattern | xargs -0 ls -al, find / -print0 -type d | xargs -0 ls -al. for ๋ฌธ์—์„œ ๊ณต๋ฐฑ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ ์ด๋ฆ„์„ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด, IFS=$'\n'๋กœ IFS๋ฅผ ๊ฐœํ–‰ ๋ฌธ์ž๋งŒ์œผ๋กœ ์„ค์ •ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • Bash ์Šคํฌ๋ฆฝํŠธ์—์„œ set -x๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋””๋ฒ„๊น…์šฉ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค(์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์˜ต์…˜ set -v๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์™€ ์ฃผ์„์„ ํฌํ•จํ•œ ๋กœ์šฐ ์ž…๋ ฅ์„ ๋กœ๊น…ํ•ฉ๋‹ˆ๋‹ค). ์ŠคํŠธ๋ฆญํŠธ ๋ชจ๋“œ(strict mode)๊ฐ€ ๊ฐ€๋Šฅํ•  ๋•Œ๋ฉด ์‚ฌ์šฉํ•˜์„ธ์š”. set -e๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚ฌ์„ ๋•Œ ์ค‘๋‹จ์‹œํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. set -u์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์ •๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์ฐพ์•„ ์ค๋‹ˆ๋‹ค. set -o pipefail์„ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ์— ๋Œ€ํ•ด์„œ ๊ฐ•๊ฒฝํ•œ ๊ธฐ์ค€์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค(์ด ์ฃผ์ œ๊ฐ€ ์กฐ๊ธˆ ๋ฏธ๋ฌ˜ํ•˜์ง€๋งŒ ๋ง์ด์ฃ ). ๋” ๋ณต์žกํ•œ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฝ์šฐ EXIT๋‚˜ ERR์— trap๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์Šต๊ด€์€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด, ์ผ๋ฐ˜์ ์ธ ์—๋Ÿฌ๋ฅผ ์ฐพ๊ณ  ์ค‘๋‹จํ•˜๊ณ , ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•ด ์ค๋‹ˆ๋‹ค.

      set -euo pipefail
      trap "echo 'error: Script failed: see failed command above'" ERR
  • Bash ์Šคํฌ๋ฆฝํŠธ์—์„œ (๊ด„ํ˜ธ๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์ž‘์„ฑ๋œ) ์„œ๋ธŒ ์…ธ์€ ์ปค๋งจ๋“œ๋ฅผ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์˜ˆ๋กœ, ์ž„์‹œ๋กœ ๋‹ค๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
      # do something in current dir
      (cd /some/other/dir && other-command)
      # continue in original dir
  • Bash ์—๋Š” ๋‹ค์–‘ํ•œ ๋ณ€์ˆ˜ ํ™•์žฅ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์„ธ์š”. ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ${name:?error message}๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด Bash ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•˜๋‚˜์˜ argument๋ฅผ ์š”๊ตฌํ•œ๋‹ค๋ฉด, input_file=${1:?usage: $0 input_file}๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๋ณ€์ˆ˜๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ๋ฅผ ๋Œ€๋น„ํ•ด ๊ธฐ๋ณธ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ${name:-default} ์ด์ „ ์˜ˆ์ œ์— ์„ ํƒ์ ์ธ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธธ ์›ํ•œ๋‹ค๋ฉด output_file=${2:-logfile}๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. $2๊ฐ€ ์ƒ๋žต๋˜์–ด ๋น„์–ด์žˆ๋‹ค๋ฉด, output_file์€ logfile๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์‚ฐ์ˆ  ํ™•์žฅ์€ i=$(( (i + 1) % 5 )) ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์—ด์€ {1...10}์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ํŠธ๋ฆฌ๋ฐ(trimmin)์€ ${var%suffix}์ด๋‚˜ ${var#prefix}์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด var=foo.pdf๋ผ๋ฉด, echo ${var$.pdf}.txt๋Š” foo.txt๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  • {...}๋ฅผ ์‚ฌ์šฉํ•œ ๊ด„ํ˜ธ ํ™•์žฅ์€ ๋น„์Šทํ•œ ํ…์ŠคํŠธ์˜ ์žฌ์ž…๋ ฅ์„ ์ค„์ด๊ณ , ์•„์ดํ…œ์˜ ์กฐํ•ฉ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mv foo.{txt,pdf} some-dir (์–‘์ชฝ ํŒŒ์ผ๋“ค์„ ์˜ฎ๊น€), cp somefile{,.bak} (cp somefile somefile.bak๋กœ ํ™•์žฅ), mkdir -p test-{a,b,c}/subtest-{1,2,3} (๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์œผ๋กœ ํ™•์žฅํ•ด ๋””๋ ‰ํ„ฐ๋ฆฌ ํŠธ๋ฆฌ๋ฅผ ์ƒ์„ฑ) ๊ฐ™์€ ์˜ˆ์ œ๋“ค์€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ปค๋งจ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ๋ฌผ์€ <(some command)์ฒ˜๋Ÿผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์ฒ˜๋Ÿผ ๋‹ค๋ค„์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ์ปฌ์˜ /etc/hosts๋ฅผ ๋ฆฌ๋ชจํŠธ์˜ ๊ฒƒ๊ณผ ๋น„๊ตํ•˜๋ ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

      diff /etc/hosts <(ssh somehost cat /etc/hosts)
  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ์„ ๋•Œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์—†์œผ๋ฉด ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ตฌ๋ฌธ ์—๋Ÿฌ๊ฐ€ ๋˜์–ด ์‹คํ–‰์ด ๋ฐฉ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์›น์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค์šด๋กœ๋“œํ•  ์˜ˆ์ •์ด๋ผ ํ•  ๋•Œ ๋„์ค‘๊นŒ์ง€๋งŒ ๋‹ค์šด๋กœ๋“œ๋œ ํŒŒ์ผ์ด ์‹คํ–‰ ๋˜๋Š” ๊ฑธ ์˜ˆ๋ฐฉํ•ด ์ค๋‹ˆ๋‹ค.
{
      # ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ๋„ฃ์œผ์„ธ์š”
}
  • cat << EOF...๊ฐ™์€ "here documents"์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋‘์„ธ์š”.

  • Bash์—์„œ ํ‘œ์ค€ ์ถœ๋ ฅ(standard output)๊ณผ ํ‘œ์ค€ ์—๋Ÿฌ(standard error) ๋‘˜ ๋‹ค some-command > logfile 2>&1๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…์ข…, ์ปค๋งจ๋“œ๊ฐ€ ์—ด๋ฆฐ ํŒŒ์ผ ํ•ธ๋“ค์„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด, ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด์— </dev/null์„ ๋ง๋ถ™์ด๋Š” ๊ฒƒ์€ ์ข‹์€ ์Šต๊ด€์ž…๋‹ˆ๋‹ค.

  • man ascii๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ—ฅ์Šค ๊ฐ’๊ณผ 10์ง„ ๊ฐ’์ด ๊ฐ™์ด ์žˆ๋Š” ํ›Œ๋ฅญํ•œ ASCII ํ…Œ์ด๋ธ”์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ธ์ฝ”๋”ฉ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด man unicode, man utf-8 ๊ทธ๋ฆฌ๊ณ  man latin1์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • screen์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ tmux๋ฅผ ์ด์šฉํ•ด์„œ ํ™”๋ฉด์„ ๋‹ค์ค‘ ๋ถ„ํ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฆฌ๋ชจํŠธ ssh ์„ธ์…˜์„ ๋–ผ์–ด๋‚ด๊ณ (detach) ๋‹ค์‹œ ๋ถ™์ด๋Š”๋ฐ(re-attach) ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. byobu์€ ์Šคํฌ๋ฆฐ์ด๋‚˜ tmux๋ณด๋‹ค ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๊ด€๋ฆฌ๋ฅผ ํŽธํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜์„ ์˜๊ตฌํžˆ ์œ ์ง€ํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ๋Œ€์•ˆ์€ ์˜ค์ง dtach๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

  • ssh์—์„œ -L์ด๋‚˜ -D(๊ฐ€๋” -R)๋ฅผ ์ด์šฉํ•ด์„œ ํฌํŠธ ํ„ฐ๋„๋ง ํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์‹œ๋ฉด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ ํ•ด์„œ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•  ๋•Œ ๋ง์ด์ฃ .

  • ๋ช‡ ๊ฐ€์ง€ ssh ์„ค์ •์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ~/.ssh/config๋Š” ํŠน์ • ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ์—ฐ๊ฒฐ์ด ๋Š๊ธฐ๋Š” ๊ฒƒ์„ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์••์ถ•์„ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ •๋“ค์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ scp ๋ช…๋ น์–ด๋ฅผ ๋‚ฎ์€ ๋Œ€์—ญํญ ์—ฐ๊ฒฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋กœ์ปฌ ์ œ์–ด ํŒŒ์ผ์—์„œ ๊ฐ™์€ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์ฑ„๋„์„ ๋‹ค์ค‘ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      TCPKeepAlive=yes
      ServerAliveInterval=15
      ServerAliveCountMax=6
      Compression=yes
      ControlMaster auto
      ControlPath /tmp/%r@%h:%p
      ControlPersist yes
  • ssh์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜๋“ค์€ ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ์˜ต์…˜์ด๋ฉฐ ์ฃผ์˜๋ฅผ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ธŒ๋„ท, ํ˜ธ์ŠคํŠธ ๋˜๋Š” ์‹ ๋ขฐ๋˜๋Š” ๋„คํŠธ์›Œํฌ์—์„œ StrictHostKeyChecking=no, ForwardAgent=yes์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋“ฑ์ž…๋‹ˆ๋‹ค.

  • UDP์„ ์‚ฌ์šฉํ•˜๋Š” ssh์˜ ๋Œ€์•ˆ์œผ๋กœ mosh๋ฅผ ๊ณ ๋ คํ•ด ๋ณด์„ธ์š”. ์—ฐ๊ฒฐ์ด ๋Š๊ธฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ธธ์— ํŽธ๋ฆฌํ•จ์ด ๋”ํ•ด์ง‘๋‹ˆ๋‹ค.(์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์„ค์ • ํ•„์š”)

  • ์‹œ์Šคํ…œ ์„ค์ •์— ์œ ์šฉํ•˜์ง€๋งŒ ls๋กœ ์–ป์„ ์ˆ˜ ์—†๊ณ  ์‰ฝ๊ฒŒ ์—‰๋ง์ด ๋˜๊ธฐ ์‰ฌ์šด ํŒŒ์ผ์˜ ๊ถŒํ•œ์„ 8์ง„๋ฒ• ํ˜•ํƒœ๋กœ ์–ป์œผ๋ ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

      stat -c '%A %a %n' /etc/timezone
  • ๋‹ค๋ฅธ ์ปค๋งจ๋“œ์˜ ์ถœ๋ ฅ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉด์„œ ๊ฐ’์„ ์„ ํƒํ•˜๋ ค๋ฉด percol์ด๋‚˜ fzf๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ๋‹ค๋ฅธ ์ปค๋งจ๋“œ(์˜ˆ๋ฅผ ๋“ค๋ฉด git)์˜ ์ถœ๋ ฅ์œผ๋กœ ํŒŒ์ผ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ ค๋ฉด, fpp (PathPicker)๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ํ˜„์žฌ ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ(๊ณผ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ)๋ฅผ ์œ„ํ•œ ๋‹จ์ˆœํ•œ ์›น์„œ๋ฒ„๋ฅผ ์›ํ•œ๋‹ค๋ฉด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์„ธ์š”: python -m SimpleHTTPServer 7777 (7777ํฌํŠธ, Python 2) ๊ทธ๋ฆฌ๊ณ  python -m http.server 7777 (7777ํฌํŠธ, Python 3).

  • ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด, sudo๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ธฐ๋ณธ๊ฐ’์€ root ์‹คํ–‰ํ•˜๋ฉฐ sudo -u๋กœ ๋‹ค๋ฅธ ์œ ์ €๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -i๋ฅผ ์ด์šฉํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์œผ๋กœ ๋กœ๊ทธ์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(๋‹น์‹ ์˜ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋ฌผ์–ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค)

  • ์…ธ์„ ๋‹ค๋ฅธ ์œ ์ €๋กœ ์ „ํ™˜ํ•˜๋ ค๋ฉด su username๋‚˜ su - username๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. -๋ฅผ ๋„ฃ์œผ๋ฉด ๊ทธ ์œ ์ €๊ฐ€ ๋ฐฉ๊ธˆ ๋กœ๊ทธ์ธํ•œ ๊ฒƒ ๊ฐ™์€ ํ™˜๊ฒฝ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ € ์ด๋ฆ„์„ ์ƒ๋žตํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ root๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ „ํ™˜ํ•˜๋ คํ•˜๋Š” ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฌผ์–ด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ปค๋งจ๋“œ ๋ผ์ธ์˜ 128K ์ œํ•œ์„ ์•Œ์•„ ๋‘์„ธ์š”. "Argument list too long" ์—๋Ÿฌ๋Š” ๋งŽ์€ ํŒŒ์ผ์„ ์™€์ผ๋“œ์นด๋“œ ๋งค์นญํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. (์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ์—๋Š” find, xargs๊ฐ™์€ ๊ฒƒ์ด ๋„์›€ ๋ฉ๋‹ˆ๋‹ค.)

  • ๋‹จ์ˆœํ•œ ๊ณ„์‚ฐ์—๋Š”(๋ฌผ๋ก  ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” Python์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด) python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

>>> 2+3
5

Processing files and data

  • ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ์ด๋ฆ„์œผ๋กœ ์ฐพ์œผ๋ ค๋ฉด find . -iname '*something*' (๋˜๋Š” ๋น„์Šทํ•˜๊ฒŒ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์–ด๋Š ๊ณณ์— ์žˆ๋“  ํŒŒ์ผ์„ ์ด๋ฆ„์œผ๋กœ ์ฐพ์œผ๋ ค๋ฉด locate something์„ ์‚ฌ์šฉํ•˜์„ธ์š”(ํ•˜์ง€๋งŒ ์ธ๋‚ด๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. updatedb๊ฐ€ ์ตœ๊ทผ์— ์ƒ์„ฑ๋œ ํŒŒ์ผ์„ ์ธ๋ฑ์‹ฑํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

  • ์†Œ์Šค๋‚˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋“ค์—์„œ ์ผ๋ฐ˜์ ์ธ ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ๋Š”(grep -r๋ณด๋‹ค ๋” ๋ณต์žกํ•  ๋•Œ), ag๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • HTML์„ ํ…์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ๋Š” lynx -dump -stdin๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ๋งˆํฌ๋‹ค์šด, HTML, ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฌธ์„œ ๋ณ€ํ™˜์—๋Š” pandoc์„ ์‹œ๋„ํ•ด๋ณด์„ธ์š”.

  • XML์„ ๋ฐ˜๋“œ์‹œ ๋‹ค๋ค„์•ผํ•œ๋‹ค๋ฉด, xmlstarlet์„ ์‚ฌ์šฉํ•˜์„ธ์š”. ์˜ค๋ž˜๋˜์—ˆ์ง€๋งŒ ์ข‹์Šต๋‹ˆ๋‹ค.

  • JSON์—๋Š” jq๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • YAML์—๋Š” shyaml๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • Excel์ด๋‚˜ CSVํŒŒ์ผ์—๋Š” csvkit๊ฐ€ in2csv, csvcut, csvjoin, csvgrep์™ธ ๋‹ค๋ฅธ ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Amazon S3๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” s3cmd๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  s4cmd๋Š” ๋น ๋ฆ…๋‹ˆ๋‹ค. Amazon์˜ aws๋Š” ๋‹ค๋ฅธ AWS ๊ด€๋ จ ์ž‘์—…์— ํ•ต์‹ฌ์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

  • sort์™€ uniq์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋‘์„ธ์š”. uniq์˜ -u, -d์˜ต์…˜์„ ํฌํ•จํ•ด์„œ ๋ง์ด์ฃ . ํ•˜๋‹จ์˜ one-liner๋ฅผ ๋ณด์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  comm๋„ ๋ณด์„ธ์š”.

  • ํ…์ŠคํŠธ ํŒŒ์ผ๋“ค์„ ๋‹ค๋ฃจ๋Š” cut, paste ๊ทธ๋ฆฌ๊ณ  join์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋‘์„ธ์š”. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด cut์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ join์— ๋Œ€ํ•ด์„œ๋Š” ์žŠ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • wc๋ฅผ ์ด์šฉํ•ด์„œ ํ–‰(-l), ์บ๋ฆญํ„ฐ(-m), ๋‹จ์–ด(-w) ๊ทธ๋ฆฌ๊ณ  ๋ฐ”์ดํŠธ(-c)๋ฅผ ์„ธ๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์„ธ์š”.

  • tee๋ฅผ ์ด์šฉํ•ด์„œ ls -al | tee file.txt์ฒ˜๋Ÿผ, ํ‘œ์ค€ ์ž…๋ ฅ(stdin)์—์„œ ๋ณต์‚ฌํ•ด์„œ ํŒŒ์ผ๋กœ ๋ณด๋‚ด๊ฑฐ๋‚˜, ํ‘œ์ค€ ์ถœ๋ ฅ(stdout)์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์„ธ์š”.

  • ๊ทธ๋ฃน, ํ•„๋“œ ๋’ค์ง‘๊ธฐ, ํ†ต๊ณ„์ ์ธ ๊ณ„์‚ฐ ๊ฐ™์€ ์ข€ ๋” ๋ณต์žกํ•œ ๊ณ„์‚ฐ์€ datamash๋ฅผ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”.

  • ๋กœ์ผ€์ผ์ด ์ปค๋งจ๋“œ ๋ผ์ธ ๋„๊ตฌ์— ์ •๋ ฌ ์ˆœ์„œ(collation)์™€ ํผํฌ๋จผ์Šค๋ฅผ ํฌํ•จํ•ด์„œ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์„ธ์š”. ๋Œ€๋ถ€๋ถ„์˜ ๋ฆฌ๋ˆ…์Šค ์„ค์น˜๋Š” LANG์ด๋‚˜ ๋‹ค๋ฅธ ๋กœ์ผ€์ผ ๋ณ€์ˆ˜๋ฅผ US English์™€ ๊ฐ™์€ ๋กœ์ปฌ ์„ธํŒ…์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋กœ์ผ€์ผ์„ ๋ฐ”๊ฟ€ ๊ฒฝ์šฐ ์ •๋ ฌ๋„ ๋ฐ”๋€” ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  i18n ๋ฃจํ‹ด๋“ค๋„ ์ •๋ ฌ์ด๋‚˜ ๋‹ค๋ฅธ ์ปค๋งจ๋“œ๋“ค์„ ๋ช‡ ๋ฐฐ ๋Š๋ฆฌ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. export LC_ALL=C๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋Š”( ๋ฐ‘์— ์žˆ๋Š” ์ง‘ํ•ฉ(set) ์ž‘์—…์ด๋‚˜, ์œ ์ผ์„ฑ ์ž‘์—…๋“ฑ) i18n์˜ ๋Š๋ฆฐ ๋ฃจํ‹ด๋“ค์„ ํ†ต์งธ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ „ํ†ต์ ์ธ ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • TZ=Pacific/Fiji date์ฒ˜๋Ÿผ ํŠน์ • ๋ช…๋ น์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‹คํ–‰ ์•ž์— ๋ถ™์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ํ•  ๋•Œ awk์™€ sed๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ์„ธ ๋ฒˆ์งธ ์—ด์˜ ์ˆซ์ž๋“ค์˜ ๋ชจ๋“  ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค: awk '{ x += $3 } END { print x }'. ์ด ๋ฐฉ๋ฒ•์€ ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ณด๋‹ค 3๋ฐฐ ์ •๋„ ๋น ๋ฅด๊ณ , 1/3 ์ •๋„์˜ ๊ธธ์ด๋ฐ–์— ์•ˆ๋ฉ๋‹ˆ๋‹ค.

  • ์—ฌ๋Ÿฌ ํŒŒ์ผ ์•ˆ์˜ ๋ฌธ์ž์—ด์„ ๋ฐ”๊พธ๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜์„ธ์š”.

      perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
  • ์—ฌ๋Ÿฌ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ž์—ด์„ ๋ฐ”๊ฟ€ ๋•Œ์—๋Š” repren๋ฅผ ์จ๋ณด์„ธ์š”. (์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” rename ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ชจ๋“  ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์—์„œ ๊ฐ™์€ ๋™์ž‘์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•˜์„ธ์š”.)
      # ํŒŒ์ผ ์ด๋ฆ„, ๋””๋ ‰ํ„ฐ, ์ปจํ…์ธ  ๋ชจ๋‘ foo์—์„œ bar๋กœ ๋ณ€๊ฒฝ
      repren --full --preserve-case --from foo --to bar .
      # ๋ฐฑ์—… ํŒŒ์ผ์„ whatever.bak์—์„œ whatever๋กœ ๋ณต์›
      repren --renames --from '(.*)\.bak' --to '\1' *.bak
      # ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด rename์œผ๋กœ ์œ„์™€ ๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Œ
      rename 's/\.bak$//' *.bak
  • man ํŽ˜์ด์ง€๊ฐ€ ์ด์•ผ๊ธฐํ•˜๋“ฏ, rsync๋Š” ์ •๋ง ๋น ๋ฅด๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ํŒŒ์ผ ๋ณต์‚ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ๊ธฐ ๊ฐ„์˜ ๋™๊ธฐํ™”์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ, ๋กœ์ปฌ์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๊ทœ์ •์ด ํ—ˆ์šฉํ•œ๋‹ค๋ฉด, scp ๋Œ€์‹  rsync๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ „์†กํ•˜๋Š” ๋Œ€์‹  ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ์žฌ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋งŽ์€ ์ˆ˜์˜ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
mkdir empty && rsync -r --delete empty/ some-dir && rmdir some-dir
  • shuf๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŒŒ์ผ ์•ˆ์˜ ์ž„์˜์˜ ํ–‰์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ์„ž์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • sort์˜ ์˜ต์…˜์„ ์•Œ์•„๋‘์„ธ์š”. -n์€ ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•  ๋•Œ, -h๋Š” ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑํ•œ ์ˆซ์ž์˜ ๊ฒฝ์šฐ(du -h์™€ ๊ฐ™์€ ํ˜•ํƒœ). ํ‚ค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋‘์„ธ์š”(-t์™€ -k). ํŠน๋ณ„ํžˆ, ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ๋กœ๋งŒ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด -k1,1์„ ์ ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ์ฃผ์˜ํ•˜์„ธ์š”. -k1์€ ๋ชจ๋“  ํ–‰์— ๋Œ€ํ•ด์„œ ์ •๋ ฌํ•˜๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ์ •๋ ฌ(sort -s)๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋จผ์ € 2๋ฒˆ ํ•„๋“œ๋กœ ์ •๋ ฌํ•˜๊ณ , ๊ทธ๋‹ค์Œ์— 1๋ฒˆ ํ•„๋“œ๋กœ ์ •๋ ฌํ•  ๊ฒฝ์šฐ, sort -k1,1 | sort -s -k2,2์ฒ˜๋Ÿผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋งŒ์•ฝ ํƒญ(tab)๋ฌธ์ž๋ฅผ Bash ์ปค๋งจ๋“œ ๋ผ์ธ์— ์‚ฌ์šฉํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์ƒ๊ธธ ๊ฒฝ์šฐ(์˜ˆ๋ฅผ ๋“ค๋ฉด -t argument๋ฅผ ์ด์šฉํ•ด ์ •๋ ฌ ํ•  ๋•Œ), ctrl-v **[Tab]**ํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜, $'\t'๋ฅผ ์“ฐ์„ธ์š”(๋ฌธ์ž์ชฝ์ด ๋ณต์‚ฌ๋‚˜ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค.).

  • ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํŒจ์น˜ํ•˜๋Š” ๊ธฐ๋ณธ ๋„๊ตฌ๋Š” diff์™€ patch์ž…๋‹ˆ๋‹ค. diff์™€ sdiff(์ƒˆ๋กœ diff)์˜ ํ†ต๊ณ„ ์š”์•ฝ์„ ๋ณด๋ ค๋ฉด diffstat๋ฅผ ๋ณด์„ธ์š”. diff -r์€ ๋ชจ๋“  ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋Œ€ํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฑธ ์•Œ์•„๋‘์„ธ์š”. diff -r tree1 tree2 | diffstat์œผ๋กœ ๋ณ€๊ฒฝ ๋‚ด์—ญ์˜ ์š”์•ฝ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ hex ๋คํ”„๋ฅผ ๋œจ๊ณ  ์‹ถ์„ ๋•Œ๋Š” hd, hexdump, xxd๋ฅผ ์“ฐ์„ธ์š”. ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ๋•Œ๋Š” bvi, biew๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • strings (๊ทธ๋ฆฌ๊ณ  grep, ๋“ฑ) ์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์•ˆ์—์„œ ๋ฌธ์ž์—ด ๋น„ํŠธ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ diffํ•˜๋ ค๋ฉด(๋ธํƒ€ ์••์ถ•), xdelta3๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ํ…์ŠคํŠธ ํŒŒ์ผ ์ธ์ฝ”๋”ฉ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด iconv๋ฅผ ์‹œ๋„ํ•ด๋ณด์„ธ์š”. ๋˜๋Š” uconv๋Š” ๋” ๋ณต์žกํ•œ ๋ชฉ์ ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. uconv๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ณต์žกํ•œ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์†Œ๋ฌธ์žํ™”ํ•˜๊ณ  ๋ชจ๋“  ์•…์„ผํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋Š”(ํ™•์žฅํ•˜๊ณ , ๋–จ์–ดํŠธ๋ฆฌ๋Š” ๊ฒƒ์„ ์ด์šฉํ•ด์„œ) ์ปค๋งจ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
  • ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„๋ ค๋ฉด split(ํŒŒ์ผ์„ ์‚ฌ์ด์ฆˆ๋กœ ๋‚˜๋ˆ”)์ด๋‚˜ csplit(ํŒŒ์ผ์„ ํŒจํ„ด์œผ๋กœ ๋‚˜๋ˆ”)์„ ๋ณด์„ธ์š”.

  • ๋‚ ์งœ ์‹œ๊ฐ„ ํ‘œํ˜„์‹์„ ์ œ์–ดํ•˜๋ ค๋ฉด dateutils์˜ dateadd, datediff, strptime๋“ฑ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • zless, zmore, zcat ๊ทธ๋ฆฌ๊ณ zgrep์„ ์ด์šฉํ•ด์„œ ์••์ถ•๋œ ํŒŒ์ผ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜์„ธ์š”.

  • ํŒŒ์ผ ์†์„ฑ์€ chattr๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒŒ์ผ ๊ถŒํ•œ์— ๋Œ€ํ•œ ์ €๋ ˆ๋ฒจ ๋Œ€์•ˆ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด sudo chattr +i /critical/directory/or/file๋กœ ๋ถˆ๋ณ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ถ™์—ฌ ์‹ค์ˆ˜๋กœ ํŒŒ์ผ์„ ์ง€์šฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • getfacl, setfacl๋ฅผ ์‚ฌ์šฉํ•ด ํŒŒ์ผ ๊ถŒํ•œ์„ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,

   getfacl -R /some/path > permissions.txt
   setfacl --restore=permissions.txt

System debugging

  • ์›น ๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ๋Š” curl ์™€ curl -I ๊ฐ€ ๋„์›€์ด ๋˜๊ณ , wget๋„ ๊ฝค ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์— ๋ณด๋‹ค ํ˜„๋Œ€์ ์ธ ๋ฐฉ์‹์œผ๋กœ๋Š” httpie์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • cpu/๋””์Šคํฌ์˜ ์ƒํƒœ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” top (ํ˜น์€ ๋” ๋‚˜์€ ๋ช…๋ น์–ด์ธ htop), iostat, iotop์„ ์‚ฌ์šฉํ•˜์„ธ์š”. iostat -mxz 15๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ CPU์™€ ํŒŒํ‹ฐ์…˜ ๋””์Šคํฌ๋ณ„ ์ •๋ณด์™€ ์„ฑ๋Šฅ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ์ž์„ธํžˆ ์•Œ๋ ค๋ฉด netstat, ss๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ์‹œ์Šคํ…œ์— ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ๋ณด๋ ค๋ฉด dstat๊ฐ€ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ์‹œ์Šคํ…œ์˜ ์‹ฌ์ธต์ ์ธ ๋ฉด๋“ค์„ ๋ณด๋ ค๋ฉด glances๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.

  • ๋ฉ”๋ชจ๋ฆฌ์˜ ์ƒํƒœ๋ฅผ ์•Œ์•„๋ณด๋ ค๋ฉด free ์™€ vmstat๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•ด๋ณด์„ธ์š”. ํŠนํžˆ, "cached" ๊ฐ’์€ Linux kernel์— ์˜ํ•ด file cache๋กœ ์žกํ˜€์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ณ  ๊ทธ๋ž˜์„œ "free"๊ฐ’์— ๋Œ€ํ•ด์„œ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Java ์‹œ์Šคํ…œ์˜ ๋””๋ฒ„๊น…์€ ์กฐ๊ธˆ ๋‹ค๋ฅธ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Oracle๊ณผ ๊ทธ ์™ธ์˜ ํšŒ์‚ฌ์—์„œ ๋งŒ๋“  ๋‹ค๋ฅธ JVM๋“ค์—์„œ๋Š” kill -3 <pid>๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ „์ฒด stack trace ์ •๋ณด์™€ heap์˜ ์ •๋ณด(์‹œ๊ธฐ๋ณ„๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์„ธ๋ถ€์ ์ธ ๋‚ด์šฉ ๊ฐ™์€ ๋งค์šฐ ์œ ์šฉํ•œ ์ •๋ณด)๋ฅผ ์š”์•ฝํ•˜์—ฌ stderr๋‚˜ ๋กœ๊ทธ๋กœ ์ถœ๋ ฅํ•ด์ฃผ๋ฏ€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ณด๋ฅผ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JDK์˜ jps, jstat, jstack, jmap ๋ช…๋ น์€ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. SJK tools์€ ๋” ๊ณ ๊ธ‰ ์ •๋ณด๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ์ด์Šˆ๋“ค์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ๋Š” traceroute๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋” ์ข‹์€ mtr๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ๋””์Šคํฌ๊ฐ€ ์™œ ๊ฐ€๋“ ์ฐผ๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ncdu๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”. ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” du -sh *์™€ ๊ฐ™์€ ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์–ด๋– ํ•œ ์†Œ์ผ“์ด๋‚˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์—ญํญ(bandwidth)๋ฅผ ์ฐพ์•„๋ณด๋ ค๋ฉด iftop๋‚˜ nethogs๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ab๋ผ๋Š” ํˆด(Apache์— ๋”ธ๋ ค์žˆ๋Š”)์€ ์‹ ์†ํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ(quick-and-dirty) ์›น์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ์ฒดํฌํ•˜๋Š”๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ๋ณต์žกํ•œ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ๋•Œ๋Š” siege๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.

  • ๋ณด๋‹ค ์‹ฌ๊ฐํ•œ ๊ฒฝ์šฐ์˜ ๋„คํŠธ์›Œํฌ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ๋Š” wireshark, tshark, ngrep๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • strace ์™€ ltrace์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์„ธ์š”. ์ด ์ปค๋งจ๋“œ๋“ค์€ ๋งŒ์ผ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์—์„œ failing, hanging ํ˜น์€ crashing์ด ์ผ์–ด๋‚˜๊ฑฐ๋‚˜ ๊ทธ ์™ธ์— ์—ฌ๋Ÿฌ๋ถ„์ด ๋ฌด์Šจ ์ด์œ ์ธ์ง€ ์•Œ์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด๋‚˜ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ๋‚ด์šฉ์„ ์–ป๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ํ”„๋กœํŒŒ์ผ๋ง์„ ์œ„ํ•œ ์˜ต์…˜(-c)๊ณผ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์— ๋ถ™์ด๊ธฐ ์œ„ํ•œ ์˜ต์…˜(-p)์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

  • ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(shared libraries) ๋“ฑ์„ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ldd์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์„ธ์š”.

  • gdb๋ฅผ ๊ฐ€์ง€๊ณ  ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ stack trace๋“ค์„ ์–ป๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.

  • /proc๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”. ์ด๊ฒƒ์€ ํ˜„์žฌ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์ข…์ข… ๋†€๋ž๋„๋ก ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์‹œ:/proc/cpuinfo, /proc/meminfo, /proc/cmdline, /proc/xxx/cwd, /proc/xxx/exe, /proc/xxx/fd/, /proc/xxx/smaps (xxx๋Š” ํ”„๋กœ์„ธ์Šค id๋‚˜ pid์ž…๋‹ˆ๋‹ค).

  • ๊ณผ๊ฑฐ์— ์™œ ๋ฌด์—‡์ธ๊ฐ€๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ์—๋Š” sar๊ฐ€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ปค๋งจ๋“œ๋Š” CPU, memory, network ๋“ฑ์˜ ํ†ต๊ณ„ ๋‚ด์—ญ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • ์‹œ์Šคํ…œ์˜ ๋ณด๋‹ค ๊นŠ์€ ๊ณณ์„ ๋ณด๊ฑฐ๋‚˜ ํผํฌ๋จผ์Šค๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, stap (SystemTap), perf, sysdig๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.

  • ์—ฌ๋Ÿฌ๋ถ„์ด ์‚ฌ์šฉํ•˜๋Š” Linux์˜ ๋ฐฐํฌํŒ์ด ๋ฌด์—‡์ธ์ง€ ํ™•์ธ(๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐํฌํŒ์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค)ํ•˜๋ ค๋ฉด uname์ด๋‚˜ uname -a ๋˜๋Š” lsb_release -a๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • ์–ธ์ œ๋“ ์ง€ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ •๋ง๋กœ ์žฌ๋ฏธ์žˆ๋Š” ๋ฐ˜์‘์„ ๋ณด์ธ๋‹ค๋ฉด dmesg๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”(์•„๋งˆ๋„ ํ•˜๋“œ์›จ์–ด๋‚˜ ๋“œ๋ผ์ด๋ฒ„์˜ ๋ฌธ์ œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

  • ํŒŒ์ผ์„ ์‚ญ์ œํ–ˆ๋Š”๋ฐ du๋กœ ํ™•์ธํ•ด ์˜ˆ์ƒํ•œ ๋””์Šคํฌ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋ฉด, ํŒŒ์ผ์ด ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธํ•ด๋ณด์„ธ์š”. lsof | grep deleted | grep "filename-of-my-big-file"

One-liners

์ปค๋งจ๋“œ๋“ค์„ ํ•œ๋ฐ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋“ค

  • sort/uniq๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ๊ต์ฐจ์ , ์กฐํ•ฉ, ์ฐจ์ด์ ์„ ํ™•์ธ์ด ํ•„์š”ํ•  ๋•Œ ์ƒ๋‹นํ•œ ๋„์›€์ด ๋  ๊ฒ๋‹ˆ๋‹ค. ๊ฐ€๋ น a์™€ b๊ฐ€ ์œ ์ผํ•œ ๊ฐ’๋“ค๋งŒ์„ ๊ฐ€์ง„ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋ผ ํ•ฉ์‹œ๋‹ค. ์ด๊ฒƒ์ด ์ž„์˜์˜ ํฌ๊ธฐ์ธ ํŒŒ์ผ์„(๊ทธ๊ฒŒ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๋ผ๊ณ  ํ•ด๋„) ๋น ๋ฅด๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Sort๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์— ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค๋งŒ, ๋งŒ์•ฝ ๋ฃจํŠธ ํŒŒํ‹ฐ์…˜์ด ์ž‘์€ ๊ฒฝ์šฐ, /tmp๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด -T์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.) ์œ„์˜ LC_ALL์—๋Œ€ํ•œ ๋‚ด์šฉ์€ sort์˜ -u์˜ต์…˜์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. (์•„๋ž˜ ์˜ˆ์ œ์— ์ง‘์ค‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ƒ๋žต)
      cat a b | sort | uniq > c   # c is a union b
      cat a b | sort | uniq -d > c   # c is a intersect b
      cat a b b | sort | uniq -u > c   # c is set difference a - b
  • grep . *์„ ์‚ฌ์šฉํ•ด์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๋น„์ฃผ์–ผํ•˜๊ฒŒ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.(r๊ฐ ์ค„์€ ํŒŒ์ผ ์ด๋ฆ„๊ณผ ๊ฐ™์ด ๋‚˜์˜ต๋‹ˆ๋‹ค) ์•„๋‹ˆ๋ฉด head -100 *๋ฅผ ์ด์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.(๊ฐ ํŒŒ์ผ์˜ ํ•ด๋”๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ์ด๋Š” /sys, /proc, /etc ๊ฐ™์ด ์„ค์ •๊ฐ’๋“ค๋กœ ๊ฐ€๋“ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ํ…์ŠคํŠธ ํŒŒ์ผ์˜ ์„ธ ๋ฒˆ์งธ ์—ด์˜ ์ˆซ์ž๋“ค์˜ ๋ชจ๋“  ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ฒƒ์€ ์ด๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ณด๋‹ค 3๋ฐฐ ์ •๋„ ๋น ๋ฅด๊ณ , 1/3 ์ •๋„์˜ ๊ธธ์ด๋ฐ–์— ์•ˆ๋ฉ๋‹ˆ๋‹ค.

      awk '{ x += $3 } END { print x }' myfile
  • ํŒŒ์ผ ํŠธ๋ฆฌ์—์„œ ํฌ๊ธฐ์™€ ๋‚ ์งœ๋ฅผ ๋ณด๋ ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•˜์„ธ์š”. ์ด ๋ช…๋ น์–ด๋Š” ls -l์„ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ง€๋งŒ, ls -lR๋ณด๋‹ค ๋” ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
      find . -type f -ls
  • ์›น์„œ๋ฒ„ ๋กœ๊ทธ ๊ฐ™์€ ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  URL ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋‚˜ํƒ€๋‚˜๋Š” acct_id๊ฐ™์€ ํŠน์ • ๊ฐ’์ด ๋ช‡๋ช‡ ํ–‰์— ๋‚˜ํƒ€๋‚œ๋‹ค๊ณ  ํ•ด๋ณด์ฃ . ๊ฐ๊ฐ์˜ acct_id์— ๋Œ€ํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์š”์ฒญ์ด ์žˆ์—ˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ์ฒ˜๋Ÿผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      cat access.log | egrep -o 'acct_id=[0-9]+' | cut -d= -f2 | sort | uniq -c | sort -rn
  • ๋ณ€๊ฒฝ์„ ๊ณ„์† ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด watch๋ฅผ ์ด์šฉํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด watch -d -n 2 'ls -rtlh | tail'๋กœ ํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ ๋ณ€๊ฒฝ์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜, watch -d -n 2 ifconfig๋กœ ์™€์ดํŒŒ์ด ์„ค์ •์„ ๊ณ ์น  ๋•Œ ๋„คํŠธ์›Œํฌ ์„ค์ • ๋ณ€๊ฒฝ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ด ๋ฌธ์„œ์— ์žˆ๋Š” ํŒ ์ค‘ ์ž„์˜์˜ ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋งˆํฌ๋‹ค์šด์„ ํŒŒ์‹ฑํ•˜๊ณ  ํ•ญ๋ชฉ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค).

      function taocl() {
        curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md |
          pandoc -f markdown -t html |
          xmlstarlet fo --html --dropdtd |
          xmlstarlet sel -t -v "(html/body/ul/li[count(p)>0])[$RANDOM mod last()+1]" |
          xmlstarlet unesc | fmt -80
      }

Obscure but useful

  • expr: ์‚ฐ์ˆ ์ ์ด๊ฑฐ๋‚˜ ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์ •๊ทœํ‘œํ˜„์‹์„ ๊ฒ€์ฆํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • m4: ๊ฐ„๋‹จํ•œ ๋ฉ”ํฌ๋กœ ์ˆ˜ํ–‰๊ธฐ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค

  • yes: ์–ด๋– ํ•œ ํ•œ ๋ฌธ์žฅ์„ ๋งค์šฐ ๋งŽ์ด ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค

  • cal: ๊ฐ„๋‹จํ•œ ๋‹ฌ๋ ฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • env: ์–ด๋–ค ํ•œ ์ปค๋งจ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค)

  • printenv: ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค(๋””๋ฒ„๊น…์„ ํ• ๋•Œ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค)

  • look: ์–ด๋–ค ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ์˜๋‹จ์–ด(ํ˜น์€ ํŒŒ์ผ์˜ ์–ด๋–ค ํ•œ ์ค„)์„ ์ฐพ์Šต๋‹ˆ๋‹ค

  • cut , paste, join: ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • fmt: ๋ฌธ๋‹จ์˜ ์„œ์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค

  • pr: ๋ฌธ์„œ์˜ ํŽ˜์ด์ง€๋‚˜ ์ปฌ๋Ÿผ ์„œ์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค

  • fold: ๋ฌธ์„œ์˜ ๊ฐ ๋ผ์ธ๋“ค์„ ํŠน์ •ํ•œ ๊ธธ์ด์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค

  • column: ๋ฌธ์„œ์˜ ์ปฌ๋Ÿผ์ด๋‚˜ ํ…Œ์ด๋ธ”์˜ ์„œ์‹์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค

  • expand, unexpand: ํƒญ์„ ๊ณต๋ฐฑ์œผ๋กœ ๋ฐ”๊พธ์–ด์ฃผ๊ฑฐ๋‚˜ ๊ณต๋ฐฑ์„ ํƒญ์œผ๋กœ ๋ฐ”๊พธ์–ด์ค๋‹ˆ๋‹ค

  • nl: ์ค„ ๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค

  • seq: ์ˆซ์ž๋“ค์„ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • bc: ๊ฐ„๋‹จํ•œ ๊ณ„์‚ฐ๊ธฐ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค

  • factor: ์ •์ˆ˜๋“ค์„ ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • gpg: ํŒŒ์ผ๋“ค์„ ์•”ํ˜ธํ™”ํ•˜๊ณ  ์„œ๋ช…ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • toe: terminfo ์—”ํŠธ๋ฆฌ๋“ค์˜ ํ…Œ์ด๋ธ”(table of terminfo entries)

  • nc: ๋„คํŠธ์›Œํฌ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • socat: ์†Œ์ผ“ ๋ฆด๋ ˆ์ด๋‚˜ TCP ํฌํŠธ๋กœ ๋‚ด์šฉ์„ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(netcat๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค)

  • slurm: ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • dd: ํŒŒ์ผ๋“ค์ด๋‚˜ ๋””๋ฐ”์ด์Šค๋“ค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ธธ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • file: ํŒŒ์ผ์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ์•„๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • tree: ๋””๋ ‰ํ„ฐ๋ฆฌ๋“ค๊ณผ ๊ทธ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งˆ์น˜ ls๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž…๋ ฅํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • stat: ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • time: ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์‹œ๊ฐ„์„ ์žฝ๋‹ˆ๋‹ค

  • timeout: ํŠน์ • ์‹œ๊ฐ„๋งŒํผ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

  • lockfile: rm -f๋กœ๋งŒ ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ์„ธ๋งˆํฌ์–ด ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

  • logrotate: ๋กœ๊ทธ๋ฅผ ๋กœํ…Œ์ดํŠธ, ์••์ถ•, ๋ฉ”์ผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค

  • watch: ๋ช…๋ น์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ์„ ํ•˜์ผ๋ผ์ดํŠธํ•ฉ๋‹ˆ๋‹ค

  • tac: ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์—ญ์ˆœ์œผ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค

  • shuf: ํŒŒ์ผ์˜ ๊ฐ ์ค„๋“ค์„ ์ž„์˜์˜ ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค

  • comm: ์ •๋ ฌ๋œ ํŒŒ์ผ๋“ค์„ ๊ฐ ๋ผ์ธ๋ณ„๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค

  • pv: ํŒŒ์ดํ”„๋ฅผ ํ†ตํ•ด์„œ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • hd and bvi: ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋คํ”„๋ฅผ ์–ป์–ด์˜ค๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • strings: ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋“ค์—์„œ ํŠน์ • ๋ฌธ์žฅ์„ ์ถ”์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • tr: ๋ฌธ์ž๋ฅผ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • iconv or uconv: ๋ฌธ์„œ์˜ ์ธ์ฝ”๋”ฉ๋ฐฉ์‹์„ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • split and csplit: ํŒŒ์ผ๋“ค์„ ์ชผ๊ฐœ๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • sponge: ์“ฐ๊ธฐ ์ „์— ๋ชจ๋“  ์ž…๋ ฅ์„ ์ฝ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ํŒŒ์ผ์—์„œ ์ฝ์€ ํ›„์— ์“ฐ๊ธฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด grep -v something some-file | sponge some-file์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • units: ๋‹จ์œ„๋ฅผ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค ์˜ˆ๋ฅผ๋“ค์–ด furlongs/fortnight ๋‹จ์œ„๋ฅผ twips/blink๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค (/usr/share/units/definitions.units๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”)

  • apg: ๋ Œ๋ค ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

  • xz: ๊ณ ํšจ์œจ์˜ ํŒŒ์ผ ์••์ถ•ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค

  • ldd: ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • nm: ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ๋“ค์— ํฌํ•จ๋œ ์‹ฌ๋ณผ์ •๋ณด๋ฅผ ์–ป์–ด์˜ต๋‹ˆ๋‹ค

  • ab: ์›น ์„œ๋ฒ„๋ฅผ ๋ฒค์น˜ ๋งˆํ‚นํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • strace: ์‹œ์Šคํ…œ ์ฝœ์„ ๋””๋ฒ„๊น…ํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • mtr: ๋„คํŠธ์›Œํฌ ๋””๋ฒ„๊น…์‹œ์— traceroute๋ณด๋‹ค ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค

  • cssh: ์‰˜์„ ๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ ์‚ฌ์šฉํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • rsync: SSH๋ฅผ ์ด์šฉํ•ด ์›๊ฒฉ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด๋‚˜, ๋กœ์ปฌ ํŒŒ์ผ์‹œ์Šคํ…œ์˜ ํŒŒ์ผ๊ณผ ํด๋”๋“ค์„ ๋™๊ธฐํ™” ํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • wireshark, tshark: ํŒจํ‚ท์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋„คํŠธ์›Œํ‚น์„ ๋””๋ฒ„๊น…ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค

  • ngrep: ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ grep๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค

  • host, dig: DNS ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • lsof: ํ”„๋กœ์„ธ์Šค ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ ์†Œ์ผ“์˜ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • dstat: ์œ ์šฉํ•œ ์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • glances: ๋ณด๋‹ค ๊ณ ์ฐจ์›์˜ ์—ฌ๋Ÿฌ ์„œ๋ธŒ์‹œ์Šคํ…œ๋“ค์˜ ์ •๋ณด๋ฅผ ํ•œ๋ฒˆ์— ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • iostat: ๋””์Šคํฌ์˜ ์‚ฌ์šฉ๋Ÿ‰ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • mpstat: CPU ์‚ฌ์šฉ๋Ÿ‰ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • vmstat: ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • htop: ๋ณด๋‹ค ๊ฐœ์„ ๋œ ํ˜•ํƒœ์˜ top์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • last: ๋กœ๊ทธ์ธ ํ–ˆ๋˜ ์ •๋ณด๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • w: ํ˜„์žฌ ๋ˆ„๊ฐ€ ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • id: ํ˜„์žฌ ์œ ์ €๋‚˜ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ์‹๋ณ„ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • sar: ์‹œ์Šคํ…œ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • iftop, nethogs: ์†Œ์ผ“ ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๋ฅผ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • ss: ์†Œ์ผ“์— ๊ด€ํ•œ ํ†ต๊ณ„์ž๋ฃŒ๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • dmesg: ๋ถ€ํŒ… ๋ฉ”์‹œ์ง€์™€ ์‹œ์Šคํ…œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋“ค์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • sysctl: ์‹คํ–‰ ์‹œ์— ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค

  • hdparm: SATA/ATA disk๋“ค์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ทธ๊ฒƒ๋“ค์ด ์ž‘๋™ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค

  • lsblk: ๋ธ”๋ก ๋””๋ฐ”์ด์Šค๋“ค์˜ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค : ์—ฌ๋Ÿฌ๋ถ„์˜ ๋””์Šคํฌ๋“ค์ด๋‚˜ ๋””์ŠคํฌํŒŒํ‹ฐ์…˜๋“ค์„ ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • lshw, lscpu, lspci, lsusb, dmidecode: CPU, BIOS, RAID, graphics, devices ๋“ฑ์˜ ํ•˜๋“œ์›จ์–ด ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค

  • lsmod, modifno: ์ปค๋„ ๋ชจ๋“ˆ์˜ ์ƒ์„ธ์ •๋ณด๋ฅผ ๋ชฉ๋ก์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • fortune, ddate, sl: ์—... ์ฆ๊ธฐ๊ธฐ๊ด€์ฐจ๋ฅผ ์ƒ๊ฐํ•˜๊ณ ์žˆ๊ณ  ๊ทธ๊ฒƒ์„ ์ธ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๊ฒƒ์€ "์œ ์šฉ"ํ•ฉ๋‹ˆ๋‹ค

OS X only

OS X์—์„œ๋งŒ ํ•ด๋‹น๋˜๋Š” ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

  • brew (Homebrew)๋‚˜ port (MacPorts)๋ฅผ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๋งŽ์€ ๋ช…๋ น์–ด๋ฅผ OS X์— ์„ค์น˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • pbcopy๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ช…๋ น์–ด ์ถœ๋ ฅ๋ฌผ์„ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ pbpaste๋ฅผ ์ด์šฉํ•ด ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • OS X ํ„ฐ๋ฏธ๋„์—์„œ ์˜ต์…˜ ํ‚ค๋ฅผ ์•ŒํŠธ ํ‚ค(alt-b, alt-f ๊ฐ™์€ ์œ„์— ๋‚˜์˜จ ๋ช…๋ น)๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Preferences -> Profiles -> Keyboard๋ฅผ ์—ด์–ด "Use Option as Meta key"๋ฅผ ์„ ํƒํ•˜์„ธ์š”.

  • ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŒŒ์ผ์„ ์—ด๊ธฐ์œ„ํ•ด, open ๋˜๋Š” open -a /Applications/Whatever.app์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

  • Spotlight: mdfind๋ฅผ ์ด์šฉํ•ด ํŒŒ์ผ์„ ์ฐพ๊ณ , mdls๋ฅผ ์ด์šฉํ•ด ๋ฉ”ํƒ€๋ฐ์ดํƒ€ (์‚ฌ์ง„ EXIF ์ •๋ณด์™€ ๊ฐ™์€) ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • OS X๋Š” BSD Unix ๊ธฐ๋ฐ˜์ด๋ฉฐ ๋งŽ์€ ๋ช…๋ น์–ด๋“ค์„ (์˜ˆ๋กœ ps, ls, tail, awk, sed) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๊ฒƒ๋“ค์€ Linux ๋ฒ„์ „๋“ค๊ณผ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํฌ๊ฒŒ๋Š” System V-style Unix์™€ GNU ๋„๊ตฌ๋“ค์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋‚ด์šฉ๋“ค์„ man ํŽ˜์ด์ง€ ์ƒ๋‹จ์˜ "BSD General Commands Manual." ๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋”์€ GNU ๋ฒ„์ „์ด ์„ค์น˜๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ๋กœ, GNU awk์™€ sed์ธ gawk์™€ gsed์—์„œ). ๋งŒ์•ฝ ์ด์ข… ํ”Œ๋žซํผ ๊ฐ„ Bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด, ๋™์ผํ•œ ๋ช…๋ น์–ด (์˜ˆ๋กœ, ํŒŒ์ด์ฌ์ด๋‚˜ perl๊ณผ ๊ฐ™์€)๋‚˜ ํ…Œ์ŠคํŠธ์‹œ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • OS X ๋ฆด๋ฆฌ์Šค ์ •๋ณด๋ฅผ ์–ป์œผ์‹œ๋ ค๋ฉด, sw_vers๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

Windows only

Windows์—์„œ๋งŒ ํ•ด๋‹น๋˜๋Š” ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

  • Windows 10์—์„œ๋Š” Bash on Ubuntu on Windows๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์œ ๋‹‰์Šค ์ปค๋งจ๋“œ ๋ผ์ธ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์นœ์ˆ™ํ•œ Bash ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์ ์€, ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ๊ทธ๋žจ์„ Windows์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Bash์—์„œ Windows ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

  • Cygwin๋ฅผ ์„ค์น˜ํ•ด Microsoft Windows์—์„œ ์œ ๋‹‰์Šค ์…ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ์— ๊ธฐ์ˆ ๋œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋™์ž‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • Cygwin์˜ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋กœ ์œ ๋‹‰์Šค ํ”„๋กœ๊ทธ๋žจ์„ ๋” ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ปค๋งจ๋“œ ๋ผ์ธ ์ฐฝ์œผ๋กœ mintty๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

  • Windows์˜ ํด๋ฆฝ๋ณด๋“œ๋ฅผ /dev/clipboard๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • cygstart์„ ์‹คํ–‰ํ•ด ๋“ฑ๋ก๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•ด ์ž„์˜์˜ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Windows ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” regtool๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • C:\\ Windows ๋“œ๋ผ์ด๋ธŒ ๊ฒฝ๋กœ๋Š” Cygwin์—์„œ๋Š” /cygdrive/c๊ฐ€ ๋˜๊ณ , Cygwin์˜ / Windows์—์„œ C:\cygwin๊ฐ€ ๋˜๋Š”๊ฒƒ์„ ์•Œ์•„ ๋‘์„ธ์š”. Cygwin๊ณผ Windows ์Šคํƒ€์ผ์˜ ํŒŒ์ผ ํŒจ์Šค๋Š” cygpath๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Windows ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • You can perform and script most Windows system administration tasks from the command line by learning and using wmic.

  • Windows์—์„œ ์œ ๋‹‰์Šค ๋ฃฉ์—”ํ•„์„ ์–ป๋Š” ๋‹ค๋ฅธ ๋Œ€์•ˆ์€ Cash์ž…๋‹ˆ๋‹ค. ์ด ํ™˜๊ฒฝ์—๋Š” ๋งค์šฐ ์ ์€ ์œ ๋‹‰์Šค ๋ช…๋ น๊ณผ ์ปค๋งจ๋“œ ๋ผ์ธ ์˜ต์…˜๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”.

  • Windows์—์„œ GNU ๊ฐœ๋ฐœ์ž ํˆด(GCC๊ฐ™์€)์„ ์–ป๋Š” ๋‹ค๋ฅธ ๋Œ€์•ˆ์œผ๋กœ MinGW์™€ ๊ฑฐ๊ธฐ์— ํฌํ•จ๋œ MSYS ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” bash, gawk, make, grep๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. MSYS๋Š” Cygwin์— ๋น„๊ตํ•˜๋ฉด ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์—†์Šต๋‹ˆ๋‹ค. MinGW๋Š” ์œ ๋‹‰์Šค ํˆด์„ ๋„ค์ดํ‹ฐ๋ธŒ Windows๋กœ ํฌํŒ…ํ•  ๋•Œ ๋ถ€๋ถ„์ ์œผ๋กœ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

More resources

  • awesome-shell: ์…ธ์— ๋Œ€ํ•œ ํˆด๊ณผ ๋ฆฌ์†Œ์Šค๋“ค์ด ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
  • awesome-osx-command-line: OS X ์ปค๋งจ๋“œ ๋ผ์ธ์— ๊ด€ํ•ด ๋” ๊นŠ์ด ์•Œ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ด๋“œ ์ž…๋‹ˆ๋‹ค.
  • Strict mode: ๋ณด๋‹ค ๋‚˜์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๊ธ€์ž…๋‹ˆ๋‹ค.
  • shellcheck: ์…ธ ์Šคํฌ๋ฆฝํŠธ ์ •์  ๋ถ„์„ ๋„๊ตฌ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, bash/sh/zsh์— ๋Œ€ํ•œ ๋ฆฐํŠธ์ž…๋‹ˆ๋‹ค.
  • Filenames and Pathnames in Shell: ์…ธ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฒ•์„ ๋‹ค๋ฃจ๋Š” ์Šฌํ”„๋„๋ก ๋ณต์žกํ•œ ๋ฏธ๋‹ˆ์ธ„์–ด์ž…๋‹ˆ๋‹ค.
  • Data Science at the Command Line: ๊ฐ™์€ ์ด๋ฆ„์˜ ์ฑ…์—์„œ ๋‚˜์˜จ, ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธ์Šค๋ฅผ ์œ„ํ•œ ๋” ๋‚˜์€ ๋ช…๋ น๊ณผ ๋„๊ตฌ๋“ค ์ž…๋‹ˆ๋‹ค.

Disclaimer

๋งค์šฐ ์ž‘์€ ์ž‘์—…์„ ์ œ์™ธํ•œ ์ฝ”๋“œ๋“ค์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ํฐ ํž˜์—๋Š” ์ฑ…์ž„์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. Bash์—์„œ ๋ญ”๊ฐ€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ Bash๋กœ ํ•ด์•ผ ๋œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค! ;)

License

Creative Commons License

์ด ์ €์ž‘๋ฌผ์€ Creative Commons Attribution-ShareAlike 4.0 International License์— ๋”ฐ๋ผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.