598 lines
48 KiB
Markdown
598 lines
48 KiB
Markdown
๐
|
|
*[ฤeลกtina](README-cs.md) โ [Deutsch](README-de.md) โ [ฮฮปฮปฮทฮฝฮนฮบฮฌ](README-el.md) โ [English](README.md) โ [Espaรฑol](README-es.md) โ [Franรงais](README-fr.md) โ [Indonesia](README-id.md) โ [Italiano](README-it.md) โ [ๆฅๆฌ่ช](README-ja.md) โ [ํ๊ตญ์ด](README-ko.md) โ [Portuguรชs](README-pt.md) โ [Romรขnฤ](README-ro.md) โ [ะ ัััะบะธะน](README-ru.md) โ [Slovenลกฤina](README-sl.md) โ [ะฃะบัะฐัะฝััะบะฐ](README-uk.md) โ [็ฎไฝไธญๆ](README-zh.md) โ [็น้ซไธญๆ](README-zh-Hant.md)*
|
|
|
|
|
|
# The Art of Command Line
|
|
|
|
[![Ask a Question](https://img.shields.io/badge/%3f-Ask%20a%20Question-ff69b4.svg)](https://airtable.com/shrzMhx00YiIVAWJg)
|
|
|
|
[![Join the chat at https://gitter.im/jlevy/the-art-of-command-line](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
|
|
|
|
- [Meta](#meta)
|
|
- [Basics](#basics)
|
|
- [Everyday use](#everyday-use)
|
|
- [Processing files and data](#processing-files-and-data)
|
|
- [System debugging](#system-debugging)
|
|
- [One-liners](#one-liners)
|
|
- [Obscure but useful](#obscure-but-useful)
|
|
- [OS X only](#os-x-only)
|
|
- [Windows only](#windows-only)
|
|
- [More resources](#more-resources)
|
|
- [Disclaimer](#disclaimer)
|
|
|
|
|
|
![curl -s 'https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md' | egrep -o '`\w+`' | tr -d '`' | cowsay -W50](cowsay.png)
|
|
|
|
์ปค๋งจ๋ ๋ผ์ธ์ ๋ฅ์ํ๊ฒ ๋ค๋ฃจ๋ ๊ฒ์ ๋์ธ์๋๊ฑฐ๋ ์ ๋น์ค๋ฝ๊ฒ ์ฌ๊ฒจ์ง๋๋ค. ํ์ง๋ง ์ปค๋งจ๋ ๋ผ์ธ์ ๋ช
๋ฐฑํ๊ณ ๋ ๋ฏธ๋ฌํ ๋ฐฉ๋ฒ์ผ๋ก ์์ง๋์ด๊ฐ ํ๋ ์์
์ ์ ์ฐ์ฑ๊ณผ ์์ฐ์ฑ์ ํฅ์์ํต๋๋ค. ์ด ๋ฌธ์๋ ๋ฆฌ๋
์ค์์ ์์
์ ํ๋ฉด์ ์ฐพ์ ๋
ธํธ์ ํ๋ค์ ๋ชจ์์
๋๋ค. ๋ช ๊ฐ์ง๋ ๊ธฐ์ด์ ์ด๊ณ , ๋ช ๊ฐ์ง๋ ์๋นํ ๊ตฌ์ฒด์ ์ด๋ฉฐ, ์ธ๋ จ๋๊ณ , ์ ์๋ ค์ง์ง ์์ ๊ฒ์
๋๋ค. ์ด ๋ฌธ์๋ ๊ทธ๋ฆฌ ๊ธธ์ง ์์ง๋ง, ์ฌ๊ธฐ ์๋ ๋ชจ๋ ๊ฒ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๊ณ , ๊ธฐ์ตํด๋ผ ์ ์๊ฒ ๋๋ค๋ฉด, ๋ง์ ๊ฒ์ ์๊ฒ ๋๋ ๊ฒ์
๋๋ค.
|
|
|
|
์ด ๋ฌธ์๋ [๋ง์ ์๊ฐ์ ๋ฒ์ญ๊ฐ](AUTHORS.md)๊ฐ ์ฐธ์ฌํ์ต๋๋ค.
|
|
์ฌ๊ธฐ ์ค ์ผ๋ถ ๊ฒ์
|
|
[์๋](http://www.quora.com/What-are-some-lesser-known-but-useful-Unix-commands)
|
|
[Quora์](http://www.quora.com/What-are-the-most-useful-Swiss-army-knife-one-liners-on-Unix)
|
|
[์ฌ๋ผ์จ](http://www.quora.com/What-are-some-time-saving-tips-that-every-Linux-user-should-know) ๊ฒ์
๋๋ค.
|
|
ํ์ง๋ง ๊ฑฐ๊ธฐ์ ๊ด์ฌ์ ๊ฐ์ง๊ธฐ๋ณด๋ค, Github๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ๋ ๊ฐ์น ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ์ฌ๊ธฐ์ ๋ ์ฌ๋ฅ ์๋ ์ฌ๋๋ค์ด ์์ฝ๊ฒ ๊ฐ์ ์์ ์ ์ํ ์ ์๋ ๊ณณ์ด์ฃ .
|
|
์ปค๋งจ๋๋ผ์ธ์ ๊ดํ ์ง๋ฌธ์ด ์์ผ๋ฉด [**์ง๋ฌธํด ์ฃผ์ธ์**.](https://airtable.com/shrzMhx00YiIVAWJg) ์ค๋ฅ๊ฐ ์๊ฑฐ๋, ๋ ๋์์ง ์ ์๋ ๋ด์ฉ์ด ๋ณด์ธ๋ค๋ฉด, [**๊ธฐ์ฌํด ์ฃผ์ธ์**!](/CONTRIBUTING.md)
|
|
|
|
## Meta
|
|
|
|
๋ฒ์:
|
|
|
|
- ์ด ๊ฐ์ด๋๋ ์ด๋ณด์์ ๊ฒฝํ์ ๋ชจ๋๋ฅผ ์ํ ๊ฒ ์
๋๋ค. ๋ชฉํ๋ ๋ฒ์(์ ๋ถ ๋ค ์ค์ํฉ๋๋ค!), ๊ตฌ์ฒด์ฑ(๋๋ถ๋ถ์ ์ผ๋ฐ์ ์ธ ์ผ์ด์ค์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์์ ), ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฒฐํจ(์ฝ๊ฒ ๋ง์ฃผ์น์ง ์๋, ์ค์ํ์ง ์๊ณ , ์ง์ฝ์ ์ธ ๊ฒ์ ํผํจ)์
๋๋ค. ๋ชจ๋ ํ์ ํน์ ์ํฉ์์ ๋งค์ฐ ์ค์ํ๊ฑฐ๋, ์ฌ๋ฌ ๋์๋ค ์ฌ์ด์์์ ์๊ฐ์ ํ์ฐํ๊ฒ ์ ์ฝํฉ๋๋ค.
|
|
- ์ด ๋ฌธ์๋ ๋ฆฌ๋
์ค๋ฅผ ์ํ๊ฒ์
๋๋ค. "[OS X only](#os-x-only)", "[Windows only](#windows-only)" ์น์
์ ์ ์ธํ๊ณ ๋ง์ด์ฃ . ๊ทธ ๋ฐ์ ๋๋ถ๋ถ์ ์ ๋์ค, OS X(์ฌ์ง์ด Cygwin)์์๋ ์ ์ฉํ๊ฑฐ๋ ์ค์นํ ์ ์์ต๋๋ค.
|
|
- ์ธํฐ๋ํฐ๋ธ Bash์ ์ด์ ์ด ๋ง์ถ์ด์ ธ์์ต๋๋ค๋ง, ๋๋ถ๋ถ์ ํ์ ๋ค๋ฅธ ์์ด๋, general Bash ์คํฌ๋ฆฝํธ์์๋ ๋์ํฉ๋๋ค.
|
|
- ์ด ๋ฌธ์๋ "ํ์ค" ์ ๋์ค ์ปค๋งจ๋์ ํน์ ํจํค์ง ์ค์น๋ฅผ ํ์๋ก ํ๋ ๊ฒ ๋ ๋ค ํฌํจํ๊ณ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ค๋ฃจ๋ ํ์ค ์ปค๋งจ๋์ ํน์ ํจํค์ง์ ๋ํ ๊ฒ์ ํฌํจ๋ ๋งํผ ์ถฉ๋ถํ ์ค์ํฉ๋๋ค.
|
|
|
|
๋
ธํธ:
|
|
|
|
- ์ด ๋ฌธ์๋ฅผ ํ ํ์ผ๋ก ์ ์งํ๊ธฐ ์ํด์, ์ฝํ
์ธ ๋ค์ ์์์ ์ธ ๋ ํผ๋ฐ์ค ํํ๋ก ํฌํจ๋์ด์์ต๋๋ค. ํ ๊ฐ๋
์ด๋ ๋ช
๋ น์ด์ ๋ํด ์๊ฒ ๋ ํ์, ๊ตฌ๊ธ์์ ๊ทธ์ ๋ํ ์ข ๋ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ ๋งํผ ๋น์ ์ ๋๋ํ ๊ฒ์
๋๋ค. `apt-get`, `yum`, `dnf`, `pacman`, `pip`, `brew` (ํน์ ์ ์ ํ ๋ค๋ฅธ ๊ฒ)์ ์ด์ฉํด ์ ํ๋ก๊ทธ๋จ์ ์ค์นํ์ธ์.
|
|
- [Explainshell](http://explainshell.com/)์ ์ด์ฉํด์ ๊ฐ๊ฐ์ ์ปค๋งจ๋, ์ต์
, ํ์ดํ๋ ๊ทธ ์ธ ๋ฑ๋ฑ์ด ์ด๋ค ๊ฒ์ธ์ง ์์๋ณด์ญ์์ค.
|
|
|
|
|
|
## 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{}`๋ ํธ๋ฆฌํฉ๋๋ค. ์์:
|
|
```bash
|
|
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`์ ์ ์ฅํ๊ณ , [๊ทธ๊ฒ์ ์ฐธ์กฐํ๋ ๋ก๊ทธ์ธ ์
ธ์ ๊ณ ์ณ๋ณด์ธ์](http://superuser.com/a/183980/7106). ์ด๋ ๊ฒ ํ๋ฉด ์ค์ ์ ๋ชจ๋ ์
ธ ์ธ์
์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
|
|
|
|
- ํ๊ฒฝ ๋ณ์ ์ค์ ์ด๋ ๋ก๊ทธ์ธํ ๋ ์คํํด์ผ ํ ๋ช
๋ น์ `~/.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`๋ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ์คํฌ๋ฆฝํธ๋ฅผ ์์ํ๋ ์ต๊ด์ ์ ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด, ์ผ๋ฐ์ ์ธ ์๋ฌ๋ฅผ ์ฐพ๊ณ ์ค๋จํ๊ณ , ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํด ์ค๋๋ค.
|
|
```bash
|
|
set -euo pipefail
|
|
trap "echo 'error: Script failed: see failed command above'" ERR
|
|
```
|
|
|
|
- Bash ์คํฌ๋ฆฝํธ์์ (๊ดํธ๋ก ๋๋ฌ์ธ์ฌ ์์ฑ๋) ์๋ธ ์
ธ์ ์ปค๋งจ๋๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์
๋๋ค. ์ผ๋ฐ์ ์ธ ์๋ก, ์์๋ก ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ์ฌ ์์
ํ๋ ๊ฒ์ด ์์ต๋๋ค.
|
|
```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`๋ฅผ ๋ฆฌ๋ชจํธ์ ๊ฒ๊ณผ ๋น๊ตํ๋ ค๋ฉด ๋ค์์ฒ๋ผ ํ๋ฉด ๋ฉ๋๋ค.
|
|
```bash
|
|
diff /etc/hosts <(ssh somehost cat /etc/hosts)
|
|
```
|
|
|
|
- ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๋๊ดํธ ์์ ๋ฃ์ ์ ์์ต๋๋ค. ๋ซ๋ ๊ดํธ๊ฐ ์์ผ๋ฉด ์คํฌ๋ฆฝํธ๋ ๊ตฌ๋ฌธ ์๋ฌ๊ฐ ๋์ด ์คํ์ด ๋ฐฉ์ง๋ฉ๋๋ค. ์ด๋ ์คํฌ๋ฆฝํธ๊ฐ ์น์ผ๋ก๋ถํฐ ๋ค์ด๋ก๋ํ ์์ ์ด๋ผ ํ ๋ ๋์ค๊น์ง๋ง ๋ค์ด๋ก๋๋ ํ์ผ์ด ์คํ ๋๋ ๊ฑธ ์๋ฐฉํด ์ค๋๋ค.
|
|
```sh
|
|
{
|
|
# ์ฌ๊ธฐ์ ์ฝ๋๋ฅผ ๋ฃ์ผ์ธ์
|
|
}
|
|
```
|
|
|
|
- `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`](https://tmux.github.io/)๋ฅผ ์ด์ฉํด์ ํ๋ฉด์ ๋ค์ค ๋ถํ ํ ์ ์์ต๋๋ค. ํนํ ๋ฆฌ๋ชจํธ ssh ์ธ์
์ ๋ผ์ด๋ด๊ณ (detach) ๋ค์ ๋ถ์ด๋๋ฐ(re-attach) ์ ์ฉํฉ๋๋ค. `byobu`์ ์คํฌ๋ฆฐ์ด๋ tmux๋ณด๋ค ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ด๋ฆฌ๋ฅผ ํธํฉ๋๋ค. ์ธ์
์ ์๊ตฌํ ์ ์งํ๋ ์ต์ํ์ ๋์์ ์ค์ง [`dtach`](https://github.com/bogner/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`](https://mosh.mit.edu/)๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์. ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ๊ธธ์ ํธ๋ฆฌํจ์ด ๋ํด์ง๋๋ค.(์๋ฒ ์ฌ์ด๋ ์ค์ ํ์)
|
|
|
|
- ์์คํ
์ค์ ์ ์ ์ฉํ์ง๋ง `ls`๋ก ์ป์ ์ ์๊ณ ์ฝ๊ฒ ์๋ง์ด ๋๊ธฐ ์ฌ์ด ํ์ผ์ ๊ถํ์ 8์ง๋ฒ ํํ๋ก ์ป์ผ๋ ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
```sh
|
|
stat -c '%A %a %n' /etc/timezone
|
|
```
|
|
|
|
- ๋ค๋ฅธ ์ปค๋งจ๋์ ์ถ๋ ฅ๊ณผ ์ํธ์์ฉํ๋ฉด์ ๊ฐ์ ์ ํํ๋ ค๋ฉด [`percol`](https://github.com/mooz/percol)์ด๋ [`fzf`](https://github.com/junegunn/fzf)๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- ๋ค๋ฅธ ์ปค๋งจ๋(์๋ฅผ ๋ค๋ฉด `git`)์ ์ถ๋ ฅ์ผ๋ก ํ์ผ๊ณผ ์ํธ์์ฉํ๋ ค๋ฉด, `fpp` ([PathPicker](https://github.com/facebook/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 ์ ํ](https://wiki.debian.org/CommonErrorMessages/ArgumentListTooLong)์ ์์ ๋์ธ์. "Argument list too long" ์๋ฌ๋ ๋ง์ ํ์ผ์ ์์ผ๋์นด๋ ๋งค์นญํ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ผ์ด๋ฉ๋๋ค. (์ด๋ฐ ์ผ์ด ์ผ์ด๋ฌ์ ๋์๋ `find`, `xargs`๊ฐ์ ๊ฒ์ด ๋์ ๋ฉ๋๋ค.)
|
|
|
|
- ๋จ์ํ ๊ณ์ฐ์๋(๋ฌผ๋ก ์ผ๋ฐ์ ์ผ๋ก๋ Python์ ์ ๊ทผํ๊ธฐ ์ํด) `python` ์ธํฐํ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ธ์. ์๋ฅผ ๋ค์ด ์ด๋ ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
|
|
```
|
|
>>> 2+3
|
|
5
|
|
```
|
|
|
|
|
|
## Processing files and data
|
|
|
|
- ํ์ฌ ๋๋ ํฐ๋ฆฌ์์ ํ์ผ์ ์ด๋ฆ์ผ๋ก ์ฐพ์ผ๋ ค๋ฉด `find . -iname '*something*'` (๋๋ ๋น์ทํ๊ฒ)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ๊ณณ์ ์๋ ํ์ผ์ ์ด๋ฆ์ผ๋ก ์ฐพ์ผ๋ ค๋ฉด `locate something`์ ์ฌ์ฉํ์ธ์(ํ์ง๋ง ์ธ๋ด๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค. `updatedb`๊ฐ ์ต๊ทผ์ ์์ฑ๋ ํ์ผ์ ์ธ๋ฑ์ฑํ์ง ์์์ ์ ์์ต๋๋ค).
|
|
|
|
- ์์ค๋ ๋ฐ์ดํฐ ํ์ผ๋ค์์ ์ผ๋ฐ์ ์ธ ๊ฒ์์ ํ ๋๋(`grep -r`๋ณด๋ค ๋ ๋ณต์กํ ๋), [`ag`](https://github.com/ggreer/the_silver_searcher)๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- HTML์ ํ
์คํธ๋ก ๋ณํํ ๋๋ `lynx -dump -stdin`๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- ๋งํฌ๋ค์ด, HTML, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ข
๋ฅ์ ๋ฌธ์ ๋ณํ์๋ [`pandoc`](http://pandoc.org/)์ ์๋ํด๋ณด์ธ์.
|
|
|
|
- XML์ ๋ฐ๋์ ๋ค๋ค์ผํ๋ค๋ฉด, `xmlstarlet`์ ์ฌ์ฉํ์ธ์. ์ค๋๋์์ง๋ง ์ข์ต๋๋ค.
|
|
|
|
- JSON์๋ [`jq`](http://stedolan.github.io/jq/)๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- YAML์๋ [`shyaml`](https://github.com/0k/shyaml)๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- Excel์ด๋ CSVํ์ผ์๋ [csvkit](https://github.com/onyxfish/csvkit)๊ฐ `in2csv`, `csvcut`, `csvjoin`, `csvgrep`์ธ ๋ค๋ฅธ ๋๊ตฌ๋ค์ ์ ๊ณตํฉ๋๋ค.
|
|
|
|
- Amazon S3๋ฅผ ๋ค๋ฃฐ ๋๋ [`s3cmd`](https://github.com/s3tools/s3cmd)๊ฐ ํธ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ [`s4cmd`](https://github.com/bloomreach/s4cmd)๋ ๋น ๋ฆ
๋๋ค. Amazon์ [`aws`](https://github.com/aws/aws-cli)๋ ๋ค๋ฅธ 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`](https://www.gnu.org/software/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 ์ ๋์ ๊ธธ์ด๋ฐ์ ์๋ฉ๋๋ค.
|
|
|
|
- ์ฌ๋ฌ ํ์ผ ์์ ๋ฌธ์์ด์ ๋ฐ๊พธ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ธ์.
|
|
```sh
|
|
perl -pi.bak -e 's/old-string/new-string/g' my-files-*.txt
|
|
```
|
|
|
|
- ์ฌ๋ฌ ํ์ผ์ ์ด๋ฆ์ ๋ฐ๊พธ๊ฑฐ๋ ๊ฒ์ํ๊ฑฐ๋ ๋ฌธ์์ด์ ๋ฐ๊ฟ ๋์๋ [`repren`](https://github.com/jlevy/repren)๋ฅผ ์จ๋ณด์ธ์. (์ด๋ค ๊ฒฝ์ฐ์๋ `rename` ๋ช
๋ น์ ์ฌ์ฉํด์ ์ฌ๋ฌ ํ์ผ์ ์ด๋ฆ์ ๋ฐ๊ฟ ์๋ ์์ต๋๋ค. ํ์ง๋ง, ๋ชจ๋ ๋ฆฌ๋
์ค ๋ฐฐํฌํ์์ ๊ฐ์ ๋์์ ํ์ง ์๋ ๊ฒ์ ์ฃผ์ํ์ธ์.)
|
|
```sh
|
|
# ํ์ผ ์ด๋ฆ, ๋๋ ํฐ, ์ปจํ
์ธ ๋ชจ๋ 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`๋ฅผ ์ฌ์ฉํ๋ฉด ์ฒ์๋ถํฐ ์ ์กํ๋ ๋์ ์ค๋จ๋ ์ง์ ๋ถํฐ ์ฌ์ ์กํ ์ ์์ต๋๋ค. ๋ ๋ง์ ์์ ํ์ผ์ ์ญ์ ํ๋ [๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ](https://web.archive.org/web/20130929001850/http://linuxnote.net/jianingy/en/linux/a-fast-way-to-remove-huge-number-of-files.html)์ด๊ธฐ๋ ํฉ๋๋ค.
|
|
```sh
|
|
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`๋ ๋ช ๊ฐ์ง ๋ณต์กํ ์ ๋์ฝ๋๋ฅผ ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ฌธ์ํํ๊ณ ๋ชจ๋ ์
์ผํธ๋ฅผ ์ ๊ฑฐํ๋(ํ์ฅํ๊ณ , ๋จ์ดํธ๋ฆฌ๋ ๊ฒ์ ์ด์ฉํด์) ์ปค๋งจ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
|
|
```sh
|
|
uconv -f utf-8 -t utf-8 -x '::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] >; ::Any-NFC; ' < input.txt > output.txt
|
|
```
|
|
|
|
- ํ์ผ์ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋๋๋ ค๋ฉด `split`(ํ์ผ์ ์ฌ์ด์ฆ๋ก ๋๋)์ด๋ `csplit`(ํ์ผ์ ํจํด์ผ๋ก ๋๋)์ ๋ณด์ธ์.
|
|
|
|
- ๋ ์ง ์๊ฐ ํํ์์ ์ ์ดํ๋ ค๋ฉด [`dateutils`](http://www.fresse.org/dateutils/)์ `dateadd`, `datediff`, `strptime`๋ฑ์ ์ฌ์ฉํ์ธ์.
|
|
|
|
- `zless`, `zmore`, `zcat` ๊ทธ๋ฆฌ๊ณ `zgrep`์ ์ด์ฉํด์ ์์ถ๋ ํ์ผ์ ๋ํด ์์
ํ์ธ์.
|
|
|
|
- ํ์ผ ์์ฑ์ `chattr`๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ ํ์ผ ๊ถํ์ ๋ํ ์ ๋ ๋ฒจ ๋์์
๋๋ค. ์๋ฅผ ๋ค์ด `sudo chattr +i /critical/directory/or/file`๋ก ๋ถ๋ณ ํ๋๊ทธ๋ฅผ ๋ถ์ฌ ์ค์๋ก ํ์ผ์ ์ง์ฐ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
|
|
|
|
- `getfacl`, `setfacl`๋ฅผ ์ฌ์ฉํด ํ์ผ ๊ถํ์ ์ ์ฅํ๊ณ ๋ณต์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,
|
|
```sh
|
|
getfacl -R /some/path > permissions.txt
|
|
setfacl --restore=permissions.txt
|
|
```
|
|
|
|
## System debugging
|
|
|
|
- ์น ๋๋ฒ๊น
์ ์ํด์๋ `curl` ์ `curl -I` ๊ฐ ๋์์ด ๋๊ณ , `wget`๋ ๊ฝค ๋์์ด ๋ฉ๋๋ค. ๊ทธ ์ธ์ ๋ณด๋ค ํ๋์ ์ธ ๋ฐฉ์์ผ๋ก๋ [`httpie`](https://github.com/jakubroztocil/httpie)์ด ์์ต๋๋ค.
|
|
|
|
- cpu/๋์คํฌ์ ์ํ๋ฅผ ์๊ธฐ ์ํด์๋ `top` (ํน์ ๋ ๋์ ๋ช
๋ น์ด์ธ `htop`), `iostat`, `iotop`์ ์ฌ์ฉํ์ธ์. `iostat -mxz 15`๋ฅผ ์ฌ์ฉํด ๊ธฐ๋ณธ CPU์ ํํฐ์
๋์คํฌ๋ณ ์ ๋ณด์ ์ฑ๋ฅ ์ ๋ณด๋ฅผ ์ ์ ์์ต๋๋ค.
|
|
|
|
- ๋คํธ์ํฌ ์ํ๋ฅผ ์์ธํ ์๋ ค๋ฉด `netstat`, `ss`๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- ์์คํ
์ ์ด๋ค ์ผ์ด ์ผ์ด๋ฌ๋์ง ๋ณด๋ ค๋ฉด `dstat`๊ฐ ํนํ ์ ์ฉํฉ๋๋ค. ๋ณด๋ค ์์คํ
์ ์ฌ์ธต์ ์ธ ๋ฉด๋ค์ ๋ณด๋ ค๋ฉด [`glances`](https://github.com/nicolargo/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](https://github.com/aragozin/jvm-tools)์ ๋ ๊ณ ๊ธ ์ ๋ณด๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
|
|
|
|
- ๋คํธ์ํฌ ์ด์๋ค์ ์์๋ณด๊ธฐ ์ํด์๋ traceroute๋ฅผ ์ฌ์ฉํ ์๋ ์์ง๋ง ๋ ์ข์ [`mtr`](http://www.bitwizard.nl/mtr/)๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- ๋์คํฌ๊ฐ ์ ๊ฐ๋ ์ฐผ๋์ง ์์๋ณด๊ธฐ ์ํด์ [`ncdu`](https://dev.yorhel.nl/ncdu)๋ฅผ ์ฌ์ฉํด๋ณด์ธ์. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ `du -sh *`์ ๊ฐ์ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
|
|
|
|
- ์ด๋ ํ ์์ผ์ด๋ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ๋์ญํญ(bandwidth)๋ฅผ ์ฐพ์๋ณด๋ ค๋ฉด [`iftop`](http://www.ex-parrot.com/~pdw/iftop/)๋ [`nethogs`](https://github.com/raboof/nethogs)๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- `ab`๋ผ๋ ํด(Apache์ ๋ธ๋ ค์๋)์ ์ ์ํ๊ณ ๊ฐ๋จํ๊ฒ(quick-and-dirty) ์น์๋ฒ์ ์ฑ๋ฅ์ ์ฒดํฌํ๋๋ฐ ์ ์ฉํฉ๋๋ค. ๋ณด๋ค ๋ณต์กํ ๋ถํ ํ
์คํธ๋ฅผ ํ ๋๋ `siege`๋ฅผ ์ฌ์ฉํด๋ณด์ธ์.
|
|
|
|
- ๋ณด๋ค ์ฌ๊ฐํ ๊ฒฝ์ฐ์ ๋คํธ์ํฌ ๋๋ฒ๊น
์ ์ํด์๋ [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html), [`ngrep`](http://ngrep.sourceforge.net/)๋ฅผ ์ฌ์ฉํ์ธ์.
|
|
|
|
- `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`](http://sebastien.godard.pagesperso-orange.fr/)๊ฐ ๋งค์ฐ ์ ์ฉํ ๊ฒ์
๋๋ค. ์ด ์ปค๋งจ๋๋ CPU, memory, network ๋ฑ์ ํต๊ณ ๋ด์ญ์ ๋ณด์ฌ์ค๋๋ค.
|
|
|
|
- ์์คํ
์ ๋ณด๋ค ๊น์ ๊ณณ์ ๋ณด๊ฑฐ๋ ํผํฌ๋จผ์ค๋ฅผ ๋ถ์ํ๊ธฐ ์ํด์๋, `stap` ([SystemTap](https://sourceware.org/systemtap/wiki)), [`perf`](http://en.wikipedia.org/wiki/Perf_(Linux)), [`sysdig`](https://github.com/draios/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`์ต์
์ ํ์ธํ์ญ์์ค. (์๋ ์์ ์ ์ง์คํ๊ธฐ ์ํด์ ์๋ต)
|
|
```sh
|
|
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 ์ ๋์ ๊ธธ์ด๋ฐ์ ์๋ฉ๋๋ค.
|
|
```sh
|
|
awk '{ x += $3 } END { print x }' myfile
|
|
```
|
|
|
|
- ํ์ผ ํธ๋ฆฌ์์ ํฌ๊ธฐ์ ๋ ์ง๋ฅผ ๋ณด๋ ค๋ฉด ์ด๋ ๊ฒ ํ์ธ์. ์ด ๋ช
๋ น์ด๋ `ls -l`์ ์ฌ๊ท์ ์ผ๋ก ์ํํ๋ ๊ฒ๊ณผ ๊ฐ์ง๋ง, `ls -lR`๋ณด๋ค ๋ ์ฝ๊ธฐ ์ฝ์ต๋๋ค.
|
|
```sh
|
|
find . -type f -ls
|
|
```
|
|
|
|
- ์น์๋ฒ ๋ก๊ทธ ๊ฐ์ ํ
์คํธ ํ์ผ์ด ์๋ค๊ณ ํฉ์๋ค. ๊ทธ๋ฆฌ๊ณ URL ํ๋ผ๋ฏธํฐ์ ๋ํ๋๋ `acct_id`๊ฐ์ ํน์ ๊ฐ์ด ๋ช๋ช ํ์ ๋ํ๋๋ค๊ณ ํด๋ณด์ฃ . ๊ฐ๊ฐ์ `acct_id`์ ๋ํด ์ผ๋ง๋ ๋ง์ ์์ฒญ์ด ์์๋์ง ์๊ณ ์ถ๋ค๋ฉด ๋ค์์ฒ๋ผ ํ ์ ์์ต๋๋ค.
|
|
```sh
|
|
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`๋ก ์์ดํ์ด ์ค์ ์ ๊ณ ์น ๋ ๋คํธ์ํฌ ์ค์ ๋ณ๊ฒฝ์ ํ์ธํ ์ ์์ต๋๋ค.
|
|
|
|
- ๋ค์ ํจ์๋ฅผ ์คํํ๋ฉด ์ด ๋ฌธ์์ ์๋ ํ ์ค ์์์ ๊ฒ์ ์ป์ ์ ์์ต๋๋ค(๋งํฌ๋ค์ด์ ํ์ฑํ๊ณ ํญ๋ชฉ์ ์ถ์ถํฉ๋๋ค).
|
|
```sh
|
|
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`](https://gnupg.org/): ํ์ผ๋ค์ ์ํธํํ๊ณ ์๋ช
ํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค
|
|
|
|
- `toe`: terminfo ์ํธ๋ฆฌ๋ค์ ํ
์ด๋ธ(table of terminfo entries)
|
|
|
|
- `nc`: ๋คํธ์ํฌ๋ฅผ ๋๋ฒ๊น
ํ๊ฑฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉํฉ๋๋ค
|
|
|
|
- `socat`: ์์ผ ๋ฆด๋ ์ด๋ TCP ํฌํธ๋ก ๋ด์ฉ์ ์ ๋ฌํ ๋ ์ฌ์ฉํฉ๋๋ค(`netcat`๊ณผ ๋น์ทํฉ๋๋ค)
|
|
|
|
- [`slurm`](https://github.com/mattthias/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`](http://www.bitwizard.nl/mtr/): ๋คํธ์ํฌ ๋๋ฒ๊น
์์ traceroute๋ณด๋ค ๋ ๋ซ์ต๋๋ค
|
|
|
|
- `cssh`: ์์ ๋์์ ์ฌ๋ฌ๊ฐ ์ฌ์ฉํ ๋ ์ฌ์ฉํฉ๋๋ค
|
|
|
|
- `rsync`: SSH๋ฅผ ์ด์ฉํด ์๊ฒฉ ํ์ผ ์์คํ
์ด๋, ๋ก์ปฌ ํ์ผ์์คํ
์ ํ์ผ๊ณผ ํด๋๋ค์ ๋๊ธฐํ ํ ๋ ์ฌ์ฉํฉ๋๋ค
|
|
|
|
- [`wireshark`](https://wireshark.org/), [`tshark`](https://www.wireshark.org/docs/wsug_html_chunked/AppToolstshark.html): ํจํท์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ฉฐ ๋คํธ์ํน์ ๋๋ฒ๊น
ํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค
|
|
|
|
- [`ngrep`](http://ngrep.sourceforge.net/): ๋คํธ์ํฌ ํ๊ฒฝ์์ grep๊ณผ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค
|
|
|
|
- `host`, `dig`: DNS ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- `lsof`: ํ๋ก์ธ์ค ํ์ผ ๋์คํฌ๋ฆฝํฐ์ ์์ผ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- `dstat`: ์ ์ฉํ ์์คํ
์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- [`glances`](https://github.com/nicolargo/glances): ๋ณด๋ค ๊ณ ์ฐจ์์ ์ฌ๋ฌ ์๋ธ์์คํ
๋ค์ ์ ๋ณด๋ฅผ ํ๋ฒ์ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- `iostat`: ๋์คํฌ์ ์ฌ์ฉ๋ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- `mpstat`: CPU ์ฌ์ฉ๋ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
|
|
|
|
- `vmstat`: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
|
|
|
|
- `htop`: ๋ณด๋ค ๊ฐ์ ๋ ํํ์ top์ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- `last`: ๋ก๊ทธ์ธ ํ๋ ์ ๋ณด๋ค์ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- `w`: ํ์ฌ ๋๊ฐ ๋ก๊ทธ์ธํ๋์ง ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- `id`: ํ์ฌ ์ ์ ๋ ๊ทธ๋ฃน์ ๋ํ ์๋ณ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- [`sar`](http://sebastien.godard.pagesperso-orange.fr/): ์์คํ
์ํ์ ๋ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค
|
|
|
|
- [`iftop`](http://www.ex-parrot.com/~pdw/iftop/), [`nethogs`](https://github.com/raboof/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](https://msdn.microsoft.com/commandline/wsl/about)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ์ ๋์ค ์ปค๋งจ๋ ๋ผ์ธ ๋๊ตฌ์ ํจ๊ป ์น์ํ Bash ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ์ข์ ์ ์, ๋ฆฌ๋
์ค ํ๋ก๊ทธ๋จ์ Windows์์ ์ฌ์ฉํ ์์๊ฒ ํฉ๋๋ค. ํ์ง๋ง Bash์์ Windows ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
|
|
|
|
- [Cygwin](https://cygwin.com/)๋ฅผ ์ค์นํด 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](https://github.com/dthree/cash)์
๋๋ค. ์ด ํ๊ฒฝ์๋ ๋งค์ฐ ์ ์ ์ ๋์ค ๋ช
๋ น๊ณผ ์ปค๋งจ๋ ๋ผ์ธ ์ต์
๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ ์ฃผ์ํ์ธ์.
|
|
|
|
- Windows์์ GNU ๊ฐ๋ฐ์ ํด(GCC๊ฐ์)์ ์ป๋ ๋ค๋ฅธ ๋์์ผ๋ก [MinGW](http://www.mingw.org/)์ ๊ฑฐ๊ธฐ์ ํฌํจ๋ [MSYS](http://www.mingw.org/wiki/msys) ํจํค์ง๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ bash, gawk, make, grep๊ฐ์ ๋๊ตฌ๊ฐ ํฌํจ๋ฉ๋๋ค. MSYS๋ Cygwin์ ๋น๊ตํ๋ฉด ๋ชจ๋ ๊ธฐ๋ฅ์ ์์ต๋๋ค. MinGW๋ ์ ๋์ค ํด์ ๋ค์ดํฐ๋ธ Windows๋ก ํฌํ
ํ ๋ ๋ถ๋ถ์ ์ผ๋ก ์ ์ฉํฉ๋๋ค.
|
|
|
|
## More resources
|
|
|
|
- [awesome-shell](https://github.com/alebcay/awesome-shell): ์
ธ์ ๋ํ ํด๊ณผ ๋ฆฌ์์ค๋ค์ด ์ ์ ๋ฆฌ๋์ด ์๋ ๋ฆฌ์คํธ์
๋๋ค.
|
|
- [awesome-osx-command-line](https://github.com/herrbischoff/awesome-osx-command-line): OS X ์ปค๋งจ๋ ๋ผ์ธ์ ๊ดํด ๋ ๊น์ด ์์ ์๋ ๊ฐ์ด๋ ์
๋๋ค.
|
|
- [Strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/): ๋ณด๋ค ๋์ ์
ธ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ ๋ณด๊ธ์
๋๋ค.
|
|
- [shellcheck](https://github.com/koalaman/shellcheck): ์
ธ ์คํฌ๋ฆฝํธ ์ ์ ๋ถ์ ๋๊ตฌ ์
๋๋ค. ํนํ, bash/sh/zsh์ ๋ํ ๋ฆฐํธ์
๋๋ค.
|
|
- [Filenames and Pathnames in Shell](http://www.dwheeler.com/essays/filenames-in-shell.html): ์
ธ ์คํฌ๋ฆฝํธ์์ ํ์ผ ์ด๋ฆ์ ์ฒ๋ฆฌํ๋ ๋ฒ์ ๋ค๋ฃจ๋ ์ฌํ๋๋ก ๋ณต์กํ ๋ฏธ๋์ธ์ด์
๋๋ค.
|
|
- [Data Science at the Command Line](http://datascienceatthecommandline.com/#tools): ๊ฐ์ ์ด๋ฆ์ ์ฑ
์์ ๋์จ, ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค๋ฅผ ์ํ ๋ ๋์ ๋ช
๋ น๊ณผ ๋๊ตฌ๋ค ์
๋๋ค.
|
|
|
|
|
|
## Disclaimer
|
|
|
|
๋งค์ฐ ์์ ์์
์ ์ ์ธํ ์ฝ๋๋ค์ ๋ค๋ฅธ ์ฌ๋์ด ์ฝ์ ์ ์๋๋ก ์์ฑ๋ฉ๋๋ค. ํฐ ํ์๋ ์ฑ
์์ด ๋ฐ๋ฆ
๋๋ค. Bash์์ ๋ญ๊ฐ๋ฅผ *ํ ์ ์๋ค๋* ๊ฒ์ Bash๋ก ํด์ผ ๋๋ค๋ ์๋ฏธ๊ฐ ์๋๋๋ค! ;)
|
|
|
|
|
|
## License
|
|
|
|
[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-sa/4.0/)
|
|
|
|
์ด ์ ์๋ฌผ์ [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/)์ ๋ฐ๋ผ ์ด์ฉํ ์ ์์ต๋๋ค.
|