본문 바로가기

book

아트 오브 셸 원라이너 160제

매우 흥미로운 책이 출간되었습니다.
셀 스크립트라는 분야는 들어보셨고, 시스템 어디엔가 나도 모르게 동작되고 background에서 실행되는 것을 많이 경험하십니다.

막상 학습을 하려고 하려면, 마땅한 자료가 없습니다. 약간 개인적으로 정규화 같은 느낌입니다. 한번에 내가 필요한 것을 구현할수 있지만, 선뜻 작성하기가 어려운 부분이 있습니다. 보통 프로그램과 달리 디버깅이 어려운 부분도 그 한몫을 하는것 같습니다.

셀에 대해서는 꼭 한번 정독으로 공부해보면 좋은 기술영역입니다. 서버의 OS가 대부분 linux계열이여서, 자연스럽게 별도의 설치 없이 shell을 동작시킬수가 있다는 점은 매우 큰 장점입니다. 일반적으로 crontab에 등록된 것을 수행하기 위해서, 아니면, 별도의 OS레벨의 background처리를 하기 위해서 shell을 사용하는데, 이책을 통해서 조금 더 우리가 몰랐던 shell programing을 학습해볼수 있습니다.

 

우리는 언제 shell을 언제 사용할까요?

저의 생각으로는 기존에 구축된 시스템에서 어쩔수 없이 보게 보게 되는 경우가 많은 것 같습니다.

요즘은 shelll을 대체하는 다양한 방법이 있기 때문에, 어색한 shell을 처음부터 사용하지는 않을 것입니다.

하지만 shell은 잘 사용하면, 우리가 알지 못하는 엄청남 장점이 있습니다. 그런 점은 모두 공감하고 마음속에 담아 두고 있습니다

shell을 통해서 비지니스 로직이나 사용자의 front를 다루는 기술은 아니고, OS레벨의 batch나 background에서 수행되는 역활이 대부분이기 때문입니다.

 

목차의 구성은 연습이라는 구성으로 예시와 설명이 있고, 실제 160제를 구성하는 "실전예시"로 구성되어 있습니다.

각 문제 마다 난이도가 표시되어 있어서, 실제 기본이 되는 문제인지 원래 어려운 레벨의 문제인지 파악하기 좋습니다.

 

  • 일본IT월간지에 연재하였던, 특집기사를 모아서 책으로 만들었습니다.
    이 부분이 이 책이 장점이 되는 부분 같습니다.오랜기간 집필되고 기간이 길어지면서, 문제의 난이도 및 범위가 길어져서 정제된 문제가 많이 있다는 부분입니다.
  • 이때 총 160개의 예제가 되어서 책의 제목도 160제로 구성되었습니다.
  • 총 3부로 구성되어 있는데, 1부(셀 조작 기본), 2부(데이터를 자유롭게 다루는 명령어 조합) 3부(시스템 관리 등 구체적인 작업)구성되어 있습니다.
  • 공동집필을 통해서 여러 저자분의 생각하고 우선시 하는 경험이 다양한 범주 및 예시의 문제로 제공되어서, 일반적으로 생각하지 못한 다양한 Case에 대해서 언급되고 있는 부분이 좋았습니다.
  • 원서는 일본어 책이지만, 역자분께서 많은 부분을 한글로 바꾸어서 적적한 예시를 들어주시는 환경이 책을 보는대 어색함 없이 실습을 할 수 있습니다.

 

아래 책 제목에 있는 원라이너에 대해서 저자분은 이렇게 정의합니다.
: 명령줄 인터페이스(커맨드라인 인터페이스)를 사용해서 다양한 기능을 한 행의 셀 명령어로 구혀하는 내용을 다룹니다.

즉 이내용을 풀어서 해석하면, 우리가 아는 장문의 shell script의 예시가 아니라, 특정한 하나의 목적을 잘 수행하기 위한 shell 명령어를 다룬다는 의미입니다.

 

 

PART I 셸과 명령어에 익숙해지기

· shell이 아니라 리눅스을 처음 배우시는 분들에게도 도움이 많이 되는 내용으로 구성되어 있습니다. 
ls 부터 기본적인 명령어가 다 포함되어 있습니다. shell에서 매번 사용하는 명령어만 사용하기 때문에 이번 기회에 전반적으로 살펴보는 기회가 될것입니다. 

· 친절한 해설로 구성되어 있습니다. 아래 그림과 같은 부분은 궁금해하실분들도 있는데, 요런 부분은 검색을 통해서 잘 검색이 안되는 내용인 부분이기도 합니다.

· sed, grep, awk, sort, uniq, xargs에 대해서 다루고 있으며, 익숙해질수 있고 어떠한 옵션을 사용하면 좋을지 잘 제시되어 있습니다.

 

 

PART II 사고 능력 갈고닦기

· 조금은 문법적인 요소를 다룹니다. shell 프로그래밍을 하기 위해서는 변수, 제어구문, 조건문, 값 할당등은 소스를 분석할때 가장 중요한 부분입니다. 배열,[@],[*],[], ^^, [[]]등등 다양한 문법요소를이 소개됩니다. 

· shell간의 호출 (include나 상속의 개념), 인수정의등에 대해서도 다룹니다.

·shell을 이용해서 해당 처리를 많이 하는 경우가 많이 있습니다.

보통 OS의 상태 정보를 추출하기 위해서 command에서 노출된 정보를 가공해서 서버로 전송을 하는 패턴을 많이 사용합니다.

일반적인 모니터링 페이지도 비슷한 원리로 데이터를 수집합니다.

책에서는 이런 테이터도 모두 테이블형식의 데이터로 정의해서 처리합니다. 해당 항목에서 추출하려는 데이터는 특정 형식이 있기 때문에 쉽게 처리할수 있습니다.

· 다양한 데이터 타입을 다루는 방식이 소개됩니다.

REST-API를 통해서 전달받은 데이터를 바로 처리할수 있는 부분은 매우 유용하게 사용할수 있습니다.

 - 우리가 많이 사용하는 데어터 포맷인 JSON을 다룹니다. jq명령어를 사용해서 조회와 가공을 할 수 있습니다.

 - YAML파일을 다루는 방볍도 yq를 통해서 처리하는 방법도 실습합니다.

 - CSV를 다루는 케이스도 학습합니다.

· BOM 식별에 대한 부분도 의미 있습니다. 원도우에서 업로드한 파일에 대한 문제이며, 현업에서도 자주 발생할수 있는 현상입니다.

 

 

PART III 응용하기

· 제일 궁금하고 관심있는 "응용하기" 부분입니다. 이장에서 제시하는 요구사항 또는 처리해야 하는 부분을 실제 shell을 모르다고 가정하고 어떻게 개발을 할 수 있을지 생각해보고, 가정해서 생각을 해보면 좋을것 같습니다.

 

· 리눅스의 구조를 살펴보는 문제들, 설정, 활용등에 대해서 다룹니다. 셀이 수행되는 환경이 리눅스이고 서버 환경으로 많이 사용합니다. 그래서 이제 명령어만 아는 것이 아닌 리눅스에 대해서 설명합니다.

실제 언급된 목자를 보면, 일반적인 부분도 있고 새로운 부분도 있지만 매우 도움되는 사항들이 보입니다. 

디스크 사용량 집계 / 내용이 같은 파일 검색 / 파일갯수 등등 현업에서 필요하고 조금 더 깊이 있는 프로세서, 아이노드 및 USB연결에 대한 부분도 각각 필요한 부분이 설명이 있어서 실습해보고 이해하기 좋습니다.

 

다른 장에서는 시스템 분석에 필요한 dig, tcpdump등 한줄로 처리 할 수 있는 다양한 shell명령어가 제공됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





 

다양한 shell을 경험해보면서, 생각의 폭이 넓어지는 느낌을 받았습니다. 이때는 이것을 잘 활용할수 있겠구나. 그러한 경험을 얻어갈수 있습니다. 잘 사용하지 않는것을 잘 사용하게 만들어줄 수 있는 책이라고 생각합니다.