-
[Chapter1] 리눅스의 추억9(feat. 막힘없이 실무까지)Backend/LINUX 2022. 6. 28. 07:44
본 포스팅은 2020년에 작성했던 포스팅입니다, blog를 이관하게 되어 재포스팅 하였습니다.
아래 포스팅은 제가 수강하였던 동영상 강의, 각종 블로그 혹은 공식 홈페이지에서 습득한 자료들 제 나름대로 재구성하여 포스팅 한 자료입니다. 잘못된 내용이 있을 수도 있습니다. 최대한 글 읽으시는 시간이 헛되지 않게 검토하여 올리겠습니다. 편하게, 재미있게 제 글을 읽어주셨으면 좋겠습니다. 틀린 부분이 있으면 댓글이나 메일 주시면 수정하여 놓겠습니다. 제 글을 읽어주셔서 감사합니다^^
- 목차 -
Chapter1. 리눅스 맛보기
Chapter2. 리눅스 활용하기
Chapter3. 리눅스 개발 및 운영하기
안녕하십니까. 저번 시간에는 무언가를 검색해서 결과를 확인할 때 여러 가지 명령어를 조합해서 쓰면 아주 좋다는 말씀을 드리면서 끝마치게 되었죠. 그 명령어 중 하나가 grep이었고요. 저는 리눅스를 처음 배울 때 솔직히 왜 처음에 명령어를 조합해서 사용해야 하는지 몰랐었습니다. 그런데 명령어를 조합하지 않고 사용하면 너무 불편합니다. 10개의 결과만 보고 그 아래는 스크롤로 해서 살펴보고 싶은데 만약 이런 조건들을 명령어로 조합해 주지 않는다면 전체 결과를 전부 보여줘서 출력 결과를 제대로 확인할 수가 없습니다. 검은색 바탕에 하얀색 글씨만 촤르르륵~ 하고 올라가 버립니다.
일단 grep에 대해서 좀 더 알아보고 본격적으로 파일 검색에 대해 알아보도록 하겠습니다.(25). grep
grep이라는 동사는 '잡다'라는 동사입니다. 그 뜻에 걸맞게 출력되는 결과를 잡아줍니다.
grep 뒤에 무언가를 입력하면 그 무언가의 문자열 패턴을 기준으로 해서 문자열로 된 결과를 출력해 줍니다.
그런데 grep이 어디에나 다 사용할 수 있는 것은 아닙니다. 파일만 가능합니다.
이것은 Manual의 시놉시스에도 나와있습니다. 아래처럼요.
GREP(1) General Commands Manual GREP(1) NAME grep, egrep, fgrep, rgrep - print lines matching a pattern SYNOPSIS grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]
요새 man 명령어를 사용하는데 맛이 들려서 한번 말씀드려보았습니다 ㅎㅎ;
10을 입력한다고 해서 10개를 잡아주는 게 아니라 '10'이라는 문자열을 grep 해주는 기능이고 파일에만 쓸 수 있습니다.
brandon@brandon-VirtualBox:/var/log$ cat syslog | grep cron Sep 11 07:35:02 brandon-VirtualBox anacron[5147]: Job `cron.daily' terminated Sep 11 07:35:02 brandon-VirtualBox anacron[5147]: Normal exit (1 job run) Sep 11 08:17:01 brandon-VirtualBox CRON[5616]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 09:17:01 brandon-VirtualBox CRON[5861]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 10:17:01 brandon-VirtualBox CRON[6090]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 11:17:01 brandon-VirtualBox CRON[6383]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 12:17:01 brandon-VirtualBox CRON[7072]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 13:17:01 brandon-VirtualBox CRON[7281]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 14:17:01 brandon-VirtualBox CRON[7494]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 15:17:01 brandon-VirtualBox CRON[7693]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 16:17:01 brandon-VirtualBox CRON[7903]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 17:17:01 brandon-VirtualBox CRON[8111]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 18:17:01 brandon-VirtualBox CRON[8354]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 19:17:01 brandon-VirtualBox CRON[8565]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 20:17:01 brandon-VirtualBox CRON[8797]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 21:17:01 brandon-VirtualBox CRON[9015]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
아래와 같이 조금 응용해서 포트 번호를 확인하는 것도 확인 가능합니다.
brandon@brandon-VirtualBox:/var/log$ ps -ef | grep 8080 brandon 9234 20450 0 22:03 pts/18 00:00:00 grep --color=auto 8080
정말 IntelliJ에서 여러분 Ctrl+F로 특정 문자열 검색을 엄청 많이 하실 겁니다. 제가 리눅스에서는 그만큼의 경험은 없지만 앞으로 그만큼 쓸 것 같은 느낌이 드는 명령어입니다.
(26). sort
위에 grap처럼 sort 또한 출력 결과를 개발자의 입맛에 맞게 출력해 주는 명령어입니다.
명령어에서 유추할 수 있듯이 sort는 정렬을 뜻합니다.
(26)-1.default는 오름차순, -r 옵션은 내림차순입니다.
brandon@brandon-VirtualBox:/var/log$ cat syslog | sort | more -10 Sep 11 07:35:02 brandon-VirtualBox anacron[5147]: Job `cron.daily' terminated Sep 11 07:35:02 brandon-VirtualBox anacron[5147]: Normal exit (1 job run) Sep 11 07:43:17 brandon-VirtualBox dbus[669]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatc her' unit='dbus-org.freedesktop.nm-dispatcher.service' Sep 11 07:43:17 brandon-VirtualBox dbus[669]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' Sep 11 07:43:17 brandon-VirtualBox dhclient[808]: bound to 192.168.58.101 -- renewal in 477 seconds. Sep 11 07:43:17 brandon-VirtualBox dhclient[808]: DHCPACK of 192.168.58.101 from 192.168.58.100 Sep 11 07:43:17 brandon-VirtualBox dhclient[808]: DHCPREQUEST of 192.168.58.101 on enp0s8 to 192.168.58.100 port 67 (xi d=0x3e8a2674) Sep 11 07:43:17 brandon-VirtualBox NetworkManager[674]: <info> [1599777797.1687] address 192.168.58.101 brandon@brandon-VirtualBox:/var/log$ cat syslog | sort -r | more -10 Sep 11 22:17:01 brandon-VirtualBox CRON[9326]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Sep 11 22:16:06 brandon-VirtualBox systemd[1]: Starting Network Manager Script Dispatcher Service... Sep 11 22:16:06 brandon-VirtualBox systemd[1]: Started Network Manager Script Dispatcher Service. Sep 11 22:16:06 brandon-VirtualBox nm-dispatcher: req:1 'dhcp4-change' [enp0s8]: start running ordered scripts... Sep 11 22:16:06 brandon-VirtualBox nm-dispatcher: req:1 'dhcp4-change' [enp0s8]: new request (1 scripts) Sep 11 22:16:06 brandon-VirtualBox NetworkManager[674]: <info> [1599830166.4976] dhcp4 (enp0s8): state changed bound - > bound Sep 11 22:16:06 brandon-VirtualBox NetworkManager[674]: <info> [1599830166.4970] lease time 1200 Sep 11 22:16:06 brandon-VirtualBox NetworkManager[674]: <info> [1599830166.4961] server identifier 192.168.58.100 Sep 11 22:16:06 brandon-VirtualBox NetworkManager[674]: <info> [1599830166.4954] plen 24 (255.255.255.0)
(26)-2. 다른 옵션은 어느 정도 그냥 봐도 이해가 가는데 이 명령어에는 k라는 신기한 옵션이 있습니다.
여러분 표에서 행과 열이라는 개념을 알고 계시지요? 행은 가로축, 열은 세로축이잖아요? 저는 근데 이게 표가 아니라 아래와 같은 평범한 파일에도 먹힌다는 게 처음에 정말 신선하게 다가왔습니다.
무슨 얘기냐면요.
brandon@brandon-VirtualBox:/var/log$ cat cats-name | sort 1. sumi 2 2. semi 1 3. somi 4
제가 위처럼 cats-name.txt.라는 파일을 만들고 그 파일의 내용을 출력해보았습니다.
그냥 평범하게
1. sumi 2
2. semi 1
3. somi 4
이렇게 쓰여있는 파일입니다.
근데 글쎄 이 문자열의 '열'을 sort 명령어로 구분이 가능하다는 겁니다 ㄷㄷ...
첫번째열: 1. 2. 3.
두번째열: sumi semi somi
세번째열: 2 1 4
이렇게 됩니다. 감히 추측해보면 아마도 띄어쓰기로 구분하는것 같습니다. 그래서 -k 숫자 <- 이런식으로 옵션을 주면 아래와 같이 정렬이 가능합니다.
brandon@brandon-VirtualBox:/var/log$ cat cats-name | sort -k 1 1. sumi 2 2. semi 1 3. somi 4 brandon@brandon-VirtualBox:/var/log$ cat cats-name | sort -k 2 2. semi 1 3. somi 4 1. sumi 2 brandon@brandon-VirtualBox:/var/log$ cat cats-name | sort -k 3 2. semi 1 1. sumi 2 3. somi 4
이것도 명령어도 엄청 유용합니다. 나중에 DB에서 값을 뽑아서 파일에 저장시킨 후에 리눅스에서 조회할 때 유용하게 쓰일 듯합니다. 명령어를 3~4개씩 겹쳐서 쓰는 경우는 제가 서버를 직접 운영하면서 서버일지를 작성할 예정인데 그곳에서도 나름대로 심도 있게 다루어보도록 하겠습니다.
(27). uniq
여러분 데이터가 한 파일에 많이 쌓이다 보면, 분명 이것들을 정리하시고 싶으실 겁니다.
그런데 정리를 하다 보면 중복된 자료들이 나오실 겁니다.
" 어라, 이건 그만 보여줘도 되는데 "
혹은
" 어라, 이것만 보고 싶네 "
이럴 때 uniq라는 명령어를 사용하면 됩니다.
아까 예제로 사용한 cats-name이라는 파일에 제가 의도적으로 중복된 row를 삽입해보겠습니다.
(제가 글자를 조금 다르게 해서 시험을 해봤는데요. 아예 정말 똑같은 row만 중복되었다고 인식하는 것 같습니다)
1. sumi 2 2. semi 1 3. somi 4 3. somi 4
3번째 row와 4번째 row가 똑같습니다. 이제 uniq 명령어를 사용해보겠습니다.
brandon@brandon-VirtualBox:/var/log$ cat cats-name | sort -k 1 | uniq -c 1 1. sumi 2 1 2. semi 1 2 3. somi 4 brandon@brandon-VirtualBox:/var/log$ cat cats-name | sort -k 1 | uniq -d 3. somi 4
- uniq -c : 중복을 제거한 후, 중복 횟수를 표시해 줍니다. c는 count의 약자입니다.
- uniq -d : 중복된 row'만' 보여줍니다.
다음 포스팅에는 '파일'을 찾을 때에 유용한 명령어에 대해서 알아보겠습니다.
Window 운영체제에서 파일 탐색기를 켜서 자연스럽게 파일을 찾았죠? 그리고 소리를 조절할 때나 디스플레이 관련돼서 조정하고 싶으면 자연스럽게 제어판을 실행하셨을 거예요. 그것처럼 자연스럽게 파일을 다루실 수 있도록 파일에 관련된 명령어를 포스팅해볼게요.
Thanks for realding!
'Backend > LINUX' 카테고리의 다른 글
[Chapter1] 리눅스의 추억11(feat. 막힘없이 실무까지) (0) 2022.07.30 [Chapter1] 리눅스의 추억10(feat. 막힘없이 실무까지) (0) 2022.07.30 [Chapter1] 리눅스의 추억8(feat. 막힘없이 실무까지) (0) 2022.06.28 [Chapter1] 리눅스의 추억7(feat. 막힘없이 실무까지) (0) 2022.06.28 [Chapter1] 리눅스의 추억6(feat. 막힘없이 실무까지) (0) 2022.06.27