Backend/LINUX

[Chapter1] 리눅스의 추억11(feat. 막힘없이 실무까지)

GreatSaiyaman 2022. 7. 30. 21:40

본 포스팅은 2020년에 작성했던 포스팅입니다, blog를 이관하게 되어 재포스팅 하였습니다.


아래 포스팅은 제가 수강하였던 동영상 강의, 각종 블로그 혹은 공식 홈페이지에서 습득한 자료들 제 나름대로 재구성하여 포스팅 한 자료입니다. 잘못된 내용이 있을 수도 있습니다. 최대한 글 읽으시는 시간이 헛되지 않게 검토하여 올리겠습니다. 편하게, 재미있게 제 글을 읽어주셨으면 좋겠습니다. 틀린 부분이 있으면 댓글이나 메일 주시면 수정하여 놓겠습니다. 제 글을 읽어주셔서 감사합니다^^

- 목차 -

Chapter1. 리눅스 맛보기

Chapter2. 리눅스 활용하기

Chapter3. 리눅스 개발 및 운영하기

 

 

안녕하세요. 오늘은 저번 시간에 이어서 파일들을 다루는 명령어에 대해서 조금 더 깊게 살펴보도록 하겠습니다.

제가 파일 찾기에 조금 집착하는 편입니다. 왜냐하면 제가 처음에 리눅스를 접했을 때 파일을 찾기가 정말 너무너무 힘들었습니다. 윈도에서는 제어판에서 간단하게 검색만 해도 온 컴퓨터를 다 해집으면서 검색을 해줬는데... 리눅스는 그걸 어떻게 하는지 너무 궁금했고 그러한 부분을 좀 더 자세히 알면 얼마나 좋을까 싶은 마음에 파일과 관련된 명령어에 대해서 조금 더 파는 것 같습니다. ㅎㅎ

아무튼 간 다른 부분을 공부하다 보니 포스팅이 늦었네요. 바로 시작하도록 하겠습니다.

(31) find 명령어의 여러 가지 옵션

-find + name 조합만 살펴보았었는데요, 보통 파일 찾을 때 크기로 많이 찾는데요.

생각해보니 크기로 찾는 법을 안 알아봤더군요.

find 조회하고자 하는 파일의 목적지 -size 용량

위와 같이 입력하면 됩니다.

그런데 사이즈를 검색하고자 할 때는 항상 조건이 따르실 겁니다.

"이 사이즈보다 큰 파일만 찾으면 된다, 이 사이즈보다 작은 파일만 찾으면 된다" 라는 조건이요.

조회하고자 하는 파일의 목적지는 해당 디렉터리만 검색하는 것이 아니라 하위 디렉토리도 모두 검색하게 됩니다.

-size 뒤에 10M / -10M / +10M로 검색하게 되면 각각

10M인 파일, 10M 이하인 파일, 10M 이상인 파일로 검색이 되게 됩니다.

-ls 옵션은 많은 분들이 아시다 시피 정렬이고요.

 

brandon@brandon-VirtualBox:~$ find ./ -size +10M -ls
   181899  10340 -rw-r--r--   1 brandon  brandon  10584064  9월  1 21:37 ./.mozilla/firefox/7cb8ruh1.default-release/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite
   283273  10892 -rw-rw-r--   1 brandon  brandon  11150639  9월  2 20:36 ./.config/google-chrome/Safe\ Browsing/UrlSoceng.store
   273151  19052 -rw-------   1 brandon  brandon  19509216  8월 28 21:32 ./.config/google-chrome/PepperFlash/32.0.0.414/libpepflashplayer.so
   282529  13764 -rw-------   1 brandon  brandon  14091416  8월 28 21:32 ./.config/google-chrome/pnacl/0.57.44.2492/_platform_specific/x86_64/pnacl_public_x86_64_pnacl_llc_nexe
.
.
.
.

 

위에서 ...으로 되어있는 부분은요. 출력 결과가 너무 많다 보니 이곳에 다 붙여 넣지 못해서 저렇게 표현하였습니다.

파일 조건을 걸어도 너무 출력 결과가 너무 많은 경우 오류 메시지들이 섞여 있어서 그럴 확률이 높습니다.

이 부분은 나중에 다루도록 하겠습니다만 아래와 같은 명령어를 조합하여 사용하도록 하겠습니다.

2> /dev/null

 

위 명령어의 뜻은 출력되는 에러를 redirection 시켜서 /dev/null로 보내라는 뜻입니다.

그런데 /dev/null은 리눅스에 존재하는 거대한 블랙홀 같은 거라고 보심 됩니다.ㅎㅎ

/dev/null 이곳은 항상 비어 있습니다.

한번 입력해보겠습니다.

 

brandon@brandon-VirtualBox:/$ find ./ -size +10M -ls 2> /dev/null
   285215  54664 -rw-r--r--   1 root     root     55974233  9월  8 19:32 ./boot/initrd.img-4.15.0-117-generic
   264368  54660 -rw-r--r--   1 root     root     55970806  8월 28 15:54 ./boot/initrd.img-4.15.0-112-generic
   940319  54828 -rw-r--r--   1 root     root     56142614  8월 27 00:48 ./var/cache/apt/archives/firefox_80.0+build2-0ubuntu0.16.04.1_amd64.deb
   918218  50924 -rw-r--r--   1 root     root     52144023  9월 17 15:47 ./var/cache/apt/pkgcache.bin
   918214  50864 -rw-r--r--   1 root     root     52082415  9월 17 15:47 ./var/cache/apt/srcpkgcache.bin
   939576  22880 -rw-r--r--   1 root     root     23426103  4월 22  2016 ./var/lib/apt/lists/kr.archive.ubuntu.com_ubuntu_dists_xenial_universe_i18n_Translation-en
   939567  40676 -rw-r--r--   1 root     root     41649086  4월 22  2016 ./var/lib/apt/lists/kr.archive.ubuntu.com_ubuntu_dists_xenial_universe_binary-i386_Packages
   939563  40836 -rw-r--r--   1 root     root     41813552  4월 22  2016 ./var/lib/apt/lists/kr.archive.ubuntu.com_ubuntu_dists_xenial_universe_binary-amd64_Packages
4026532031      0 -r--------   1 root     root     140737477881856  9월 17 16:29 ./proc/kcore
        12      4 -rwx------   1 brandon  brandon         67108904  9월 17 14:43 ./dev/shm/pulse-shm-1936688293
        11      4 -rwx------   1 brandon  brandon         67108904  9월 17 14:43 ./dev/shm/pulse-shm-3191450713
        10     56 -rwx------   1 brandon  brandon         67108904  9월 17 14:43 ./dev/shm/pulse-shm-2417960484
         9     68 -rwx------   1 brandon  brandon         67108904  9월 17 14:43 ./dev/shm/pulse-shm-104654299
         8      4 -rwx------   1 brandon  brandon         67108904  9월 17 14:43 ./dev/shm/pulse-shm-1872896316
         7     72 -rwx------   1 lightdm  lightdm         67108904  9월 17 14:43 ./dev/shm/pulse-shm-879756344
         6      4 -rwx------   1 lightdm  lightdm         67108904  9월 17 14:43 ./dev/shm/pulse-shm-2722366460
         3      4 -rwx------   1 lightdm  lightdm         67108904  9월 17 14:43 ./dev/shm/pulse-shm-2497217634
    182149  10272 -rw-r--r--   1 root     root            10518160  8월 23 10:54 ./opt/google/chrome/icudtl.dat
    182142 163248 -rwxr-xr-x   1 root     root           167164248  8월 23 10:54 ./opt/google/chrome/chrome
      1830  17387 -r-xr-xr-x   1 brandon  brandon         17804288  5월  9  2018 ./media/brandon/VBOXADDITIONS_5.1.38_1225922/VBoxSolarisAdditions.pkg
      1840  16059 -r-xr-xr-x   1 brandon  brandon         16443832  5월  9  2018 ./media/brandon/VBOXADDITIONS_5.1.38_1225922/VBoxWindowsAdditions-amd64.exe
    181899  10340 -rw-r--r--   1 brandon  brandon         10584064  9월  1 21:37 ./home/brandon/.mozilla/firefox/7cb8ruh1.default-release/storage/permanent/chrome/idb/3870112724rsegmnoittet-es.sqlite
    283273  10892 -rw-rw-r--   1 brandon  brandon         11150639  9월  2 20:36 ./home/brandon/.config/google-chrome/Safe\ Browsing/UrlSoceng.store
    273151  19052 -rw-------   1 brandon  brandon         19509216  8월 28 21:32 ./home/brandon/.config/google-chrome/PepperFlash/32.0.0.414/libpepflashplayer.so
    282529  13764 -rw-------   1 brandon  brandon         14091416  8월 28 21:32 ./home/brandon/.config/google-chrome/pnacl/0.57.44.2492/_platform_specific/x86_64/pnacl_public_x86_64_pnacl_llc_nexe
    183005  13764 -rw-r--r--   1 brandon  brandon         14091416  9월 16 21:18 ./home/brandon/help-destination.txt
     13568      0 -rw-------   1 root     root            16777216  9월 17 16:20 ./sys/devices/pci0000:00/0000:00:02.0/resource0
    665880 119380 -rw-r--r--   1 root     root           122241544  7월  2 00:27 ./usr/lib/thunderbird/libxul.so
    665881  50412 -rw-r--r--   1 root     root            51618498  7월  2 00:18 ./usr/lib/thunderbird/omni.ja
    668342 130792 -rw-r--r--   1 root     root           133930872  9월  2 07:08 ./usr/lib/firefox/libxul.so
    668307  24620 -rw-r--r--   1 root     root            25208279  9월  2 06:33 ./usr/lib/firefox/omni.ja
    668321  42496 -rw-r--r--   1 root     root            43511852  9월  2 06:33 ./usr/lib/firefox/browser/omni.ja
    660240  15032 -rw-r--r--   1 root     root            15389840  9월 23  2019 ./usr/lib/libreoffice/program/libswlo.so
    660217  15140 -rw-r--r--   1 root     root            15499336  9월 23  2019 ./usr/lib/libreoffice/program/libsclo.so
    660185  56892 -rw-r--r--   1 root     root            58254328  9월 23  2019 ./usr/lib/libreoffice/program/libmergedlo.so
    667491  41544 -rw-r--r--   1 root     root            42537680  8월 16  2018 ./usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.28.5
    654756  16108 -rw-r--r--   1 root     root            16494248  8월 22 03:12 ./usr/lib/x86_64-linux-gnu/libgs.so.9.26
    920966  42220 -rwxr-xr-x   1 root     root            43233160  8월 16  2018 ./usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/WebKitPluginProcess2
    666916  16920 -rw-r--r--   1 root     root            17322744  8월 16  2018 ./usr/lib/x86_64-linux-gnu

 

조금 길긴 하지만 이제는 그대로 복사하여 붙여넣기 해도 될 정도의 길이입니다.

그런데 여전히 깁니다. 왜 그럴까요?

여기서 부터는 검색하시는 분이 자신이 찾고자 하는 파일에 대한 기억이 얼마나 남아 있냐에 따라 조금 달라질 것 같습니다.

혹시...

'이름 정도는 어렴풋이 기억날 것 같기도 하고...'

혹은

'흐음.. 확장자는 기억날 것 같기도 한데...'

라는 생각이 있으시다면 아래와 같이 검색해 보시는 건 어떨까요?

확장자 하나만 기억이 나도 아래와 같이 검색을 할 수가 있습니다.

 

brandon@brandon-VirtualBox:/$ find ./ -name '*.txt' -size +10M -ls 2> /dev/null
   183005  13764 -rw-r--r--   1 brandon  brandon  14091416  9월 16 21:18 ./home/brandon/help-destination.txt

 

우와! 확장자 하나만 검색에 추가해 주었을 뿐인데 검색 결과가 하나로 팍 줄어버립니다.

진짜 리눅스의 활용도는 무궁무진한 것 같습니다. 명령어를 몇 개 익히면 정말 편해집니다.

제가 개인 피시를 리눅스로 만들어 버린 이유도 이러한 이유 때문입니다.

추후에는 개인 피시를 구매하여 개발 피시로 만들기까지의 과정도 포스팅으로 다루어 보도록 하겠습니다.

그런데 여러분 find 명령어를 조금 더 깊게 써보는 방법이 있는데요. 사실 이게 깊다고 하기에는 좀 뭐 합니다만 파일만 찾는 것이 아니라 파일 안에 특정 글자를 발견하는 것이 가능하고 그것을 다른 곳에다가 저장하기가 가능합니다.

아마 이건 서버에 로그가 많이 쌓였을 때 어떠한 흔적을 따로 보기 쉽게 하기 위해, 그리고 단순히 터미널 창에 띄우지 말고 기록으로 저장할 수 있게 하기 위해 좋은 명령어 인듯합니다.

그렇다면 바로 한번 해보도록 하겠습니다.

제가 아까 검색했던 help-destination에는 아래와 같은 단어들이 있습니다.

 

brandon@brandon-VirtualBox:/$ vim ./home/brandon/help-destination.txt
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999

 

그리고 복사를 해서 검색 결과를 늘려보겠습니다.

 

brandon@brandon-VirtualBox:~$ cp help-destination.txt help-destination2.txt

 

위 두 파일 모두 은하철도 999라는 영어 단어가 들어가 있습니다.

그런데 저곳에 다른 문자열들이 들어갈 가능성들이 높아졌고 저는 간간히

더보기

1. 파일을 검색한 후

2. 특정 문자열이 있는 줄들만을 출력

 

하고 싶어졌습니다.

파일명은 이미 알고 있고, 용량도 작으니 아래와 같이 검색을 한번 해보겠습니다.

 

brandon@brandon-VirtualBox:~$ find ./ -name 'help-*.txt' -size -2M -exec grep "999" {} \; -print 2> /dev/null
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
./help-destination2.txt
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
./help-destination.txt

 

오잉? 명령어가 왜 이렇게 길어졌어! 하실 수도 있는데 차근차근 뜯어보면 쉽습니다.

 

brandon@brandon-VirtualBox:~$ find ./ -name 'help-*.txt' -size -2M -exec grep "999" {} \; -print 2> /dev/null

 

find 다음의 옵션 -name, -size는 제가 이 파일들의 조건을 잘 알고있다보니 넣은 명령어입니다.

문제는 그 뒤의 명령어입니다.

-exec 명령어는 '프로세스를 대체'해주는 명령어입니다.

앞의 실행되어서 찾은 파일들을 대상으로, 다음 명령어를 실행할 수 있도록 도와주는 명령어입니다.

그러니까 위에 제가 입력한 대로라면

현 디렉토리에서 -> help-라는 prefix를 가지고 있는 txt 확장자 파일의 -> 2M 이하의 파일들을 찾아줘

그리고 여기까지 찾은 파일들을

-> "999"라는 문자가 들어있는 줄을 뽑아서 {} 이곳에 저장해 줘 -> \;를 만났으니 종료 -> 출력은 어느 파일에 속해있는지도 같이 알려줘 -> 나머지 에러 사항들은 /dev/null로 보내줘

이렇게 되는 겁니다. 명령어 사이에 껴있는 {} 이것의 의미는 찾을 대상 파일들을 의미합니다.

그러니까 다시 한번 정리해보면요....

현 디렉토리에서 -> help-라는 prefix를 가지고 있는 txt 확장자 파일의 -> 2M 이하의 파일들을 찾아줘 -> 그럼 나온 결과들을 가지고-> "999"라는 문자가 들어있는 줄을 뽑아서 {} 이곳에 저장해 줘 -> \;를 만났으니 종료 -> 출력은 어느 파일에 속해있는지도 같이 알려줘 -> 나머지 에러 사항들은 /dev/null로 보내줘

이렇게 되는 겁니다!!

명령어를 몇 개 섞어 쓰니 정말 편리하게 사용할 수가 있죠?

복사도 간편하게 가능합니다. 아래를 한번 보시죠

 

brandon@brandon-VirtualBox:~$ find ./ -name 'help-*.txt' -size -2M -exec cp {} /home/brandon/text-cp.txt \; -print 2> /dev/null
./help-destination2.txt
./help-destination.txt
brandon@brandon-VirtualBox:~$ ls
Desktop  Documents  Downloads  examples.desktop  hello.txt  help-destination2.txt  help-destination.txt  helpme2.txt  helpme.txt  Music  Pictures  Public  Templates  text-cp.txt  Videos
brandon@brandon-VirtualBox:~$ vim text-cp.txt

 

검색 결과들을 {}에 담아서 text-cp.txt에 복사하는 명령어입니다.

잘 복사된 것을 확인할 수 있습니다.

 

galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999
galaxy express 999

 

(31) grep 명령어에서 불편했던 부분

grep 명령어는 파일 내에서 문자열을 검색하는 용도로 쓰인다기보다는 주로 process와 관련된 명령어를 사용할 때 언급되었는데요. 주로 특정 포트를 검색하여 해당과 관련된 서비스가 열려있는지 닫혀있는지에 대해서 검색할 때 사용을 많이 하실 것 같아요. 그런데 이렇게 검색하나 저렇게 검색하나 아래와 같이 자기 자신이 항상 보입니다.

 

brandon@brandon-VirtualBox:~$ ps -ef | grep 8080
brandon  10981  2497  0 17:45 pts/4    00:00:00 grep --color=auto 8080

 

자기 자신을 제외할 수가 있습니다 아래와 같이요.

 

brandon@brandon-VirtualBox:~$ ps -ef | grep 8080  | grep -v "grep"

 

 

(32) sort 명령어 응용하기

아마 위 두 명령어와 마찬가지로 sort 명령어 또한 특정 조건으로 검색한 결괏값을 보기 편하게 하기 위해서는 가공해서 출력해 줄 필요가 있기 때문에, 자주 쓰일 것입니다.

예전 포스팅에서 몇 번째 칼럼을 기준으로 정렬, 몇 번째 칼럼을 기준으로 정렬에 대해서 다룬 적이 있었는데요.
우선 제가 원하는 조건으로 정렬을 해보겠습니다.

brandon@brandon-VirtualBox:~$ ls -lh | sort -k1n -k2n
-rw-r--r-- 1 brandon brandon  134  9월 17 16:44 help-destination.txt
-rw-r--r-- 1 brandon brandon  134  9월 17 16:49 help-destination2.txt
-rw-r--r-- 1 brandon brandon  134  9월 17 17:34 text-cp.txt
-rw-r--r-- 1 brandon brandon 8.8K  8월 28 15:52 examples.desktop
-rw-rw-r-- 1 brandon brandon    0  9월 16 21:18 helpme2.txt
-rw-rw-r-- 1 brandon brandon   16  9월 11 01:49 hello.txt
-rw-rw-r-- 1 brandon brandon  629  9월 16 21:01 helpme.txt
-rw-rw-r-- 1 brandon brandon  981  9월 17 17:47 sort-result.txt
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Desktop
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Documents
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Music
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Pictures
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Public
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Templates
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Videos
drwxr-xr-x 3 brandon brandon 4.0K  8월 29 16:41 Downloads
total 68K

 

 

n 옵션은 1 10 13 14 2 20 21 ... 과같이 정렬될 수 있는 것을, 1 2 10 13 14 20 21로 정렬될 수 있게 도와주는 '숫자 정렬' 옵션입니다.

이 결과물을 바로 다른 파일로 보내고 싶다면. 즉석에서 redirection을 사용해 주시면 됩니다.

 

brandon@brandon-VirtualBox:~$ ls -lh | sort -k1n -k2n > test-search-directory-result.txt
 

결과가 잘 나오는 것을 확인할 수 있습니다.

 

andon@brandon-VirtualBox:~$ cat test-search-directory-result.txt 
-rw-r--r-- 1 brandon brandon  134  9월 17 16:44 help-destination.txt
-rw-r--r-- 1 brandon brandon  134  9월 17 16:49 help-destination2.txt
-rw-r--r-- 1 brandon brandon  134  9월 17 17:34 text-cp.txt
-rw-r--r-- 1 brandon brandon 8.8K  8월 28 15:52 examples.desktop
-rw-rw-r-- 1 brandon brandon    0  9월 16 21:18 helpme2.txt
-rw-rw-r-- 1 brandon brandon    0  9월 17 17:58 test-search-directory-result.txt
-rw-rw-r-- 1 brandon brandon   16  9월 11 01:49 hello.txt
-rw-rw-r-- 1 brandon brandon  629  9월 16 21:01 helpme.txt
-rw-rw-r-- 1 brandon brandon  981  9월 17 17:47 sort-result.txt
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Desktop
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Documents
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Music
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Pictures
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Public
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Templates
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Videos
drwxr-xr-x 3 brandon brandon 4.0K  8월 29 16:41 Downloads
total 68K

 

만약에 이 결과를 거꾸로 출력하여 정렬하고 싶다면 아래와 같이 거꾸로 redirection을 준 후에 sort 명령어로 조건을 검색하여 명령해 주시면 됩니다. 다만 아까와 같은 ls 명령어는 들어가지 않을 것입니다 ㅎㅎ

brandon@brandon-VirtualBox:~$ sort -k1n -k2n < test-search-directory-result.txt
-rw-r--r-- 1 brandon brandon  134  9월 17 16:44 help-destination.txt
-rw-r--r-- 1 brandon brandon  134  9월 17 16:49 help-destination2.txt
-rw-r--r-- 1 brandon brandon  134  9월 17 17:34 text-cp.txt
-rw-r--r-- 1 brandon brandon 8.8K  8월 28 15:52 examples.desktop
-rw-rw-r-- 1 brandon brandon    0  9월 16 21:18 helpme2.txt
-rw-rw-r-- 1 brandon brandon    0  9월 17 17:58 test-search-directory-result.txt
-rw-rw-r-- 1 brandon brandon   16  9월 11 01:49 hello.txt
-rw-rw-r-- 1 brandon brandon  629  9월 16 21:01 helpme.txt
-rw-rw-r-- 1 brandon brandon  981  9월 17 17:47 sort-result.txt
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Desktop
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Documents
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Music
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Pictures
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Public
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Templates
drwxr-xr-x 2 brandon brandon 4.0K  8월 28 16:20 Videos
drwxr-xr-x 3 brandon brandon 4.0K  8월 29 16:41 Downloads
total 68K

 

휴우, 다음 시간에는 리눅스에서 하드디스크를 추가할 때 어떻게 추가해야 되는지 그 과정은 또 어찌 되는지에 대해서 알아보도록 하겠습니다.

Thanks for reading!