๊ธฐ์กด ๋ช ๋ น์ค ๋๊ตฌ์ ํจ๊ป ๋ณด๋ค ํ๋์ ์ธ ๋์์ ์ฌ์ฉํ๋ฉด ๋ ๋ง์ ์ฆ๊ฑฐ์์ ๋๋ฆฌ๊ณ ์์ฐ์ฑ๋ ํฅ์์ํฌ ์ ์์ต๋๋ค.
Linux/Unix์ ์ผ์ ์์
์์ ์ฐ๋ฆฌ๋ ๋์คํฌ ์ฌ์ฉ๋๊ณผ ์์คํ
๋ฆฌ์์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๊ธฐ ์ํด du์ ๊ฐ์ ๋ง์ ๋ช
๋ น์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ ์ค ์ผ๋ถ๋ ์ค๋ซ๋์ ์ฌ์ฉ๋์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด top์ 1984๋
์ ๋ฑ์ฅํ๊ณ du์ ์ฒซ ๋ฒ์งธ ๋ฆด๋ฆฌ์ค๋ 1971๋
์ผ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ๋๋ค.
์๋ ์ ๊ฑธ์ณ ์ด๋ฌํ ๋๊ตฌ๋ ํ๋ํ๋์ด ๋ค๋ฅธ ์์คํ ์ผ๋ก ์ด์๋์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ๋ฒ์ ์์ ํฌ๊ฒ ๋ฒ์ด๋์ง ์์์ผ๋ฉฐ ๋ชจ์๊ณผ ์ ์ฉ์ฑ๋ ํฌ๊ฒ ๋ณํ์ง ์์์ต๋๋ค.
์ด๋ ๋ง์ ์์คํ
๊ด๋ฆฌ์์๊ฒ ํ์ํ ํ๋ฅญํ ๋๊ตฌ์
๋๋ค. ๊ทธ๋ฌ๋ ์ปค๋ฎค๋ํฐ์์๋ ์ถ๊ฐ์ ์ธ ์ด์ ์ ์ ๊ณตํ๋ ๋์ฒด ๋๊ตฌ๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ๊ทธ ์ค ์ผ๋ถ๋ ๋จ์ํ ํ๋์ ์ด๊ณ ์๋ฆ๋ค์ด ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๊ณ ์๋ ๋ฐ๋ฉด, ์ผ๋ถ๋ ์ ์ฉ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ์ด ๋ฒ์ญ์์๋ ํ์ค Linux ๋ช
๋ น์ค ๋๊ตฌ์ ๋ํ ๋ค์ฏ ๊ฐ์ง ๋์์ ๋ํด ์ค๋ช
ํฉ๋๋ค.
1. ncdu ๋ du
NCurses ๋์คํฌ ์ฌ์ฉ๋(
ncdu๋ ๋์คํฌ๋ฅผ ๋ถ์ํ ํ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ ๋๋ ํฐ๋ฆฌ๋ ํ์ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์ํฉ๋๋ค. ์:
ncdu 1.14.2 ~ Use the arrow keys to navigate, press ? for help
--- /home/rgerardi ------------------------------------------------------------
96.7 GiB [##########] /libvirt
33.9 GiB [### ] /.crc
7.0 GiB [ ] /Projects
. 4.7 GiB [ ] /Downloads
. 3.9 GiB [ ] /.local
2.5 GiB [ ] /.minishift
2.4 GiB [ ] /.vagrant.d
. 1.9 GiB [ ] /.config
. 1.8 GiB [ ] /.cache
1.7 GiB [ ] /Videos
1.1 GiB [ ] /go
692.6 MiB [ ] /Documents
. 591.5 MiB [ ] /tmp
139.2 MiB [ ] /.var
104.4 MiB [ ] /.oh-my-zsh
82.0 MiB [ ] /scripts
55.8 MiB [ ] /.mozilla
54.6 MiB [ ] /.kube
41.8 MiB [ ] /.vim
31.5 MiB [ ] /.ansible
31.3 MiB [ ] /.gem
26.5 MiB [ ] /.VIM_UNDO_FILES
15.3 MiB [ ] /Personal
2.6 MiB [ ] .ansible_module_generated
1.4 MiB [ ] /backgrounds
944.0 KiB [ ] /Pictures
644.0 KiB [ ] .zsh_history
536.0 KiB [ ] /.ansible_async
Total disk usage: 159.4 GiB Apparent size: 280.8 GiB Items: 561540
ํ์ดํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํญ๋ชฉ์ ํ์ํ ์ ์์ต๋๋ค. Enter๋ฅผ ๋๋ฅด๋ฉด ncdu๋ ์ ํํ ๋๋ ํฐ๋ฆฌ์ ๋ด์ฉ์ ํ์ํฉ๋๋ค.
--- /home/rgerardi/libvirt ----------------------------------------------------
/..
91.3 GiB [##########] /images
5.3 GiB [ ] /media
์๋ฅผ ๋ค์ด, ์ด ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฅ ๋ง์ ๋์คํฌ ๊ณต๊ฐ์ ์ฐจ์งํ๋ ํ์ผ์ ํ์ธํ ์ ์์ต๋๋ค. ์ผ์ชฝ ํ์ดํ ํค๋ฅผ ๋๋ฅด๋ฉด ์ด์ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ ์ ์์ต๋๋ค. ncdu์์๋ d ํค๋ฅผ ๋๋ฌ ํ์ผ์ ์ญ์ ํ ์ ์์ต๋๋ค. ์ญ์ ํ๊ธฐ ์ ์ ํ์ธ์ ์์ฒญํฉ๋๋ค. ์ค์๋ก ์ค์ํ ํ์ผ์ด ์์ค๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ญ์ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ ค๋ฉด -r ์ต์ ์ ์ฌ์ฉํ์ฌ ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค ๋ชจ๋๋ฅผ ํ์ฑํํ์ธ์: ncdu -r.
ncdu๋ ๋ค์ํ Linux ํ๋ซํผ ๋ฐ ๋ฐฐํฌํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด dnf๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์ ์ ์ฅ์์์ Fedora์ ์ง์ ์ค์นํ ์ ์์ต๋๋ค.
$ sudo dnf install ncdu
2. htop ๋ ์๋จ
๊ธฐ๋ณธ์ ์ผ๋ก htop์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
์๋จ๊ณผ ๋ฌ๋ฆฌ:
๋ํ htop์ ์๋จ์ ์์คํ
์ ๋ํ ๊ฐ์ ์ ๋ณด๋ฅผ ํ์ํ๊ณ ํ๋จ์๋ ๊ธฐ๋ฅ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
๋ น์ ์คํํ ์ ์๋ ํจ๋์ ํ์ํฉ๋๋ค. F2 ํค๋ฅผ ๋๋ฌ ๊ตฌ์ฑ ํ๋ฉด์ ์ด์ด ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ค์ ์์ ์์์ ๋ณ๊ฒฝํ๊ณ ์ธก์ ํญ๋ชฉ์ ์ถ๊ฐ ๋๋ ์ ๊ฑฐํ๊ฑฐ๋ ๊ฐ์ ํจ๋ ํ์ ์ต์
์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ต์ ๋ฒ์ ์ top ์ค์ ์ ์กฐ์ ํ์ฌ ์ ์ฌํ ์ ์ฉ์ฑ์ ์ป์ ์ ์์ง๋ง htop์ ํธ๋ฆฌํ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ ๊ณตํ๋ฏ๋ก ๋ณด๋ค ์ค์ฉ์ ์ด๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ์ต๋๋ค.
3. tldr ๋ ๋จ์
tldr ๋ช
๋ น์ค ๋๊ตฌ๋ ๋ช
๋ น์ ๋ํ ๊ฐ๋จํ ๋์๋ง ์ ๋ณด(์ฃผ๋ก ์์ )๋ฅผ ํ์ํฉ๋๋ค. ์ปค๋ฎค๋ํฐ์ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค.
tldr์ด ์ธ๊ฐ์ ๋์ฒดํ๋ ๊ฒ์ด ์๋๋ผ๋ ์ ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์ด๋ ์ฌ์ ํ ํ์ค์ ์ด๊ณ ๊ฐ์ฅ ํฌ๊ด์ ์ธ ๋งค๋ด์ผ ํ์ด์ง ์ถ๋ ฅ ๋๊ตฌ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ฌ๋์ด ๋ถํ์ํฉ๋๋ค. ๋ช ๋ น์ ๋ํ ํฌ๊ด์ ์ธ ์ ๋ณด๊ฐ ํ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ํด๋น ๋ช ๋ น์ ๊ธฐ๋ณธ ์ฉ๋๋ง ๊ธฐ์ตํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ปฌ ๋ช ๋ น์ ๋งค๋ด์ผ ํ์ด์ง์๋ ๊ฑฐ์ 3000์ค์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ปฌ์ tldr ํ์ด์ง ๊ธธ์ด๋ 40์ค์ ๋๋ค. ๊ทธ ์กฐ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
$ tldr curl
# curl
Transfers data from or to a server.
Supports most protocols, including HTTP, FTP, and POP3.
More information: <https://curl.haxx.se>.
- Download the contents of an URL to a file:
curl http://example.com -o filename
- Download a file, saving the output under the filename indicated by the URL:
curl -O http://example.com/filename
- Download a file, following [L]ocation redirects, and automatically [C]ontinuing (resuming) a previous file transfer:
curl -O -L -C - http://example.com/filename
- Send form-encoded data (POST request of type `application/x-www-form-urlencoded`):
curl -d 'name=bob' http://example.com/form
- Send a request with an extra header, using a custom HTTP method:
curl -H 'X-My-Header: 123' -X PUT http://example.com
- Send data in JSON format, specifying the appropriate content-type header:
curl -d '{"name":"bob"}' -H 'Content-Type: application/json' http://example.com/users/1234
... TRUNCATED OUTPUT
TLDR์ โ๋๋ฌด ๊ธธ๋ค; ์ฝ์ง ์์์ต๋๋ค": ์ฆ, ๊ณผ๋ํ ์ฅํฉํจ์ผ๋ก ์ธํด ์ผ๋ถ ํ ์คํธ๊ฐ ๋ฌด์๋์์ต๋๋ค. ๋งค๋ด์ผ ํ์ด์ง๊ฐ ์ ์ฉํ๊ธฐ๋ ํ์ง๋ง ๋๋ก๋ ๋๋ฌด ๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฆ์ ์ด ๋๊ตฌ์ ์ ํฉํฉ๋๋ค.
Fedora์ ๊ฒฝ์ฐ tldr์ Python์ผ๋ก ์์ฑ๋์์ต๋๋ค. dnf ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋๊ตฌ๊ฐ ์๋ํ๋ ค๋ฉด ์ธํฐ๋ท ์ก์ธ์ค๊ฐ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ Fedora์ Python ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์คํ๋ผ์ธ ์ก์ธ์ค๋ฅผ ์ํด ์ด๋ฌํ ํ์ด์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์บ์ํ ์ ์์ต๋๋ค.
4.jq ๋ sed/grep
jq๋ ๋ช ๋ น์ค์ฉ JSON ํ๋ก์ธ์์ ๋๋ค. sed ๋๋ grep๊ณผ ์ ์ฌํ์ง๋ง JSON ๋ฐ์ดํฐ์ ์๋ํ๋๋ก ํน๋ณํ ์ค๊ณ๋์์ต๋๋ค. ์ผ์์ ์ธ ์์ ์์ JSON์ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ๋๋ ์์คํ ๊ด๋ฆฌ์๋ผ๋ฉด ์ด ๋๊ตฌ๊ฐ ์ ํฉํฉ๋๋ค.
grep ๋ฐ sed์ ๊ฐ์ ํ์ค ํ ์คํธ ์ฒ๋ฆฌ ๋๊ตฌ์ ๋นํด jq์ ์ฃผ์ ์ฅ์ ์ JSON ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ดํดํ์ฌ ๋จ์ผ ํํ์์ผ๋ก ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ JSON ํ์ผ์์ ์ปจํ ์ด๋ ์ด๋ฆ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"labels": {
"app": "myapp"
},
"name": "myapp",
"namespace": "project1"
},
"spec": {
"containers": [
{
"command": [
"sleep",
"3000"
],
"image": "busybox",
"imagePullPolicy": "IfNotPresent",
"name": "busybox"
},
{
"name": "nginx",
"image": "nginx",
"resources": {},
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Never"
}
}
๋ฌธ์์ด ์ด๋ฆ์ ์ฐพ์ผ๋ ค๋ฉด grep์ ์คํํ์ญ์์ค.
$ grep name k8s-pod.json
"name": "myapp",
"namespace": "project1"
"name": "busybox"
"name": "nginx",
grep์ name์ด๋ผ๋ ๋จ์ด๊ฐ ํฌํจ๋ ๋ชจ๋ ์ค์ ๋ฐํํ์ต๋๋ค. grep์ ๋ช ๊ฐ์ง ์ต์ ์ ์ถ๊ฐํ์ฌ ์ ํํ๊ณ ์ ๊ท์ ์กฐ์์ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ์ด๋ฆ์ ์ฐพ์ ์ ์์ต๋๋ค.
jq๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ญ์์ค.
$ jq '.spec.containers[].name' k8s-pod.json
"busybox"
"nginx"
์ด ๋ช ๋ น์ ๋ ์ปจํ ์ด๋์ ์ด๋ฆ์ ์ ๊ณตํฉ๋๋ค. ๋ ๋ฒ์งธ ์ปจํ ์ด๋์ ์ด๋ฆ๋ง ์ฐพ๋ ๊ฒฝ์ฐ ๋ฐฐ์ด ์์์ ์ธ๋ฑ์ค๋ฅผ ํํ์์ ์ถ๊ฐํ์ธ์.
$ jq '.spec.containers[1].name' k8s-pod.json
"nginx"
jq๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์๊ณ ์์ผ๋ฏ๋ก ํ์ผ ํ์์ด ์ฝ๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๊ฒฝ์ฐ grep ๋ฐ sed๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
jq์๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ง๋ง ์ด๋ฅผ ์ค๋ช
ํ๋ ค๋ฉด ๋ค๋ฅธ ๋ฌธ์๊ฐ ํ์ํฉ๋๋ค. ๋ ๋ง์ ์ ๋ณด๋ฅผ ์ํ์๋ฉด ์ฐ๋ฝ์ฃผ์ธ์
5. fd ๋ ์ฐพ๊ธฐ
์๋ฅผ ๋ค์ด Git ์ ์ฅ์ ๋๋ ํฐ๋ฆฌ์์ ํ์ผ์ ๊ฒ์ํ ๋ fd๋ .git ๋๋ ํฐ๋ฆฌ๋ฅผ ํฌํจํ ์จ๊ฒจ์ง ํ์ผ๊ณผ ํ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ ์ธํ๊ณ .gitignore ํ์ผ์ ์์ผ๋์นด๋๋ ๋ฌด์ํฉ๋๋ค. ์ ๋ฐ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ์๋์์ ๋ ๊ด๋ จ์ฑ์ด ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ฌ ๊ฒ์ ์๋๋ฅผ ๋์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก fd๋ ํ์ฌ ๋๋ ํฐ๋ฆฌ์์ ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ์์ ์ถ๋ ฅ์ผ๋ก ๊ฒ์์ ์ํํฉ๋๋ค. find ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋์ผํ ๊ฒ์์ ์ํํ๋ ค๋ฉด ๋ช ๋ น์ค์ ์ถ๊ฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ฌ ๋๋ ํฐ๋ฆฌ์์ ๋ชจ๋ .md(๋๋ .MD) ํ์ผ์ ์ฐพ์ผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ find ๋ช ๋ น์ ์์ฑํฉ๋๋ค.
$ find . -iname "*.md"
fd์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$ fd .md
๊ทธ๋ฌ๋ ์ด๋ค ๊ฒฝ์ฐ์๋ fd์ ์ถ๊ฐ ์ต์ ๋ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์จ๊ฒจ์ง ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ๋ฅผ ํฌํจํ๋ ค๋ฉด -H ์ต์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๊ฒ์ํ ๋๋ ํ์ํ์ง ์์ต๋๋ค.
fd๋ ๋ง์ Linux ๋ฐฐํฌํ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Fedora์์๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์นํ ์ ์์ต๋๋ค.
$ sudo dnf install fd-find
์๋ฌด๊ฒ๋ ํฌ๊ธฐํ ํ์๊ฐ ์์ด์
์๋ก์ด Linux ๋ช ๋ น์ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ์๋๋ฉด ์ค๋๋ ๊ฒ์๋ง ์์ ์์ต๋๊น? ํ์ง๋ง ์๋ง๋ ๋น์ ์ ์ฝค๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ ์ฃ ? ๋๊ธ๋ก ์ฌ๋ฌ๋ถ์ ๊ฒฝํ์ ๊ณต์ ํด์ฃผ์ธ์.
๊ด๊ณ ์ ๊ถ๋ฆฌ์
๋ง์ ๊ณ ๊ฐ๋ค์ด ์ด๋ฏธ ์ด์ ์ ๋์ด ํ๊ฐํ์ต๋๋ค. ์ํฝ ์๋ฒ!
๊ทธ๊ฒ
์ถ์ฒ : habr.com