[이 책에서 다루는 내용]
- 시와 주를 알려주는 우편번호 찾기 도구
- 비트코인 주소 정보 추출기
- Dropbox와 iCloud 같은 클라우드 서비스를 활용하는 일련의 도구들
- 여러 파일의 이름을 한꺼번에 바꿔주는 도구와 여러 파일에 한꺼번에 명령을 적용하는 도구
- 이미지 처리 및 수정 도구
[이 책의 대상 독자]
bash는 웹 개발자(이들 중 상당수가 맥OS에서 개발하고 리눅스 서버에 배포한다), 데이터 분석가, 모바일 앱 개발자, 소프트웨어 엔지니어 등 유닉스 계열 서버나 워크스테이션을 사용하는 모든 사람에게 주요한 도구다. 게다가 여러 애호가가 리눅스를 라즈베리 파이 같은 오픈소스 마이크로컴퓨터에서 실행해 자신의 스마트 홈을 자동화하고 있다. 이런 모든 용도에서 셸 스크립트는 완벽하다.
셸 스크립트로 작성된 이들 애플리케이션들은 이미 상당 수준인 bash 기술을 몇 가지 멋진 셸 스크립트로 더욱 발전시키려는 사람들과 가끔씩만 터미널이나 셸 스크립트를 사용하는 사람들 모두에게 무한히 유용하다. 후자의 경우, 몇 가지 지름길을 복습하거나 그 동안 익힌 것들에 좀 더 고급스러운 bash 개념을 보충하고 싶을 수도 있다.
하지만 이 책은 지침서가 아니다. 실용적이고, 전문적인 bash 스크립트와 공통 유틸리티의 응용 예를 (대부분) 짧고 간단한 스크립트로 보여주려고 하지만, 줄 별로 설명하지는 않는다. 각 스크립트의 핵심부를 설명하면, 좀 더 노련한 셸 스크립트 개발자는 코드를 읽음으로써 나머지 스크립트가 어떻게 동작하는지를 알 수 있을 것이다. 그러나 우리는 여러분이 스크립트를 갖고 놀기를 바란다. 코드를 망가뜨리고 고치고 목적에 맞게 수정하면서 알아내기를 바란다. 이들 스크립트의 진정한 목적은 웹 관리나 파일 동기화와 같은 공통적인 문제, 사용하는 도구와 상관 없이 모든 컴퓨터 전문가들이 풀고자 하는 문제들을 해결하는 것이다.
[이 책의 구성]
2판은 원래의 12개 장을 갱신/현대화하고 새롭게 세 장을 추가했다. 각 장은 셸 스크립트의 새로운 기능이나 용례를 보여주고, 셸 스크립트를 사용해 유닉스 사용의 능률을 높일 수 있는 폭넓은 방법을 다룬다. 맥OS 사용자는 이 책의 스크립트 대부분이 리눅스나 맥OS 모두에서 동작할 것이라 믿어도 좋다. 그렇지 않은 경우는 따로 명시해뒀다.
0장, '셸 스크립트 특강'
2판에 새로 추가된 장으로, 새로운 유닉스 사용자에게 bash 스크립트의 문법과 사용법을 간단히 소개한다. '셸 스크립트가 무엇인가?'라는 정말 기초적인 것부터 간단한 셸 스크립트를 만들고 실행하는 것까지, 이 짧고 간단명료한 장은 bash 스크립트를 빠르게 익혀 1장 이후를 잘 이해하는 데 도움을 준다.
1장, '누락된 코드 라이브러리'
유닉스 환경에서 프로그래밍 언어, 특히, C, 펄, 파이썬은 숫자 형식을 검증하고, 날짜 오프셋을 계산하는 등 여러 가지 유용한 작업을 수행하는 유용한 함수와 유틸리티를 담고 있는 대규모의 라이브러리를 갖고 있다. 셸을 사용할 때는 대부분 스스로 해결해야 하므로 이 첫1장은 셸 스크립트를 좀 더 친근하게 만들어주는 여러 가지 도구와 기법에 초점을 맞춘다. 1장에서 배우는 내용은 이 책에 담긴 스크립트와 여러분 스스로의 스크립트 모두에 도움이 될 것이다. 1장은 여러 가지 입력 검증 함수, 간단하지만 강력한 bc의 스크립트 프론트엔드, 매우 큰 숫자를 표시할 때 도움이 되는 콤마를 빠르게 추가하는 도구, echo에서 유용한 -n 플래그를 지원하지 않는 유닉스에서 이를 극복하는 기법, 스크립트에서 ANSI 색깔 코드를 사용하는 스크립트 등을 담고 있다
2, 3장, '사용자 명령어 개선'
이들 두 장은 유닉스를 여러 가지 유용한 방식으로 확장하는 새로운 명령들을 담고 있다. 유닉스의 훌륭한 측면 중 하나는 유닉스가 언제나 진화한다는 점이다. 우리는 다음 해커만큼 이 진화를 돕고 있는 것이다. 따라서 이 두 장은 친절한 대화형 계산기, 삭제 취소 도구, 알림/이벤트 추적 시스템, locate 명령의 재구현, 다중 시간대 date 명령, 디렉터리 목록의 유용함을 더해주는 새로운 버전의 ls를 구현하는 스크립트들을 제공한다.
4장, 'UNIX 트윅'
이것은 이단일 수도 있지만, 수십년간 개발됐음에도 불구하고, 유닉스에는 문제가 있는 것처럼 보일 때가 있다. 서로 다른 종류의 유닉스 사이를 움직이면, 특히, 오픈소스 리눅스 배포판과 맥OS나 솔라리스, 레드햇과 같은 상업용 유닉스 사이에는 플래그가 없거나, 명령이 없거나, 명령 사이에 일관성이 없는 등의 문제가 있다. 따라서 4장은 서로 다른 유닉스 사이에 조금이라도 나은 일관성을 제공하도록 유닉스 명령을 다시 작성하거나 프론트엔드를 제공한다. 여기에는 비GNU 명령에 GNU 스타일이 긴 이름 명령 플래그를 추가하는 방법도 포함된다. 다양한 파일 압축 유틸리티를 상당히 쉽게 이용할 수 있는 스마트 스크립트도 볼 수 있다.
5, 6장, '시스템 관리: 사용자 관리와 시스템 유지보수'
이 책을 집어 들었다면, 개인용 우분투나 BSD 서버일지라도 하나 이상의 유닉스 시스템에 대한 관리자 접근 권한과 관리 책임을 갖고 있을 가능성이 높다. 이들 두 장은 디스크 사용량 분석 도구, 할당된 쿼터를 넘긴 사용자들에게 이메일을 자동으로 보내주는 디스크 쿼터 시스템, killall 재구현, crontab 검증기, 로그 파일 순환 도구, 몇 가지 백업 유틸리티 등 관리자의 삶을 향상시키는 다수의 스크립트를 제공한다.
7장, '웹과 인터넷 사용자'
7장은 유닉스 커맨드 라인이 인터넷상의 자원을 활용하는 훌륭한(그리고 간단한) 방법을 제공한다는 점을 보여주는 정말 멋진 셸 스크립트 기법을 다수 담고 있다. 여기 담겨 있는 것으로는 웹 쪽으로부터 URL을 추출하는 도구, 날씨 추적기, 영화 데이터베이스 검색 도구, 웹 사이트에 변경이 생기면 자동으로 이메일을 보내주는 웹 사이트 변경 추적기 등이 있다.
8장, '웹 마스터가 할 수 있는 다양한 기능'
어쩌면 여러분은 웹 사이트를 운영하고 있을 수도 있다. 자신의 유닉스 시스템을 이용하거나 네트워크상의 어딘가에 있는 공유 서버를 이용할 수도 있다. 여러분이 웹 마스터라면, 8장의 스크립트는 그때그때 웹 쪽을 만들고, 웹 기반 사진첩을 만들고, 심지어 웹 검색을 기록하는 흥미로운 도구를 제공한다.
9, 10장, '웹/인터넷 관리와 인터넷 서버 관리'
이들 두 장은 인터넷을 통해 서비스를 제공하는 서버의 관리자가 겪는 어려움을 다룬다. 여기에는 웹 서버 트래픽 로그의 서로 다른 측면을 분석하는 두 가지 스크립트, 웹사이트의 깨진 내외부 링크를 식별하는 도구, .htaccess 파일의 정확도를 쉽게 유지하도록 해주는 매끄러운 아파치 웹 패스워드 관리 도구가 담겨 있다. 디렉터리와 전체 웹사이트를 미러링하는 기법도 다룬다.
11장, '맥OS 스크립트'
매력적이고, 상업적으로 성공한 GUI를 갖춘 맥OS는 유닉스를 사용하기 쉬운 운영체제로 통합하는 엄청난 도약이다. 중요한 것은, 맥OS는 예쁜 인터페이스 뒤에 완전한 유닉스를 감추고 있기 때문에 다수의 유용하고 교육적인 스크립트를 작성할 수 있고, 11장은 바로 이를 다룬다. 자동화된 화면 캡처 도구 외에도, 11장은 iTunes가 음악 라이브러리를 저장하는 방법, Terminal 윈도우 제목을 바꾸는 방법, 유용한 open 명령을 개선하는 방법을 다룬다.
12장, '재미있는 셸 스크립트 게임'
최소한 몇 가지 게임도 들어 있지 않은 프로그래밍 책이 있을까? 12장은 여섯 가지 재미있고 도전적인 게임을 만들기 위한, 이 책에서 가장 복잡한 기술과 아이디어를 담고있다. 12장의 목표가 즐거움이기는 하지만, 각 게임의 코드 또한 공부할 가치가 있다. 행맨 게임은 특히, 깔끔한 코딩 기법과 셸 스크립트 트릭을 자랑한다.
13장, '클라우드 환경에서의 작업'
이 책의 첫 번째 판이 나온 이래로, 인터넷은 우리의 생활의 점점 더 많은 부분을 책임지게 됐다. 우리 삶의 상당 부분은 여러 장치와 파일을 iCloud, 드롭박스, 구글 드라이브와 같은 클라우드 서비스와 동기화하며 진행된다. 13장은 파일과 디렉터리가 백업되고 동기화되도록 해 이들 서비스를 백분 활용할 수 있도록 하는 셸 스크립트를 다룬다. 사진을 다루거나 텍스트를 음성으로 변환하는 맥OS의 특별한 기능을 자랑하는 몇 가지 셸 스크립트도 포함된다.
14장, '이미지 매직과 그래픽 파일'
커맨드 라인 애플리케이션이라도 텍스트 기반 데이터나 그래픽에 제한될 필요는 없다. 14장은 전적으로 커맨드 라인에서 오픈소스 소프트웨어 이미지 매직에 포함된 이미지 처리 도구를 이용해 이미지를 식별하고 다루는 방법을 다룬다. 이미지 종류를 식별하는 데에서부터 이미지에 테를 두르고 워터마크를 넣는 데까지 14장의 셸 스크립트는 공통적인 이미지 작업뿐만 아니라 몇 가지 추가 작업도 수행한다.
15장, '요일과 날짜'
마지막 장은 두 날짜가 얼마나 떨어져 있는지, 주어진 날짜의 요일은 뭔지, 특정 날짜까지 며칠이 남았는지 등 날짜와 예약을 다루는 지루한 작업을 간단하게 만들어준다. 우리는 이들 문제를 사용하기 쉬운 셸 스크립트로 해결한다.
부록 A, '윈도우 10에 Bash 설치하기'
두 번째 판을 준비하는 동안, 마이크로소프트가 오픈소스 소프트웨어에 대한 입장을 크게 바꾸기 시작했다. 2016년에 완전한 bash 시스템을 윈도우 10용으로 발표하기에 이른 것이다. 이 책의 예제들이 이 버전의 bash에서 테스트되지는 않았지만, 다수의 개념과 해법은 매우 이식성이 높다. 부록 A는 윈도우 10에 bash를 설치하는 방법을 다뤄 여러분이 윈도우 기계에서 멋진 셸 스크립트를 직접 작성해볼 수 있도록 한다.
부록 B, '보너스 스크립트'
훌륭한 보이 스카우트와 걸 스카우트는 모두 언제나 대안을 갖고 있어야 한다는 것을 알고 있다. 우리의 경우에는 이 책을 준비하는 동안 무슨 일이 일어나 스크립트 중 일부를 교체해야 할 때에 대비해 예비 셸 스크립트를 갖고 있기를 바랐다. 알고 보니 예비 스크립트는 필요치 않았지만, 친구에게 비밀을 알려주지 않는 것은 재미없다. 부록 B는 3개의 추가 스크립트를 담고 있다. 다량을 파일의 이름을 바꾸고, 다량의 파일에 대해 명령을 수행하고, 달의 위상을 알아낸다. 이미 101개의 스크립트를 준비한 이상, 이들 스크립트를 우리끼리만 간직할 수는 없었다.
펼쳐보기
데이브 테일러(Dave Taylor)
1980년부터 컴퓨터 업계에 몸담았다. BSD 4.4 유닉스에 기여했고, 개발한 소프트웨어가 주요 유닉스 배포판에 포함돼 있다. 대중 강연으로 수상한 적이 있고, 수천 개의 잡지 및 신문 기사를 썼다. [Learning Unix for OS X](O'Reilly Media, 2016), [Solaris 9 for Dummies](For Dummies, 2003), [Sams Teach Yourself Unix in 24 Hours](Sams Publishing, 2005) 등 20권이 넘는 책을 썼다. 리눅스 저널의 인기 있는 칼럼니스트로, 고객 기술 지원과 신기한 물건들(gadget)에 대한 리뷰를 담은 웹 사이트(askdavetaylor.com)를 운영하고 있다.
브랜든 페리(Brandon Perry)
오픈소스 .NET 구현인 모노의 출현과 함께 C# 애플리케이션을 작성하기 시작했다. 여유 시간에는 Metasploit 프레임워크용 모듈을 작성하거나, 바이너리 파일을 파싱하거나, 이것저것 뒤적이기를 좋아한다.
옮긴이 김기주
포스텍 컴퓨터공학과와 동 대학원을 졸업한 후, 지금은 elastic.co에서 일래스틱서치 사용자들을 돕고 있다. LG전자에서 타임머신 TV, 썬마이크로시스템과 오라클에서 자바 VM 관련 개발에 참여했다. 공저로 [Security Plus For Unix](영진출판, 2000), 역서로 에이콘출판에서 출간한 [임베디드 프로그래밍 입문](2006), [실시간 UML](2008), [리눅스 API의 모든 것](2012), [리눅스 실전 가이드](2014)가 있다.
옮긴이 김병극
IMF 시절 웹 프로그래밍을 시작으로 SW 개발을 시작했으며, 그 후 삼성, 팬택 피처폰의 데이터 서비스(Data Service) 및 애플리케이션(Application) 관련 업무를 진행 중 피처폰에 자바 VM을 포팅하는 일이 인연이 돼 썬마이크로시스템과 오라클에서 자바 VM 관련 개발 업무를 했다. 현재는 시놉시스(Synopsys)의 정적 분석, 동적 분석 및 퍼징 테스트(Fuzzing test) 제품의 기술 지원 업무를 맡고 있다.
옮긴이 송지연
지엔텔, 노키아 지멘스 네트웍스에서 근무한 경험이 있는 WCDMA, LTE 분야의 통신 기술 엔지니어 출신으로, 취미로 팀을 개발에 한동안 푹 빠져 있기도 했다. 현재는 주전공인 소프트웨어 개발 분야로 돌아와 오라클 자바 개발 팀을 거쳐 그레이스노트 코리아에서 근무 중이며, 역서로는 [스프링 프레임워크 핵심 노트](한빛미디어, 2013)와 [리눅스 실전 가이드](에이콘출판, 2014) 등이 있다.
펼쳐보기