728x90

종종 사용하지만 매일 사용하지 않는 명령이나 옵션들이 많습니다.

금방 기억이 나면 좋으련만 나이가 들어가는지 매번 구글의 도움을 받게 되네요.

겸사겸사 블로그에 기록해 두고 저와 비슷한 기억력 감퇴를 겪는 분들에게

일말의 도움을 주고자 이렇게 시간을 할애해 봅니다. (훗)

 

 


리눅스나 맥 환경에서 grep 은 정말 유용한 명령입니다.

텍스트 파일에서 필요한 내용을 찾아내는데 도사이기 때문이죠.

간단한 사용법은 cat 등으로 텍스트 파일을 읽고

파이프로 grep 을 연결해서 필요한 필터 조건을 거는 방법입니다. 

 

// "NoPD" 가 들어간 행을 찾습니다
$ cat test.txt | grep NoPD

 

만약 대량의 로그파일에서 필요한 내용을 찾으려면 어떻게 해야 할까요?

단순한 웹 엑세스 로그라면 위와 같은 방법에 한번 더 파이프로 awk 를 연결하면 되겠습니다만 

Java 의 trace 로그라던가 debug 성격의 로그라면 

에러 문자열 앞뒤에 있는 여러 행을 또 찾아야 합니다.

 

이럴때 써먹을 수 있는 grep 의 좋은 옵션이 있었으니

After 를 상징하는 -A 와 Before 를 나타내는 -B 옵션이 우리의 구세주입니다. 

아래와 같은 파일이 있다고 해보겠습니다. 

 

$ cat test.txt
03/23	1
03/23	2
03/23	3
03/23	4
03/23	separator
03/23	5
03/23	6
03/23	7
03/23	8

 

우리는 separator 라는 문자를 찾도록 grep 을 이용할 겁니다.

그리고 여기에 -A 와 -B 옵션을 이용해서

separator 문자열 앞 뒤의 행들을 같이 결과로 출력해 보겠습니다. 

 

// separator 문자열이 포함된 행 바로 뒤(After)의 4개 행을 출력합니다. 
$ cat test.txt | grep -A 4 separator
03/23	separator
03/23	5
03/23	6
03/23	7
03/23	8

// separator 문자열이 포함된 행 바로 직전(Before)의 4개 행을 출력합니다.
$ cat test.txt | grep -B 4 separator
03/23	1
03/23	2
03/23	3
03/23	4
03/23	separator

 

네, 참 쉽고 편리합니다.

만약 separator 가 여러개 있다면 어떻게 될까요?

 

// separator 가 여러 행에 존재하는 파일
$ cat test.txt
03/23	1
03/23	2
03/23	3
03/23	4
03/23	separator
03/23	5
03/23	6
03/23	7
03/23	8
03/24	separator
03/24	9
03/24	10
03/24	11
03/24	12

// 모든 separator 를 찾아 이후(After) 4개의 행을 출력합니다. 친절하게 -- 로 행 나눔까지...
$ cat test.txt | grep -A 4 separator
03/23	separator
03/23	5
03/23	6
03/23	7
03/23	8
--
03/24	separator
03/24	9
03/24	10
03/24	11
03/24	12

// 모든 separator 를 찾아 이전(Before) 4개의 행을 출력합니다. 역시... 친절합니다. 
$ cat test.txt | grep -B 4 separator
03/23	1
03/23	2
03/23	3
03/23	4
03/23	separator
--
03/23	5
03/23	6
03/23	7
03/23	8
03/24	separator


알아서 척척척 일을 잘 해줍니다.

before, after... 로 grep 의 -B, -A 옵션을 기억합시다!!

728x90
728x90

회사에서 지급받은 맥북에어(MacBook Air)가 3년을 넘기면서 슬슬 배터리 광탈 현상을 보이기 시작했습니다. 아직 회사에서 터치바(Touch Bar)가 내장된 신형 맥북을 지급하고 있지 않아 노트북 교체 신청을 할까 말까 고민했습니다만, 외부 미팅시마다 베터리 걱정에 끙끙 앓느니 뽑는게 낳을거라는 판단에 기존 맥북프로를 한대 지급받았습니다. 일단 메모리와 디스크 용량 커지니 좋고, 외장 모니터를 두개 연결해서 사용하니 이런 천국이 따로 없네요.


안타깝게도 회사에서 타임머신과 같은 장비를 지급해 주진 않기에 새로 받은 맥북에 정성껏 기존 환경에서 쓰던 설정들을 한땀한땀 옮기는 중입니다. 어플리케이션의 환경 설정 파일은 Import / Export 를 통해 쉽게 진행중입니다만, 운영체제 환경설정은 하나씩 옮겨야 하는 탓에 기억도 안나고 (자주 있는 작업이 아니니...) 여러가지로 괴로운 시간을 보내고 있습니다. 내가 이러려고 새로운 PC 달라고 했나 하는 생각에...


그 중 하나가 맥(Mac)의 파인더(Finder)에서 숨김파일을 보여주는 옵션입니다. 회사 인트라넷 게시판 어딘가에 기술된 내용이 있었습니다만 링크가 어디 갔는지도 모르겠고 해서... 구글링 후 다시 한번 블로그에 옮겨 적어 둡니다. 비슷한 경우가 또 언제 생길지 모르니 쉽게 찾아보기 위한 용도입니다. 후후후...


$ defaults write com.apple.finder AppleShowAllFiles YES && killall Finder


위의 명령을 터미널에서 입력하면 실행중인 파인더 프로세스가 모두 종료되고 모든 파일을 보여주도록 변경된 후 파인더가 다시 실행됩니다. 맥에서 숨김파일은 점(".")으로 시작하는 파일이나 폴더이기 때문에, 명령 실행 전후에 해당하는 파일이나 폴더가 보이는지 살펴보시면 됩니다. 언제나 숨김파일이 보이는게 부담스럽다면 필요할 때 위의 명령을 실행하고, 옵션을 "NO"로 바꾸어서 제한하는 것도 방법입니다.


$ defaults write com.apple.finder AppleShowAllFiles NO && killall Finder


- NoPD -

728x90
728x90

터미널에서 로그파일을 핸들링하면서 자주쓰이는 명령들이 있습니다. 전체 파일을 출력하기 위해서 cat 명령을 사용하고 특정한 컬럼의 값만 출력하기 위해서 파이프로 연결된 awk 명령을 쓸 때가 많습니다. 그런데, 컬럼이 아주 많은 경우에 특정한 컬럼만 제외하고 나머지를 출력할 수 있는 방법이 있을까요? 컬럼이 적은 경우에는 필요한 필드를 나열하는 것도 괜찮지만, 수십개, 수백개의 컬럼이 있다면 그다지 좋은 방법이 될 수가 없습니다.


예를 들어 temp.txt 파일에 아래와 같이 스페이스로 구분된 10개의 컬럼이 있다고 해보겠습니다. 이 파일의 정보들 중에서 특정한 컬럼의 값만 추출하고 싶다면 awk 명령을 이용해서 print 예약어를 이용할 수 있을 겁니다. 


$ cat temp.txt

C1 C2 C3 C4 C5 C6 C7 C8 C9 C10

$ cat temp.txt | awk '{print $3, $5}'

C3 C5


이 데이터 파일에서 거꾸로 3번 컬럼과 5번 컬럼의 값을 제외한 나머지 컬럼의 값을 추출하려면 어떻게 해야 할까요? print 구문의 파라메터로 $3 과 $5 만 빼고 나열해도 되겠지만, 아래와 같이 명령을 입력하면 훨씬 빠르고 쉽게 특정한 컬럼만을 제외하고 데이터를 정제할 수 있게 됩니다.


$ cat temp.txt | awk '{$3=$5=""; print $0}'

C1 C2  C4  C6 C7 C8 C9 C10


동일한 결과물을 얻어내는 방법이 여러가지 있다면 그중에서 가장 간편한 방법을 택하는 것이 누가 뭐라해도 진리일 겁니다. 작업시간을 절약하고 더 집중해야 하는 것들에 몰입하는 하루 되시길 바랍니다!



728x90
728x90

웹 컨텐츠 전송을 위한 프로토콜의 대세가 h2 혹은 http/2 로 자리잡아 가면서 맥(Mac)의 쉘에서도 http/2를 테스트 해야하시는 분들이 많이 늘었을 것으로 생각됩니다. 알려진 내용에 따르면 curl 의 7.34.1 버전 이후에는 --http2 옵션을 통해 http2 로 서버와 통신을 하도록 강제할 수 있지만 환경에 따라서 안되는 경우가 많습니다. curl 은 http/2 를 지원하기 위해 nghttp2 라이브러리를 이용하고 있기 때문에 우선은 nghttp2 를 설치해야 합니다.




nghttp2 가 설치되면 이를 이용해서 curl 을 다시 build 하거나 설치해야 합니다. 홈브루(Homebrew)를 이용하면 간단하게 새로운 버전으로 빌드를 하면서 설치할 수 있으니 아래의 커맨드를 참고해서 설치를 진행하도록 합시다. 아래와 같이 설치한 후 brew info curl 명령을 통해 nghttp2 에 초록색 체크박스가 잘 들어왔다면 일단 설치는 제대로 잘 된거라 봐도 되겠습니다.





그런데 여기까지 하고나서도 curl 을 --http2 옵션으로 실행했을 때 지원하지 않는 프로토콜이라고 에러가 떨어진다면 심볼릭 링크를 한번 교체해줄 필요가 있습니다. 환경 설정에 따라, 사용자 계정에 따라 sudo 를 통해서 권한 상승을 해야 할 필요도 있으니 상황에 따라 적절한 옵션으로 심볼릭 링크를 교체해 주시면 되겠습니다. 




여기까지 해서 마무리가 잘 되었다면 curl --http2 옵션으로 http2 가 활성화된 사이트들, 예를 들어서 아카마이의 https://http2.akamai.com 이라던가 구글 메인 페이지 (https://www.google.com) 쪽으로 요청을 던져볼 수 있게 되셨을 겁니다. 일단 개인적으로 여기까지 해서 문제는 없었습니다만 다른 문제를 겪는 분이 계시다면 댓글로 남겨주시면 한번 살펴보도록 하겠습니다!



- NoPD -




728x90

+ Recent posts