이미 소장하고 있다면 판매해 보세요.
|
1장. 기초 내용 빠르게 살펴보기
__기본 커맨드 ____날짜와 시간 출력: date 커맨드 ____로그인된 사용자 확인: who 커맨드 ____문자 출력: echo 커맨드 __파일 작업 ____파일 출력: ls 커맨드 ____파일 내용 출력: cat 커맨드 ____파일의 단어 수 계산: wc 커맨드 ____커맨드 옵션 ____파일 복사: cp 커맨드 ____파일 이름 변경: mv 커맨드 ____파일 삭제: rm 커맨드 __디렉터리에서 작업 ____홈 디렉터리와 경로 이름 ____작업 디렉터리 출력: pwd 커맨드 ____디렉터리 변경: cd 커맨드 ____ls 커맨드 ____디렉터리 생성: mkdir 커맨드 ____특정 파일을 다른 디렉터리로 복사 ____디렉터리 간 파일 이동 ____파일 링크: ln 커맨드 ____디렉터리 삭제: rmdir 커맨드 __파일 이름 대체 ____별표 ____일치하는 단일 문자 __파일 이름의 미묘한 차이 ____파일 이름의 공백 ____기타 특이한 문자 __표준 입력/출력과 I/O 리디렉션 ____표준 입력과 표준 출력 ____출력 리디렉션 ____입력 리디렉션 __파이프 ____필터 __표준 에러 __추가 커맨드 ____한 라인에 하나 이상의 커맨드를 입력 ____커맨드를 백그라운드로 실행하기 ____ps 커맨드 __커맨드 요약 2장. 셸이란? __커널과 유틸리티 __로그인 셸 __셸에 커맨드를 입력 __셸의 책임 ____프로그램 실행 ____변수와 파일 이름 대체 ____I/O 리디렉션 ____파이프라인 연결 ____환경 제어 ____인터프리터 프로그래밍 언어 3장. 필요한 도구 __정규 표현식 ____모든 문자와 일치: 마침표(.) ____라인의 시작과 일치: 캐럿(^) ____라인의 끝과 일치: 달러 기호($) ____문자 집합과 일치: […] 구문 ____0개 이상의 문자와 일치: 별표(*) ____하위 패턴의 정확한 숫자와 일치 :\{...\} ____일치하는 문자 저장: \(...\) __CUT __PASTE __sed __tr __grep __sort __uniq 4장. 함께 가는 여행 __커맨드 파일 ____주석 __변수 ____변수의 값 출력하기 ____정의되지 않은 변수는 널 값을 가진다 ____파일 이름 대체와 변수 ____${variable} 구문 __내장 정수 연산 5장. 따옴표 __작은따옴표 __큰따옴표 __역슬래시 ____역슬래시를 사용해 여러 라인에 걸쳐 커맨드 실행하기 ____큰따옴표 내의 역슬래시 __커맨드 대체 ____역따옴표 ____$(...) 구문 ____expr 커맨드 6장. 매개변수 전달하기 __$# 변수 __$* 변수 __전화번호부에서 특정 인물을 찾는 프로그램 __전화번호부에 특정 인물을 추가하는 프로그램 __전화번호부에서 특정 인물을 삭제하는 프로그램 ____${n} __shift 커맨드 7장. 결정, 결정 __종료 상태 ____$? 변수 __test 커맨드 ____문자열 연산자 ____test에 대한 대체 형식 ____정수 연산자 ____파일 연산자 ____논리 부정 연산자 ! ____논리 AND 연산자 -a ____괄호 ____논리 OR 연산자 -o __else 구문 __exit 커맨드 ____rem 프로그램 다시 살펴보기 __elif 구문 ____rem의 다른 버전 __case 커맨드 ____특수 패턴 매칭 문자 ____프로그램을 디버깅할 수 있는 -x 옵션 ____case 살펴보기 __널 커맨드 : __&&와 || 구문 8장. 루프 __for 커맨드 ____$@ 변수 ____리스트 없는 for __while 커맨드 __until 커맨드 __루프 더 살펴보기 ____루프에서 나가기 ____루프에서 나머지 커맨드 건너뛰기 ____백그라운드로 루프 실행하기 ____루프에서의 I/O 리디렉션 ____루프 안팎으로 데이터를 파이프로 연결하기 ____한 라인에서 루프 실행하기 __getopts 커맨드 9장. 데이터를읽고출력하기 __read 커맨드 ____파일을 복사하는 프로그램 ____문자를 이스케이프 처리하는 특별한 echo ____mycp를 개선한 버전 ____mycp의 최종 버전 ____메뉴로 구동되는 전화번호부 프로그램 ____$$ 변수와 임시 파일 ____read의 종료 상태 __printf 커맨드 10장. 사용자환경 __지역 변수 ____서브셸 __export 변수 ____export -p __PS1과 PS2 __HOME __PATH __현재 디렉터리 ____CDPATH __서브셸의 추가 정보 ____. 커맨드 ____exec 커맨드 ____(...)와 {...;} 구문 ____서브셸에 변수를 전달할 수 있는 다른 방법 __.PROFILE 파일 ____term 변수 ____TZ 변수 11장. 매개변수 더 살펴보기 __매개변수 대체 __$0 변수 __set 커맨드 __IFS 변수 __READONLY 커맨드 __unset 커맨드 12장. 미진한 부분 살펴보기 __eval 커맨드 __wait 커맨드 ____$! 변수 __trap 커맨드 ____매개변수 없는 trap ____시그널 무시하기 ____trap을 재설정하기 __I/O 추가 정보 ____[&-와 ]&- ____인라인 입력 리디렉션 ____셸 아카이브 __함수 ____함수 정의 제거 ____return 커맨드 __type 커맨드 13장. rolo 수정 __데이터 형식에 대한 고려 사항 __rolo __add 프로그램 __lu 프로그램 __display 프로그램 __rem 프로그램 __change 프로그램 __listall 프로그램 __예시 결과 14장. 대화식 및 비표준 셸 기능 __올바른 셸 얻기 __ENV 파일 __커맨드라인 편집 __커맨드 히스토리 __vi 라인 편집 모드 ____히스토리에서 커맨드 접근하기 __emac 라인 편집 모드 ____커맨드 히스토리의 커맨드에 접근하기 __커맨드 히스토리에 접근할 수 있는 또 다른 방법 ____history 커맨드 ____fc 커맨드 ____r 커맨드 __함수 ____지역 변수 ____자동으로 로드되는 함수 __정수 산술 연산 ____정수 타입 ____여러 진수의 숫자 __alias 커맨드 ____앨리어스 삭제하기 __배열 __작업 제어 ____멈춰진 작업과 fg 및 bg 커맨드 __기타 기능 ____cd 커맨드의 기타 기능 ____물결표 대체 ____검색 순서 __호환성 요약 |
Stephen Kochan
Patrick Wood
김용환의 다른 상품
|
이 책에서 다루는 내용
유닉스 시스템에서 제공되는 많은 유틸리티 활용하기 강력한 셸 스크립트 작성법 셸의 내장 의사 결정 구문과 루프 구문 사용 셸의 강력한 따옴표 메커니즘 사용 셸의 내장 히스토리와 커맨드 편집 기능 최대한 활용하기 유닉스 커맨드에 정규 표현식 사용하기 Korn 셸과 Bash 셸의 특수 기능 활용 셸 언어의 버전 간의 주요 차이점 확인 유닉스 시스템이 사용자에 응답하는 방식 사용자 정의하기 셸 환경 설정 여러 함수 사용하기 스크립트 디버깅 이 책의 구성 이 책은 사용자가 시스템과 커맨드라인의 기본 사항을 잘 알고 있다고 가정한다. 즉, 로그인 방법을 알고 있어야 할 뿐 아니라 파일의 생성, 편집, 삭제 방법과 디렉터리로 작업하는 방법을 알고 있다고 가정한다. 리눅스 또는 유닉스 시스템을 사용한 적이 없다면 1장, ‘기초 내용 빠르게 살펴보기’에서 기본적인 내용을 살펴본다. 또한 1장에서 파일 이름 대체, I/O 리디렉션, 파이프도 살펴본다. 2장, ‘셸이란?’에서는 셸의 실제 개념과 동작 원리를 설명하고, 운영체제와 상호작용하는 주요 방법이 어떻게 끝나는지 보여준다. 시스템에 로그인할 때마다 무슨 일이 발생하는지 살펴보고 셸 프로그램이 시작되는 방법, 커맨드라인을 구문 분석하는 방법, 다른 프로그램을 실행하는 방법을 다룬다. 3장, ‘필요한 도구’에서는 셸 프로그램 작성에 유용한 툴을 설명한다. 3장에서 다루는 커맨드는 cut, paste, sed, grep, sort, tr, uniq다. 틀림없이 해당 커맨드의 선택은 주관적이지만 이 책의 모든 부분에서 개발할 프로그램에서 사용된다. 또한 3장에서는 sed, grep, ed와 같은 많은 유닉스 커맨드에서 사용되는 정규식에 대해 자세히 설명한다. 4장에서 9장까지는 프로그램 작성에 도움을 주는 셸의 사용 방법을 설명한다. 즉, 커맨드를 직접 작성하는 방법, 변수를 사용하는 방법, 매개변수를 받을 수 있는 프로그램을 작성하는 방법, 결정하는 방법, 셸의 for, while, until과 루프 커맨드를 사용하는 방법, read 커맨드를 사용해 터미널 또는 파일에서 데이터를 읽는 방법을 다룬다. 5장, ‘따옴표’에서는 셸의 가장 흥미로운 부분 중 하나인 따옴표를 해석하는 방식에 대해 장 전체에 걸쳐 다룬다. 이 책의 9장까지 셸의 모든 기본 프로그래밍 구조를 다루기 때문에 여러분은 특정 문제를 해결할 수 있는 셸 프로그램을 작성할 수 있다. 10장, ‘사용자 환경’에서는 매우 중요한 주제로 셸이 작동하는 방식인 환경(environment)을 설명한다. 지역 변수, export 변수와 서브 셸, 그리고 HOME, PATH, CDPATH 같은 특수한 셸 변수와 .profile 파일을 설정하는 방법을 살펴본다. 11장, ‘매개변수 더 살펴보기’와 12장, ‘미진한 부분 살펴보기’에서는 일부 미진한 부분을 살펴보고 13장, ‘rolo 수정’에서는 책 전체에 걸쳐 개발된 rolo라는 전화번호부 프로그램의 최종 버전을 제공한다. 14장, ‘대화식 및 비표준 셸 기능’에서는 공식적으로 IEEE POSIX 표준 셸의 일부가 아니거나(대부분의 유닉스 및 리눅스 셸에서는 사용할 수 있음) 프로그램 대신 대화식으로 사용되는 셸의 기능에 대해 설명한다. 이 책의 철학은 예시를 통해 가르치는 것이다. 우리는 특정 기능의 사용 방법을 많은 말로써 설명하는 것보다 적절하게 선택된 예시를 통해 설명하는 것이 여러분이 이해하는 데 훨씬 효과적이라고 믿는다. ‘천 마디 말보다 한 번 보는 게 더 낫다.’라는 오래된 격언은 코딩에도 적용되는 것 같다. 여러분의 시스템에서 모든 예시를 입력하고 테스트해보길 권한다. 테스트를 진행하면서 셸 프로그래밍을 숙달할 수 있어야 한다. 실험하는 것을 두려워하지 말라. 프로그램 예시에서 커맨드를 변경해 커맨드의 결과를 확인하거나 다른 옵션 또는 기능을 추가해 프로그램을 좀 더 유용하고 견고하게 만들어보자. 지은이의 말 유닉스와 유닉스 계열의 운영체제는 지난 수십 년 동안 컴퓨팅 분야에서 가장 널리 보급돼 사용되는 운영체제군으로 떠올랐다. 수년 동안 유닉스를 사용해온 프로그래머들에게 이는 놀라운 일이 아니었다. 또한 유닉스 시스템은 프로그램 개발을 잘할 수 있도록 우아하고 효율적인 환경을 제공한다. 1960년대 후반, 벨 연구소에서 데니스 리치(Dennis Ritchie)와 켄 톰프슨(Ken Thompson)이 유닉스를 개발했을 때 그들은 바로 이런 것을 만들어내고자 했다. 유닉스 시스템의 가장 강력한 기능 중 하나는 광범위한 프로그램들이다. 200개 이상의 기본 커맨드는 표준 운영체제와 함께 배포되고 리눅스는 종종 700~1,000개의 표준 커맨드가 함께 제공된다! 해당 커맨드(툴이라고도 함)는 파일의 라인 수를 계산하는 것부터 전자 메일 보내기와 원하는 연도의 달력 표시 등 모든 작업을 수행한다. 그러나 유닉스 시스템의 진정한 강점은 큰 커맨드 집합이 아니라 우아하고 쉽게 해당 커맨드들을 결합해 훨씬 더 정교한 작업을 수행할 수 있다는 것이다. 유닉스의 표준 사용자 인터페이스는 커맨드라인이고 실제로 셸(shell)이다. 셸은 사용자와 시스템 자체(커널)의 가장 낮은 레벨 사이에서 버퍼 역할을 하는 프로그램이다. 셸은 사용자가 입력한 커맨드를 읽고 해당 커맨드를 시스템에서 쉽게 이해할 수 있는 형식으로 변환하는 프로그램이다. 또한 뭔가를 결정하고 루프를 돌며 변수에 값을 저장할 수 있는 핵심 프로그래밍 구문을 포함한다. 유닉스 시스템과 함께 배포되는 표준 셸은 AT&T 배포본에서 파생됐는데, 원래 벨 연구소의 스티븐 본(Stephen Bourne)이 작성한 버전에서 시작됐다. 그 이후 IEEE는 Bourne 셸과 다른 최신 셸을 기반으로 표준 셸을 만들었다. 해당 표준의 현재 버전은 POSIX 표준이라고도 알려진 IEEE Std 1003.1-2001의 Shell and Utilities 볼륨이다. 표준 셸은 이 책의 모든 부분을 위한 기초로 사용된다 이 책의 예시는 맥 OS X 10.11 기반의 맥, 우분투 리눅스(Ubuntu Linux) 14.0, Sparcstation Ultra-30에서 실행되는 SunOS 5.7의 이전 버전에서 테스트 됐다. 14장의 Bash 예시를 제외한 모든 예시는 Korn 셸을 사용해 실행됐지만 Bash와도 모두 잘 작동한다. 셸은 해석 프로그래밍 언어며, 프로그램을 쉽고 빠르게 작성하고 수정하고 디버깅할 수 있다. 첫 번째 프로그래밍 언어로 셸을 선택하길 바라며, 셸 프로그래밍에 익숙해진 후에도 계속 사용하길 바란다. 옮긴이의 말 리눅스는 무료 운영체제지만 안정성이 좋아 많은 회사에서 서버 환경으로 사용되고 있다. 이제 리눅스를 쓰지 않는 IT 회사는 찾아보기 어렵다. 또한 개발과 운영을 동시에 진행해야 하는 데브옵스라면 리눅스는 필수로 알아야 할 운영체제가 되고 있다. 프로그래밍 언어를 사용해 개발된 애플리케이션을 리눅스에서 실행하고 관리하기 위해서는 간단하게 리눅스에 대한 기본 지식을 습득하고 셸 프로그래밍을 기본적으로 해야 한다. 게다가 최근 많은 IT 회사에서 개발자 직군에게 유닉스 계열의 OS X가 설치된 맥북을 지급하고 있다(또한 디자이너 직군과 개발자 직군 뿐 아니라, 일반 기획자와 사무직 직군에게도 지급되고 있어서 맥의 OS X를 알아야 하는 상황이다). 따라서 서버 환경에서만 작업할 수 있는 환경이 로컬 환경에서도 동일하게 구축할 수 있게 됐다. 데브옵스, 클라우드, 도커 기술이 보편화하면서 특히 셸 프로그래밍은 기본적으로 알아야 할 내용이 됐다. 이제는 피해갈 수 없다. 선택이 아닌 필수 지식에 가까워서 부담스러울 수 있겠지만 독자 여러분들이 즐겁게 배우고 리눅스를 깊이 알아가면 좋겠다. 이 책은 셸 프로그래밍을 배우길 원하는 개발자, 시스템 엔지니어, 일반인에게도 도움이 된다. 게다가 이 책의 예제와 설명은 유닉스, 리눅스, OS X 모두를 지원하는 POSIX 표준 셸을 기반으로 한다. 따라서 이 책에서 배운 기술을 대부분의 유닉스 계열 운영체제에서 사용할 수 있다. 많은 유틸리티와 셸 프로그래밍 기술 등 현업에서 적용할 만한 내용이 이 책에 가득하다. 훌륭한 책인 만큼 여러분에게 추천하고 싶다. 나는 리눅스를 평생 친구로 생각해왔다. 특히 윈도우보다 리눅스를 좋아한다. 아마도 대학생일 때, 학교에 있는 유닉스 터미널에서 MUD 게임을 하면서 점점 유닉스 운영체제에 관심을 갖게 된 것 같다. 그리고 조금씩 리눅스 유틸리티와 셸 프로그래밍에 대해 배운 내용을 블로그에 정리하기 시작했다. 이전 직장에서는 리눅스를 조금 안다는 이유로 커널 디바이스 프로그래밍을 해볼 좋은 기회를 얻었다. 리눅스 유틸리티를 알고 리눅스의 동작 방식을 이해하고 때로는 커널 내부 구조를 공부하며 리눅스 지식을 넓히는 것이 좋았다. 아무래도 리눅스 운영체제가 내 말을 알아듣고 내가 원하는 동작을 하는 것이 좋았기 때문이리라. 이 책을 읽는 분들도 내가 느꼈던 희열을 함께 느끼면 좋을 것 같다. 파이팅! |