Back to the Basics

[Linux] - Linux 에서 문제를 찾아내는 방법 -cat, tee 본문

카테고리 없음

[Linux] - Linux 에서 문제를 찾아내는 방법 -cat, tee

9Jaeng 2022. 3. 14. 17:37
728x90
반응형

Linux에서 문제를 찾아내는 방법 : log를 잘 보는 방법에 대해 알아보자

처음 리눅스 명령어를 사용할 때에는 경로 확인 pwd , 폴더 이동 cd, 파일, 폴더 조회 ls, 폴더 생성과 삭제 mkdir, rm, 복사 이동 cp, mv 등만 사용하였다. 수업 때 로그를 검색하는 방법에 대해 배웠지만 다음 과정에서 자주 사용하지는 않아서 기억에서 사라질 때 즈음,, AWS 실습을 하다가 Error들이 많이 터지는 바람에 log들을 찾아봐야 했다. 로그가 어마 무시하게 많지는 않았지만 한눈에 보기에 너무 불편하기도 하고 필터링이 필요했기에 이전에 정리했던 이 글을 다시 한번 보면서 grep과 awk를 사용하여 log를 걸러낼 수 있었다.

이제 프로젝트를 들어가면 로그를 분석해야 하는 일이 많아질 것이고 까먹고 사용하지 않으면 눈과 머리가 피로해지고 비효율적인 노가다를 많이 할 것 같아서 다시 공부도 할 겸 정리를 해보았다.

리눅스 CLI 잘 다루면

  • 업무 자동화가 가능해진다 (설치, 배포 등의 자동화가 가능하다)
  • Application의 배포 환경에서 문제를 찾아낼 수 있다.
  • 로그를 보기 위해 거북목을 하지 않아도 되고 눈의 피로를 줄일 수 있다.

Linux에서 Log 보기

어떤 Error나 문제가 발생했을 때 또는 MAU , CAU등의 정보를 알아내기 위해 log를 분석해야 할 경우 등의 작업을 처리하기 위해서는 CLI 상에서 수많은 log 중에서 원하는 log를 찾을 수 있어야 한다. 이를 위해 다음의 명령어들에 대해 알아보자.

cat, awk, sort, uniq, head/tail, grep

그림들을 아래의 사이트에서 퍼왔다. 만화로 설명을 해놓은 사이트이다. Julia Evans 사이트

Julia Evns

1) cat

위의 설명대로 cat은 명령어 다음에 오는 파일의 내용을 보여준다.

  • cat >file.txt를 하면 간단한 editor로도 사용을 할 수 있다.     
  • *. txt는 해당 경로에 있는 모든 txt 파일들을 함께 보여준다.

  • cat -n을 사용하면 번호를 붙여서 내용을 보여준다. 여러 파일이 있을 때 *. txt을 했을 때에는 각 파일마다 번호를 붙인다.

  • zcat은 gzipped file 즉, 압축 파일의 contents를 볼 수 있게 해주는 명령어 이다. (압축을 풀지 않아도 볼 수 있다) 압축 파일을 표준 출력으로 확장하여 내용을 볼 수 있게 해 준다.
  • zcat < 압축 파일명
  • 여러 압축 파일을 보고 싶다면 zcat < 압축파일 1 < 압축파일 2... <..

2) tee

  • 표준 입력(standart input)을 읽어서 표준 출력 (standart output)과 file에 쓰는 명령어이다. 아래의 명령여를 실행하면 outfile이라는 파일이 생성되고 hello라는 문구가 표시된다. 또한 terminal에도 hello가 표시된다. 표준 입력에서 읽은 내용을 표준 출력에도 쓰이기 때문에 표준 입력에서 읽은 내용이 표시된다.

  • 만약 표준 출력에 출력되지 않게 하려면 tee의 맨 마지막에 널 디바이스인 /dev/null은 연결해주면 된다
  • 파일에 append 하는 방법은 아래와 같이 두 가지가 있다.
    • echo "hello" >> filename
    • echo "hello" | tee -a filename

위의 두 가지 방법 중 굳이 아래와 같이 tee를 사용하여 append를 해야 하는 경우가 있다. 

예를 들면 아래와 같이 shell에서 root 권한인 파일에 내용을 추가하기 위해 sudo를 사용하여 출력을 Redirection 할 경우에도 (redirection이란 연산의 결과를 임의로 다른 장치로 보내는 것을 말한다) 일반 사용자로 전환이 되므로 root 권한으로 파일에 읽거나 내용을 추가하는 경우 제대로 동작하지 않는다.  shdo echo로 root 소유인 파일에 시도를 하면 "permission denide"라는 error가 발생하면서 추가에 실패하고 만다.

$ sudo echo "hi" >> hello.txt

 

아래와 같이 tee를 사용하면 stdin을 받아서 화면에 출력해주고 파일에도 추가를 해준다. 따라서 이런 경우엔 echo를 받아서 sudo tee를 하면 정삭적으로 동작을 한다.

$ echo "hi" | sudo tee -a hello.txt

tee는 shell script에서 root 권한으로 특정 파일을 쓰거나 append 할 때 주로 사용된다.

다음 포스팅에서는 알면 매우 유용한 AWK에 대해 정리하여 올리겠다.

 

728x90
반응형
Comments