또이리의 Server Engineer

리눅스 grep 명령어 본문

Linux Engineer

리눅스 grep 명령어

또이리 2020. 11. 6. 00:07

리눅스 grep 명령어

Linux command 리눅스 필수 명령어 grep 이번 스토리는 grep 명령어에 대해서 설명해 보겠습니다. 리눅스를 사용하시면 필수적으로 사용하는 명령어입니다.

 

grep는 문자열로 검색하는 명령어입니다. find가 파일 이름, 디렉터리 이름, 속성 등을 조건으로 파일 또는 디렉터리를 검색하는 명령어라면 grep는 find와 성격이 다릅니다.

 

해당 파일이나 메시지에서 그 안에 포함된 문자열로 검색하는 명령어입니다.

 

dmesg로 예를 한번 들어보겠습니다. dmesg 란 dmesg ("display message" 또는 "driver message"를 의미합니다.)는 거의 대부분의 리눅스 OS와 유닉스 기반의 운영체제에 존재하는 명령어로 커널의 메시지를 출력하는 역할을 합니다.

 

서버가 부팅된 후, 로그인을 하고 dmesg를 타이핑하면 출력하여 볼 수 있습니다. 언제나 dmesg를 타이핑하면 출력해서 메시지를 보여줍니다. 일단, 부팅 메시지를 설명해 드리겠습니다.

 

리눅스 서버가 부팅, 즉 포스팅이 될 때 커널이 메모리로 불러들여집니다. 메모리에 얹어지는 것입니다. 이 단계에서 커널에 내장된 각 장치(device) 드라이버가 해당 하드웨어를 탐색하게 됩니다.

 

하드웨어를 발견하면, 그 장치에 대해 알려주거나 상태를 메시지로 출력하게 됩니다. 커널 내 특정 모듈의 존재 여부와 전달된 매개 변수 값, 오류가 발생했다면 어떤 것인지 출력해서 보여줍니다.

 

그런데 이 메시지를 모두 읽기 전에 화면에서 사라질 정도로 빨리 지나갑니다. 리눅스 서버를 부팅하면, OS에 진입하기 전에 메시지들이 죽죽 지나가는 것을 볼 수 있습니다.

 

그렇기 때문에 dmesg 명령어로 시스템이 부팅된 후에 이러한 메시지를 출력해서, 필요하면 볼 수 있습니다.

부팅 이후에는 커널에서 진단한 메시지를 추가로 출력할 수 있습니다.

 

예를 들면 Input/Output 장치에서 오류가 발생하거나 USB같은 장치들이 핫스왑, 플러그 인 플러그 되는 경우에도 dmesg에 출력되게 됩니다.

 

dmesg는 부팅 이후에 이러한 메시지를 검토하고 활용할 수 있게 하는 수단으로써 유용합니다. 흔히 D 메시지라고 읽고 있습니다. 출력될 때에는 시스템의 콘솔로 출력됩니다.

 

그래서 콘솔이 사용 중이라면 디메시지는 사용자의 프로그램 출력과 섞이거나 덮어 쓰입니다. 알아볼 수 없게 뒤죽박죽이 될 때도 있습니다. dmesg 출력 메시지 양은 페이지를 몇 번이나 채우고 지나갑니다.

 

그래서 dmesg를 볼 때는 more, tail, less, grep과 같은 텍스트 명령어를 이용해서 보는 경우가 대부분입니다. dmesg는 syslog와 같은 시스템 데몬이 시스템 로그파일에 기록을 합니다. 보통 리눅스 OS에서는 /var/log에 dmesg 파일이 존재합니다.

 

간략하게 dmesg에 대해서 알아보았습니다. dmesg -c 명령어를 실행하게 되면 dmesg가 삭제되며 다시 쌓이게 됩니다.

 

이제 grep 명령어를 사용해서 dmesg를 확인해 보겠습니다. 위에서 설명드렸다시피 grep은 문자열을 토대로 검색을 하는 명령어이기 때문에 해당 문자가 존재하면 표시가 되지만, 내가 보려고 하는 파일에 해당 문자열이 없으면 출력되지 않습니다.

 

dmesg에서 linux라는 단어를 검색해 보겠습니다.

dmesg |<이 긴 작대기는 엔터키 위에 있는 돈표시에 shift키를 함께 누르면 됩니다. shift키를 먼저 눌러야 되겠습니다.

 

파이프 또는 버티칼 바 라고 읽습니다. 이 파이프 뒤에 grep명령어를 써줍니다. 그리고 보통 -i 옵션을 붙이게 됩니다. 지난번 find명령어에서 -iname과 같이 대소문자 구분 없이 검색을 할 수 있는 옵션입니다. 그리고 우리가 찾을 단어, 문자인 linux를 타이핑해주면 됩니다.

 

dmesg | grep -i linux와 같은 명령어가 되겠습니다.

dmesg grep -i linux

위아 같이 dmesg 내에서 linux가 포함된 문자열을 표시해 줍니다. 활용에 따라 다양한 정보를 얻을 수 있습니다.

 

추가적으로 network 라는 단어를 검색해 보겠습니다.

dmesg | grep -i network라고 타이핑하면 됩니다.

dmesg grep -i network

네트워크와 관련된 정보를 볼수 있습니다. eth0, eth1 두 개의 디바이스를 사용할 수 있다는 것도 위의 메시지로 확인할 수 있습니다.

 

이번에는 두단어를 검색해 보겠습니다. 뭐든지 알면 간단합니다. 두 단어 세 단어 추가적으로 활용해서 사용할 수 있습니다. dmesg에서 linux와 network 두 단어를 한 번에 검색해 보겠습니다.

 

dmesg | grep -i 'linux\|network' 따옴표로 시작해서 단어와 단어 사이에 엔터 위의 키 우리나라의 돈 단위 키와 shift를 누른 후 파이프 키를 입력해서 구분을 지어주고 다시 따옴표로 닫으면 됩니다.

 

OS상에서는 돈 표시가 역 슬러시, 백 슬러시로 표시됩니다. 돈 모양으로 표시되어도 관계없으니 사용해도 무방합니다.

grep multi

아직도 작은 따옴표와 큰따옴표의 차이점을 찾지 못했습니다.

이런 식으로 뒤에 단어를 계속 추가해서 한 번에 여러 문자열을 검색할 수 있습니다.

 

유용하게 활용해 보시기 바랍니다. 스토리를 시작 할때 언급드렸듯이 저는 현업에서 가장 실용적이고 자주 사용하는 명령어를 설명드리는 것입니다. 모든 명령어의 활용은 무궁무진하며 옵션 또한 그렇습니다.

 

그 부분을 기억하시기 바랍니다. 언제든지 명령어 뒤에 --help를 사용하시면 명령어의 과한?! 옵션의 세계에 빠지실 수 있습니다.

 

추가적으로 부팅하는데 걸린 시간의 기준을 알고 싶으시면, dmesg 메시지 중 아래와 같은 메시지는 부팅이 끝나고 나서 Freeing init으로 표시된 메모리를 해제할 때 나오는 메시지입니다.

 

그 이후 메시지는 부팅 이후에 표시되는 메시지라고 보시면 됩니다. 그리고 OS를 부팅하는데 걸리는 시간 약 1.46 초라고 보시면 됩니다. 처음에 저는 저 숫자가 무엇을 의미하는지 몰랐습니다. 초, second라고 합니다.

freeing

그리고 dmesg를 실시간으로 보고 싶으시면 아래 watch와 tail명령어를 활용하시면 됩니다.

watch "dmesg | tail -f"

 

이렇게 되면 실시간으로 화면에 dmesg가 표시됩니다.

감사합니다.

'Linux Engineer' 카테고리의 다른 글

Nvidia Tesla A100 - 8GPU error Xid 61  (0) 2020.11.08
우분투 18.04 도커 설치  (0) 2020.11.08
GeForce RTX 3080 vs RTX 3090  (0) 2020.11.04
리눅스 find 명령어  (0) 2020.11.03
다스, 나스, 샌 스토리지  (0) 2020.11.02
Comments