역자 서문
차례
이 책의 사용 방법
저자 서문
1부. 기본 유닉스 환경
1장. 소개
1.1 유닉스에는 뭔가 특별한 것이 있다
1.2 솟아나는 힘을 느껴보자
1.3 유닉스의 핵심
1.4 유닉스와 사용자
1.5 서로 협력하는 프로그램
1.6 여러 가지 셸
1.7 내가 이용하고 있는 셸은
1.8 셸 프로그래밍이 별건가요
1.9 내부 명령어와 외부 명령어
1.10 커널과 데몬
1.11 파일명
1.12 파일명 확장자
1.13 와일드카드
1.14 파일시스템의 트리 구조
1.15 홈 디렉토리
1.16 경로명 생성
1.17 파일 접근 퍼미션
1.18 수퍼유저(루트)
1.19 파일이 아닌 파일
1.20 스크립트
1.21 유닉스 네트워킹과 통신
1.22 X 윈도우 시스템
2장. 도움말 얻기
2.1 man 명령어
2.2 whatis: 온라인 명령어 요약
2.3 whereis: 명령어의 위치를 찾는 방법
2.4 온라인 매뉴얼 페이지 검색하기
2.5 유닉스 시스템에서 시스템 이름을 기억하는 방법
2.6 버전을 확인하는 방법
2.7 tty를 확인하는 방법
2.8 접속자를 확인하는 방법
2.9 info 명령어
2부. 환경 설정
3장. 유닉스 셸 설정
3.1 로그인할 때 일어나는 일
3.2 Mac OS X 터미널 애플리케이션
3.3 셸 설정 파일: 무엇을, 어디서, 왜
3.4 로그인 셸, 대화식 셸
3.5 셸 설정 파일에서 벌어지는 일
3.6 계정 설정을 변경할 때 유용한 팁
3.7 셸 설정 파일에서는 절대 경로를 사용하자
3.8 제때 적용되지 않는 설정 파일
3.9 set prompt 테스트의 비밀
3.10 서로 다른 터미널 자동 설정
3.11 터미널 설정: TERM 환경 변수
3.12 터미널 설정: 원격 호스트 및 X 디스플레이
3.13 터미널 설정: 포트 테스트
3.14 터미널 설정: 환경 변수 테스트
3.15 터미널 설정: 터미널 테이블 검색
3.16 터미널 설정: 윈도우 크기 테스트
3.17 터미널 설정: 윈도우 이름 설정 및 테스트
3.18 호스트별 설정을 위한 .cshrc.$HOST 파일
3.19 "로그인" 셸을 만드는 방법
3.20 RC 파일
3.21 troff를 쓰지 않고 매뉴얼 페이지를 만드는 방법
3.22 -man 매크로를 써서 간단한 매뉴얼 페이지를 만드는 방법
4장. 환경과 상호 작용하기
4.1 기초적인 프롬프트 설정 방법
4.2 정적 프롬프트
4.3 동적 프롬프트
4.4 동적 프롬프트 흉내내기
4.5 vi, rsh 등에서 문제를 일으키는 C 셸 프롬프트
4.6 내장 명령어를 이용한 빠른 프롬프트 설정
4.7 다중행 셸 프롬프트
4.8 윈도우 제목 또는 상태 표시줄의 세션 정보
4.9 초보 사용자를 위한 메뉴 프롬프트
4.10 셸 프롬프트 강조 및 색 입히기
4.11 오른쪽 프롬프트
4.12 $SHLVL로 서브셸 레벨 나타내기
4.13 텅 빈 프롬프트의 유용성
4.14 $cwd보다 좋은 dirs
4.15 외부 명령에서 보낸 시그널로 변수 설정하기
4.16 프롬프트 전 명령, 실행 전 명령, 주기적인 명령
4.17 로그아웃할 때 명령을 실행하는 방법
4.18 본/콘 셸에서 로그아웃할 때 명령을 실행하는 방법
4.19 본 셸에서 실수로 로그아웃하는 것을 방지하는 방법
5장. 터미널, xterm, X 윈도우 활용법
5.1 터미널에 대해 알아둬야 할 사항
5.2 터미널 데이터베이스
5.3 로그인할 때 터미널 유형을 설정하는 방법
5.4 터미널 유형 질의: qterm
5.5 xterm의 크기를 알아내는 방법: resize
5.6 로그인했을 때 터미널이 먹통이 되는 경우
5.7 stty를 이용하여 터미널 설정을 알아내는 방법
5.8 삭제 문자, kill 문자, 인터럽트 문자 설정하기
5.9 xterm과 친구들
5.10 로그인 xterm 및 rxvt
5.11 스크롤 바를 다루는 방법
5.12 몇 행을 저장할 것인가
5.13 xterm에서의 간단한 복사 및 붙이기
5.14 선택을 할 때 단어에 속하는 문자를 정의하는 방법
5.15 제목 표시줄과 아이콘 텍스트 설정법
5.16 폰트를 선택하는 간단한 방법
5.17 xterm 메뉴
5.18 동적으로 폰트를 바꾸는 방법
5.19 xlicpboard를 활용하는 방법
5.20 큰 선택 영역의 문제점
5.21 윈도우 사이에서 복사 및 붙이기 작업을 할 때의 팁
5.22 xterm -e를 써서 한 명령을 실행하는 방법
5.23 xterm -e의 인자는 따옴표로 감싸면 안 된다
6장. X 환경
6.1 xmodmap으로 키 및 버튼을 정의하는 방법
6.2 xev를 이용하여 keysym 매핑을 확인하는 방법
6.3 X 리소스 문법
6.4 X 이벤트 해석
6.5 X 리소스 설정: 개요
6.6 -xrm 옵션으로 리소스를 설정하는 방법
6.7 -name 옵션
6.8 xrdb를 이용하여 리소스를 설정하는 방법
6.9 어떤 클라이언트와 관련된 리소스를 출력하는 방법: appres
6.10 원격 X 클라이언트
3부. 파일 및 디렉토리 작업
7장. 디렉토리 구조
7.1 정리 정돈
7.2 홈 디렉토리
7.3 디렉토리 접근
7.4 사용자의 프로그램과 스크립트를 저장하기 위한 bin 디렉토리
7.5 비밀(개인) 디렉토리
7.6 파일 이름을 정하는 방법
7.7 디렉토리를 많이 만들자
7.8 디렉토리 쉽게 만들기
8장. 디렉토리와 파일
8.1 find 명령을 제외한 모든 것
8.2 세 가지 유닉스 파일 시각
8.3 ls -t와 ls -u를 이용하여 가장 오래된 또는 가장 최근의 파일을 찾는 법
8.4 ls -R을 이용한 모든 서브디렉토리 출력
8.5 ls -d 옵션
8.6 컬러 ls
8.7 GNU ls
8.8 최근에 변경된 파일을 출력하기 위한 csh 앨리어스
8.9 숨김 파일 보기(-A, -a 옵션)
8.10 유용한 ls 앨리어스
8.11 파일을 접근할 수 없다면 이름 속의 공백을 찾아보자
8.12 파일명에 포함된 출력 불가 문자를 출력하는 방법
8.13 유형별로 파일 개수 세기
8.14 시간 및 크기를 기준으로 정렬된 목록
8.15 newer: 가장 최근에 수정한 파일을 출력하는 앨리어스
8.16 oldlinks: 연결되지 않은 심볼릭 링크 찾아내기
8.17 자동으로 유일한 파일명을 고르는 방법
9장. find로 파일을 찾는 방법
9.1 find를 사용하는 방법
9.2 깊은 디렉토리 트리 파고 들어가기
9.3 -print를 잊지 말자
9.4 특정한 이름을 가진 파일을 찾는 방법
9.5 오래된 파일을 찾는 방법
9.6 find 검색 연산자의 전문가가 되자
9.7 find에서 검색할 수 있는 시각
9.8 정확한 파일 시각 비교
9.9 찾아낸 파일에 대해 원하는 명령을 실행하는 방법
9.10 -exec를 이용한 테스트
9.11 -exec 테스트 응용
9.12 한 명령으로 여러 가지 찾기
9.13 파일 유형별 검색
9.14 파일 크기별 검색
9.15 파일 퍼미션별 검색
9.16 소유자와 그룹으로 검색하는 방법
9.17 디렉토리 트리 복사 방법
9.18 "빠른 find" 데이터베이스
9.19 와일드카드와 "빠른 find" 데이터베이스
9.20 find 데이터베이스로 파일을 훨씬 빠르게 찾는 방법
9.21 디렉토리 트리에 대해 grep을 실행하는 방법
9.22 lookfor: 특정 단어가 들어 있는 파일을 찾는 방법
9.23 셸 배열을 써서 디렉토리를 훑어보는 방법
9.24 파일에 대한 하드 링크를 찾는 방법
9.25 -prune으로 파일 찾기
9.26 현재 디렉토리에 대해 간단한 find 명령을 내리는 방법
9.27 find에서 트리의 특정 부분을 건너뛰는 방법
9.28 find에서 네트워크 파일시스템을 검색하지 않게 하는 방법
10장. 파일 링크, 이름 변경 및 복사
10.1 파일 복사가 뭐 그리 복잡할까
10.2 디렉토리 안에는 실제로 무엇이 들어 있을까
10.3 이름이 두 개 이상인 파일
10.4 링크에 대한 추가적인 정보
10.5 링크 생성 및 삭제
10.6 끊어진 심볼릭 링크
10.7 디렉토리에 링크를 거는 방법
10.8 심볼릭 링크의 실제 파일명을 출력하는 방법
10.9 여러 파일의 이름 변경, 복사 및 비교
10.10 대화식으로 여러 파일의 이름을 바꾸는 방법
10.11 또 다른 방법
10.12 cp -r로 디렉토리 트리를 복사하는 방법
10.13 tar와 파이프를 써서 디렉토리 트리를 복사하는 방법
11장. 파일 비교
11.1 diff로 파일을 비교하는 방법
11.2 diff3을 이용하여 세 가지 버전을 비교하는 방법
11.3 컨텍스트 diff
11.4 sdiff
11.5 sdiff에서 어느 한 쪽의 내용을 선택하는 방법
11.6 diff와 탭 간격의 문제점
11.7 cmp와 diff
11.8 comm으로 두 파일을 비교하는 방법
11.9 comm 결과의 형식을 바꾸는 방법
11.10 make는 프로그래머만을 위한 프로그램이 아니다
11.11 make의 또 다른 활용법
12장. 파일 들여다보기
12.1 까다로운 문제를 해결하는 방법
12.2 cat을 정복하는 네 가지 방법
12.3 less
12.4 cat -v 또는 od -c를 써서 출력 불가 문자를 보는 방법
12.5 그 공백 문자에는 뭐가 있을까
12.6 파일 유형을 찾는 방법
12.7 비어 있는 행을 지우는 방법
12.8 파일의 끝 부분만 보는 방법: tail
12.9 tail을 더 정교하게 제어하는 방법
12.10 파일이 점점 커져갈 때 파일 내용을 보는 방법
12.11 GNU tail의 파일 따라가기 기능
12.12 파일 시작 부분만 보는 방법
12.13 행 번호 붙이기
13장. 파일 내용 검색
13.1 grep의 종류
13.2 grep으로 텍스트를 검색하는 방법
13.3 매치하지 않는 텍스트를 찾는 방법
13.4 egrep을 이용한 더 강력한 검색
13.5 grep에서 패턴 목록을 사용하는 방법
13.6 agrep
13.7 rcsgrep을 이용한 RCS 파일 검색
13.8 GNU 컨텍스트 grep
13.9 sed를 이용한 다중행 컨텍스트 grep
13.10 복합 검색
13.11 검색 범위를 빠르게 줄이는 방법
13.12 대소문자 구별 없이 검색하는 방법
13.13 어떤 열에 있는 문자 한 개를 찾는 방법
13.14 look을 이용한 빠른 검색과 철자 검사
13.15 이진 파일에서 단어를 찾는 방법
13.16 강조 기능이 있는 grep
14장. 파일 지우기
14.1 생성과 소멸의 순환
14.2 유닉스에서 파일을 관리하는 방법: inode
14.3 위험한 rm 명령어
14.4 rm을 조금 안전하게 쓰기 위한 트릭
14.5 "Yes" 또는 "No"를 물어볼 때 항상 yes로 대답하는 방법
14.6 일부는 지우고 일부는 남겨두는 방법
14.7 대화식으로 파일을 더 빠르게 지우는 방법
14.8 특정 디렉토리에 있는 파일을 안전히 삭제하는 방법
14.9 안전한 삭제 방법의 장단점
14.10 무조건 지우는 방법: rm -f
14.11 이름이 이상한 파일을 지우는 방법
14.12 와일드카드를 써서 이름이 이상한 파일을 지우는 방법
14.13 대시(-)로 시작하는 파일명을 처리하는 방법
14.14 unlink를 써서 이름이 이상한 파일을 지우는 방법
14.15 i-번호를 써서 이상한 파일을 지우는 방법
14.16 디렉토리를 지울 때의 문제점
14.17 오래된 파일을 지우는 방법
14.18 하나만 빼고 모든 파일을 지우는 방법
14.19 find로 불필요한 파일을 정리하는 방법
15장. 디스크 공간 최적화
15.1 저렴한 하드 디스크 가격
15.2 파일을 지우는 대신 비워버리자
15.3 로그 파일과 메일 박스
15.4 링크를 써서 공간을 절약하는 방법
15.5 파일 크기를 제한하는 방법
15.6 파일을 압축해서 공간을 절약하는 방법
15.7 디렉토리 트리를 tar로 묶고 압축해서 공간을 절약하는 방법
15.8 디스크 공간을 확인하는 방법
15.9 디렉토리 트리 압축: 원하는 파일만 골라서 압축하기
15.10 strip으로 실행 파일의 용량을 줄이는 방법
15.11 디스크 쿼터
4부. 기본 편집
16장. 철자법 검사, 단어 수 계산, 텍스트 분석
16.1 유닉스 spell 명령어
16.2 ispell
16.3 정확한 철자를 찾는 방법
16.4 spell 작동 방법
16.5 ispell의 사전에 단어를 추가하는 방법
16.6 행, 단어, 문자의 개수를 세는 방법: wc
16.7 중복된 단어를 찾는 방법
16.8 짝 맞추기
16.9 단어만 찾는 방법
17장. vi 팁과 트릭
17.1 vi 에디터가 왜 이리 중요할까
17.2 이 장에서 다루는 내용
17.3 vi로 여러 파일을 편집하는 방법
17.4 파일을 번갈아 편집하는 방법
17.5 vi의 지역 설정
17.6 버퍼를 이용하여 텍스트를 옮기고 복사하는 방법
17.7 번호가 있는 버퍼로 지운 내용을 되살리는 방법
17.8 검색 패턴 및 전역 명령어를 사용하는 방법
17.9 vi에서 치환하는 내용을 확인하는 방법
17.10 원본 파일은 그대로 두고 새로운 파일로 저장하는 방법
17.11 파일의 일부분을 저장하는 방법
17.12 기존 파일에 내용을 덧붙이는 방법
17.13 패턴을 이용하여 텍스트 블록을 옮기는 방법
17.14 유용한 전역 명령어
17.15 특정 단어의 사용 횟수를 세는 방법
17.16 한 행에 있는 모든 단어를 대문자로 시작하는 형태로 바꾸는 방법
17.17 파일마다 다른 설정 파일을 적용하는 방법
17.18 유닉스 명령으로 텍스트를 필터링하는 방법
17.19 vi 파일 복구 기능과 네트워크 파일시스템
17.20 vi -r로 복구한 버퍼를 다룰 때의 주의점
17.21 셸 이스케이프
17.22 vi 복합 검색
17.23 vi 단어 약어
17.24 vi 약어를 명령으로 사용하는 방법(vi끼리 잘라서 붙이는 방법)
17.25 vi 약어를 써서 오타를 수정하는 방법
17.26 vi의 행 명령어와 문자 명령어
17.27 임시 공간이 부족할 때 다른 디렉토리를 사용하는 방법
17.28 행을 깔끔하게 만드는 방법
17.29 취소 기능으로 위치를 찾는 방법
17.30 .exrc 파일로 vi를 설정하는 방법
18장. vi에서 사용자 정의 명령어를 만드는 방법
18.1 왜 필요한 것보다 더 많은 것을 입력해야 할까
18.2 vi의 map 명령으로 시간과 타이핑하는 수고를 절약하는 방법
18.3 map! 명령을 쓸 때의 문제점
18.4 vi @-함수
18.5 vi를 실행하는 윈도우에 붙여넣기 위한 키맵
18.6 ex에서 키를 해석하는 것을 방지하는 방법
18.7반복적인 편집을 위한 맵
18.8 vi에서의 키맵의 다른 예
18.9 vi 키맵을 반복하는 방법
18.10 CAPS LOCK을 사용하지 않고 대문자를 쓰는 방법 117
18.11 화살표를 쓰지 않고 텍스트 입력 모드에서 커서를 움직이는 방법
18.12 noremap 옵션
18.13 긴 행을 끊기 위한 vi 매크로
18.14 파일 백업 매크로
19장. GNU Emacs
19.1 Emacs: 또 다른 에디터
19.2 Emacs의 다양한 기능
19.3 사용자 정의 기능과 이 기능을 쓰지 않는 방법
19.4 백업 파일과 자동 저장 파일
19.5 Emacs에서 겹침 모드를 사용하는 방법
19.6 명령어 자동 완성 기능
19.7 기본 키만으로 모든 일을 처리하는 방법
19.8 검색 기능
19.9 Emacs 사용 전 PWD 해제
19.10 파일에 이진 문자를 삽입하는 방법
19.11 단어 약어 모드
19.12 Emacs 핵용 디렉토리
19.13 재미있는 기능
20장. 배치 편집
20.1 행 단위 에디터가 좋은 이유
20.2 편집 스크립트 작성하기
20.3 행 주소
20.4 유용한 ex 명령어
20.5 vi 내에서 편집 스크립트를 실행하는 방법
20.6 한 번 편집으로 여러 파일을 변경하는 방법
20.7 ed/ex 배치 편집: 예제
20.8 배치 편집 시 주의 사항: 큰 파일을 편집할 때 에러가 발생하는 경우
20.9 patch
20.10 awk
20.11 awk의 버전
21장. 편집의 한계 극복
21.1 못할 것이 없다
21.2 fmt를 이용해서 텍스트를 다듬는 방법
21.4 프로그램 주석을 정돈하는 방법
21.5 메일/뉴스 메시지의 헤더를 제거하는 behead
21.6 dd를 이용한 파일 처리
21.7 offset: 텍스트 들여 쓰기
21.8 가운데 정렬
21.9 고정된 위치에서 파일을 자르는 방법: split
21.10 문맥에 맞추어 파일을 자르는 방법: csplit
21.11 tr을 이용하여 문자를 바꾸는 방법
21.12 "이진" 파일을 ASCII로 인코딩하는 방법
21.13 dd를 이용한 텍스트 변환
21.14 열이나 필드를 자르는 방법
21.15 pr을 이용해서 열 안에 텍스트를 만드는 방법
21.16 column으로 자동으로 열을 만드는 방법
21.17 열을 깔끔하게 맞추는 방법
21.18 열 안에 내용을 집어넣는 방법
21.19 join으로 행을 합치는 방법
21.20 uniq
21.21 텍스트 회전
22장. 정렬
22.1 순서대로 정렬하는 방법
22.2 필드 정렬: sort의 작동 방법
22.3 sort의 필드 구분자를 바꾸는 방법
22.4 공백 문자를 필드 구분자로 쓸 때의 문제점
22.5 알파벳 정렬과 숫자 정렬
22.6 sort에 관한 몇 가지 팁
22.7 길이 순서대로 행을 정렬하는 방법: lensort 110
22.8 성을 기준으로 이름의 목록을 정렬하는 방법
5부. 프로세스와 커널
23장. 작업 제어
23.1 작업 제어 개요
23.2 작업 제어 기초
23.3 작업을 효율적으로 사용하는 방법
23.4 작업 제어를 사용할 때의 주의점
23.5 "현재 작업"이 예상과 다른 경우
23.6 작업 제어와 vi의 autowrite
23.7 시스템에 과부하가 걸릴 때
23.8 작업의 상태 변경 알리기
23.9 stty tostop으로 백그라운드 출력을 차단하는 방법
23.10 nohup
23.11 프로세스 소유권 해제
23.12 리눅스 가상 콘솔
23.13 원격 로그인 세션을 중지하는 방법
24장. 프로세스 시작, 정지 및 죽이기
24.1 이 장에서 다루는 내용
24.2 fork와 exec
24.3 프로세스 관리: 전반적인 개념
24.4 서브셸
24.5 ps 명령어
24.6 제어 터미널
24.7 프로세스를 추적하는 방법
24.8 왜 어떤 명령은 괄호로 싸여 있을까
24.9 /proc 파일시스템
24.10 시그널
24.11 포그라운드 작업을 죽이는 방법
24.12 kill 명령어로 프로세스를 죽이는 방법
24.13 프린터 큐 감시자: 재가동할 수 있는 데몬 셸 스크립트
24.14 자신의 프로세스를 모두 죽이는 방법
24.15 이름으로 프로세스를 죽이는 방법
24.16 대화식으로 프로세스를 죽이는 방법
24.17 폭주하는 프로세스를 정지하는 방법
24.18 죽일 수 없는 프로세스를 정리하는 방법
24.19 좀비 프로세스는 왜 죽일 수 없을까
24.20 윈도우로 이어지는 프로세스 사슬
24.21 셸 없는 터미널 윈도우
24.22 프로세스를 죽여서 윈도우를 닫는 방법
25장. 작업 예약
25.1 쉽게 소프트웨어 로봇을 만드는 방법
25.2 주기적으로 프로그램을 실행하는 방법: cron
25.3 crontab 항목을 추가하는 방법
25.4 cron 항목에서 표준 입력을 포함하는 방법
25.5 at 명령어
25.6 at 작업을 조용하게 실행하는 방법
25.7 작업 확인 및 제거
25.8 다른 at 또는 cron 작업을 피하는 방법
25.9 sleep 명령어
26장. 시스템 성능과 프로파일링
26.1 시간이 왜 중요할까
26.2 프로그램 실행 시간 측정
26.3 현재 실행 중인 명령어와 실행 시간을 알아내는 방법
26.4 시스템 부하 검사: uptime
26.5 nice
26.6 nice를 쓸 때 주의할 점
26.7 실행 중인 작업의 nice 수치를 변경하는 방법
6부. 스크립팅
27장. 셸에서 명령어를 해석하는 방법
27.1 셸에서 하는 일
27.2 셸에서는 다른 명령을 실행하는 방법
27.3 그런데 셸은 과연 무엇일까
27.4 명령어 해석과 실수에 의한 파일 덮어쓰기
27.5 명령행 인자를 하나씩 출력하기
27.6 검색 경로를 제어하는 방법
27.7 앨리어스에 들어 있는 와일드카드
27.8 eval
27.9 bash에서 어느 것을 이용할까
27.10 C 셸에서 어느 것을 이용할까
27.11 "2>&1 file"인가, "> file 2>&1"인가
27.12 본 셸의 인용 처리
27.13 본 셸과 C 셸의 인용 처리의 차이점
27.14 파일명에 있는 특수 문자를 인용 처리하는 방법
27.15 verbose와 echo 변수
27.16 Here Documents
27.17 "특수" 문자와 연산자
27.18 백슬래시의 개수
28장. 명령행에서 시간을 절약하는 방법
28.1 유닉스 명령행의 특별한 점
28.2 CTRL-r로 명령행을 다시 출력하는 방법
28.3 와일드카드를 사용하여 파일을 만드는 방법
28.4 {}를 써서 문자열을 만드는 방법
28.5 문자열 편집(콜론) 연산자
28.6 자동 완성 기능
28.7 파일명 자동 완성 기능을 쓸 때 불필요한 파일을 제외하는 방법
28.8 명령어 반복
28.9 명령어를 반복하고 조금씩 변화하는 방법
28.10 복사 및 붙이기를 써서 명령어를 반복하는 방법
28.11 시간에 따라 결과가 달라지는 명령을 반복하는 방법
28.12 다중행 명령어와 보조 프롬프트
28.13 Here Documents의 첫번째 예:포맷팅되지 않은 폼 편지
28.14 명령어 치환
28.15 임시 파일을 써서 많은 양의 텍스트를 다루는 방법
28.16 세미콜론을 써서 명령어를 분리하는 방법
28.17 너무 많은 인자를 다루는 방법
28.18 Expect
29장. 사용자 정의 명령어
29.1 사용자 정의 명령어 만들기
29.2 셸 앨리어스 소개
29.3 C 셸 앨리어스에서 명령행 인자를 사용하는 방법
29.4 본 계열 앨리어스 설정 및 해제 방법
29.5 콘 셸 앨리어스
29.6 zsh 앨리어스
29.7 source 명령을 적용할 수 있는 스크립트
29.8 C 셸에서 앨리어스 루프를 피하는 방법
29.9 C 셸의 앨리어스에 if-then-else를 넣는 방법
29.10 C 셸에서 makealias와 quote를 사용하여 인용 처리를 수정하는 방법
29.11 셸 함수의 기초
29.12 셸 함수에 관한 좀더 자세한 내용
29.13 셸 함수 전파
29.14 본 셸 함수와 앨리어스를 흉내내는 방법
30장. 히스토리 사용법
30.1 역사로부터의 교훈
30.2 히스토리 요약
30.3 내가 가장 좋아하는 !$
30.4 내가 가장 좋아하는 !:n*
30.5 내가 가장 좋아하는 ^^
30.6 와일드카드의 안전한 사용을 위해 !$를 쓰는 방법
30.7 히스토리 번호를 활용하는 방법
30.8 히스토리 치환
30.9 명령어 사이클 반복
30.10 파일에서 일련의 명령어를 실행하는 방법
30.11 :p를 사용한 히스토리 확인
30.12 로그아웃할 때 히스토리를 남겨놓는 방법
30.13 다른 셸로 히스토리를 전달하는 방법
30.14 셸의 명령행 편집 기능
30.15 histchars를 써서 히스토리 문자를 바꾸는 방법
30.16 히스토리 문자를 바꾸는 대신 쓸 수 있는 방법
31장. 빠르게 움직이는 방법
31.1 파일시스템 살펴보기
31.2 상대 경로명과 절대 경로명
31.3 현재 디렉토리
31.4 현재 디렉토리의 이름을 찾는 방법
31.5 디렉토리를 변경하는 시간을 절약하는 방법: cdpath
31.6 루프 제어: break와 continue
31.7 셸의 pushd와 popd 명령어
31.8 pushd를 활용한 앨리어스
31.9 앨리어스를 이용한 빠른 cd
31.10 디렉토리 이니셜을 써서 이동하는 방법
31.11 다른 사용자의 홈 디렉토리를 빠르게 찾는 방법
31.12 셸 변수로 위치를 표시하는 방법
31.13 디렉토리를 들어가고 나올 때 자동으로 설정하는 방법
32장. 정규 표현식(패턴 매칭)
32.1 표현식이란
32.2 와일드카드와 정규 표현식을 혼동하지 말자
32.3 정규 표현식의 이해
32.4 정규 표현식에서 메타 문자를 사용하는 방법
32.5 정규 표현식: 앵커 문자 ^과 $
32.6 정규 표현식: 문자 집합으로 문자를 매치하는 방법
32.7 정규 표현식: 점(.)을 써서 임의의 문자를 매치하는 방법
32.8 정규 표현식: [...]로 문자의 범위를 지정하는 방법
32.9 정규 표현식: 특정 문자를 제외하는 방법
32.10 정규 표현식: *로 문자 집합을 반복하는 방법
32.11 정규 표현식: {과 }로 특정 반복 횟수를 지정하는 방법
32.12 정규 표현식: <와 >를 써서 단어를 매치하는 방법
32.13 정규 표현식: (, ), 1을 써서 패턴을 기억하는 방법
32.14 정규 표현식: 잠재적인 문제
32.15 확장 정규 표현식
32.16 제대로 된 정규 표현식을 만드는 방법
32.17 무엇이 정규 표현식에 매치하는가
32.18 매치 범위를 제한하는 방법
32.19 원하지 않는 메타 문자를 결코 사용하지 않는다
32.20 각 유닉스 프로그램에서 쓸 수 있는 메타 문자
32.21 패턴 매칭 퀵 레퍼런스
33장. 와일드카드
33.1 파일명을 지정하기 위한 와일드카드
33.2 파일명 와일드카드 요약
33.3 와일드카드는 어디에서 처리할까
33.4 와일드카드가 매치하지 않으면
33.5 경로명 안에 와일드카드를 사용할 수 없는 경우
33.6 grep -l로 매치하는 파일의 목록을 구하는 방법
33.7 매치하지 않는 파일의 목록을 구하는 방법
33.8 nom: 와일드카드에 매치하지 않는 파일의 목록을 구하는 방법
34장. 스트림 에디터 sed
34.1 sed 지루한^H^H^H요약
34.2 sed에 관해 알아야 할 두 가지 사항
34.3 sed 실행하기
34.4 sed 스크립트 테스트 및 이용: checksed, runsed
34.5 sed에서 행을 지정하는 방법
34.6 스크립트에 있는 명령어의 순서
34.7 한 번에 하나씩
34.8 정규 표현식 구분하기
34.9 sed 치환문 내의 개행 문자
34.10 치환문에서 검색 문자열을 참조하는 방법
34.11 검색 문자열의 일부분을 참조하는 방법
34.12 찾기 및 바꾸기: 여러 개 중에서 하나만 매치하는 방법
34.13 텍스트 변환
34.14 대기 공간: 임시 버퍼
34.15 행의 일부분을 변환하는 방법
34.16 행 경계를 넘나들면서 편집하는 방법
34.17 열심히 일하는 비서
34.18 여러 행에 걸쳐 분리되어 있는 패턴을 찾는 방법
34.19 다중행 삭제
34.20 특정 부분을 제외하고 편집하는 방법
34.21 sed의 테스트 명령어
34.22 sed 종료 명령어
34.23 sed의 종료 명령어를 사용할 때 주의할 점
34.24 셸 스크립트에서의 개행 문자, 인용 처리, 백슬래시
35장. 초보자를 위한 셸 프로그래밍
35.1 간단한 셸 프로그램을 만드는 방법
35.2 누구든지 셸 프로그래밍을 조금은 알아야 한다
35.3 환경 변수의 용도
35.4 부모와 자식 사이의 관계
35.5 미리 정의된 환경 변수
35.6 PATH 환경 변수
35.7 PATH와 path
35.8 DISPLAY 환경 변수
35.9 셸 변수
35.10 본 셸의 case를 이용하여 문자열의 값을 테스트하는 방법
35.11 case 선언문에서의 패턴 매칭
35.12 유닉스 프로세스의 종료 상태
35.13 if 선언문으로 종료 상태를 테스트하는 방법
35.14 성공 여부를 테스트하는 방법
35.15 종료 상태를 테스트하는 순환문
35.16 셸(스크립트)의 종료 상태를 설정하는 방법
35.17 인터럽트로 인해 종료되는 것을 트래핑하는 방법
35.18 read: 키보드로부터 정보를 읽어오는 방법
35.19 awk, sed 등을 위한 셸 스크립트 "래퍼"
35.20 셸 스크립트에서 명령행 인자를 처리하는 방법
35.21 for 순환문으로 명령행 인자를 처리하는 방법
35.22 while과 shift를 써서 인자를 처리하는 방법
35.23 순환문 제어: break와 continue
35.24 표준 명령행 파싱 방법
35.25 본 셸의 set 명령어
35.26 test: 파일과 문자열을 테스트하는 방법
35.27 새로운 명령어의 이름을 선택하는 방법
35.28 프로그램 이름을 찾는 방법과 한 프로그램에 여러 이름을 부여하는 방법
35.29 .과 source 명령어로 파일을 읽는 방법
35.30 셸 스크립트에서 셸 함수를 사용하는 방법
36장. 중고급 사용자를 위한 셸 프로그래밍
36.1 기초를 뛰어넘어서
36.2 :#, #! 이야기
36.3 셸이 필요 없는 스크립트
36.4 #!에서 PATH를 검색하게 만드는 방법
36.5 exec 명령어
36.6 본 셸의 ":" 연산자
36.7 매개 변수 치환
36.8 한 프로그램에 이름을 여러 개 지정하는 방법
36.9 마지막 명령행 인자를 찾는 방법
36.10 모든 명령행 매개 변수의 설정을 해제하는 방법
36.11 표준 입력을 for 순환문으로
36.12 변수 여러 개를 이용하여 순환문 만들기
36.13 basename과 dirname
36.14 순환문 제어 명령이 여러 개 있는 while 순환문
36.15 열려 있는 파일 및 파일 기술자
36.15 n>&m: 표준 출력과 표준 에러를 서로 바꾸기
36.17 셸에서 표준 입력으로부터 스크립트를 읽을 수도 있지만
36.18 표준 입력으로부터 즉석에서 셸 스크립트를 실행하는 방법
36.19 인용 처리된 here document 종결자
36.20 사용자가 입력한 내용이 화면에 나타나지 않게 하는 방법
36.21 expr 퀵 레퍼런스
36.22 expr로 문자열에 있는 문자를 테스트하는 방법
36.23 문자열의 일부분만 잡아내는 방법
36.24 중첩된 명령어 치환
36.25 case 선언문 하나로 문자열 두 개를 검사하는 방법
36.26 X 윈도우로 텍스트를 출력하는 방법
36.25 셸의 락 파일
37장. 셸 스크립트 디버깅 및 주의 사항
37.1 셸 스크립트 디버깅을 위한 팁
37.2 본 셸 디버거를 써서 셸 변수를 확인하는 방법
37.3 숫자를 비교할 때 문법 에러 방지하기
37.4 문자열을 비교할 때 문법 에러 방지하기
37.5 인용 처리와 명령행 매개 변수
37.6 유닉스에서 시간을 처리하는 방법
37.7 script로 작업 중인 내용을 복사하는 방법
37.8 스크립트 파일 청소 방법
37.9 테스트용으로 임의의 크기인 파일을 만드는 방법
7부. 환경 확장 및 관리
38장. 파일 백업
38.1 "백업"이란 무엇일까
38.2 tar 요점 정리
38.3 직접 백업하는 방법
38.4 다른 백업 방법
38.5 지역 장치에 백업하는 방법
38.6 tar 명령어로 테이프에서 파일을 복구하는 방법
38.7 원격 테이프 장치에 대해 tar를 사용하는 방법
38.8 GNU tar로 원격 테이프 드라이브를 사용하는 방법
38.9 증분 백업
38.10 tar에서 와일드카드를 사용하는 방법
38.11 tar에서는 절대 경로를 쓰지 않는 것이 좋다
38.12 tar의 인자를 올바른 순서로 구하는 방법
38.13 cpio 테이프 아카이버
38.14 고성능 백업 프로그램
39장. 아카이브를 만들고 읽는 방법
39.1 파일 묶어서 옮기기
39.2 tar를 써서 아카이브를 만들고 푸는 방법
39.3 GNU tar 맛보기
39.4 RCS와 CVS를 써서 파일을 관리하고 공유하는 방법
39.5 RCS 개요
39.6 rcsrevs를 사용하여 RCS 리비전 번호 목록을 출력하는 방법
39.7 CVS 개요
39.8 CVS 예제
40장. 소프트웨어 설치
40.1 /usr/bin과 기타 소프트웨어 디렉토리
40.2 유닉스에서 소프트웨어를 설치할 때 힘든 점
40.3 어떤 make인가
40.4 make 절차를 간단하게 만드는 방법
40.5 데비안의 dselect
40.6 데비안의 apt-get으로 소프트웨어를 설치하는 방법
40.7 이어받기를 할 수 있는 wget
40.8 curl 애플리케이션과 OS X을 위한 One-Step GNU-다윈 자동 인스톨러
40.9 FreeBSD Ports를 써서 설치하는 방법
40.10 FreeBSD 패키지를 써서 설치하는 방법
40.11 RPM 패키지를 찾아서 설치하는 방법
41장. 펄
41.1 고품격 셸 스크립팅
41.2 시스템에 설치된 펄을 확인하는 방법
41.3 펄 소스 코드를 컴파일하는 방법
41.4 펄 신병 교육, 제 1부: 일반적인 스크립트의 구조
41.5 펄 신병 교육, 제 2부: 변수와 데이터 타입
41.6 펄 신병 교육, 제 3부: 분기 및 순환문
41.7 펄 신병 교육, 제 4부: 패턴 매칭
41.8 펄 신병 교육, 제 5부: 펄과 유닉스
41.9 펄 신병 교육, 제 6부: 모듈
41.10 펄 신병 교육, 제 7부: perldoc
41.11 CPAN
41.12 펄로 자신만의 grep 명령어를 만드는 방법
41.13 펄과 인터넷
42장. 파이썬
42.1 파이썬이 뭐지
4.2 설치 방법 및 Disutils
42.3 파이썬의 기초
42.4 파이썬과 웹
42.5 urllib
42.6 urllib2
42.7 htmllib과 HTMLParser
42.8 cgi
42.9 mod_python
42.10 펄과 파이썬
8부. 통신과 접속
43장. 입출력 리다이렉션
43.1 표준 입력과 출력을 사용하는 방법
43.2 cat 명령어의 인자의 개수
43.3 표준 에러만 파이프로 보내는 방법
43.4 파이프를 통해 페이저로 보낼 때의 문제점
43.5 C 셸에서의 리다이렉션
43.6 noclobber를 이용한 안전한 입출력 리다이렉션
43.7 () 서브셸 연산자
43.8 두 군데 이상으로 출력하는 방법
43.9 tee를 이용해서 여러 명령을 한 파일로 모으는 방법
43.10 출력을 두 군데 이상으로 리다이렉트하는 방법
43.11 이름 있는 파이프: FIFO
43.12 빈 파일로 할 수 있는 일
44장. 장치
44.1 하드웨어에 관한 간략한 소개
44.2 부팅 시 출력되는 내용
44.3 기본 커널 설정
44.4 디스크 파티션 분할
44.5 파일시스템 유형과 /etc/fstab
44.6 이동형 파일시스템 마운트 및 언마운트
44.7 루프백 마운트
44.8 네트워크 장치: ifconfig
44.9 네트워크 파일시스템: NFS, SMBFS
44.10 모뎀
44.11 다이얼업 PPP 세션 설정
44.12 USB 설정
44.13 사운드 카드 및 기타 장치
44.14 직렬 콘솔
45장. 인쇄
45.1 인쇄 개요
45.2 유닉스에서의 인쇄
45.3 lpc를 이용한 프린터 제어
45.4 다른 프린터를 사용하는 방법
45.5 스풀링을 할 때 심볼릭 링크를 사용하는 방법
45.6 일반 텍스트 파일 포맷팅: pr
45.7 일반 텍스트 파일 포맷팅: enscript
45.8 네트워크를 통해서 인쇄하는 방법
45.9 삼바를 통해서 인쇄하는 방법
45.10 조판
45.11 간략한 유닉스 조판의 역사
45.12 매뉴얼 페이지 조판: nroff
45.13 포맷팅 마크업 언어: troff, LATEX, HTML 등
45.14 인쇄용 언어: 포스트스크립트, PCL, DVI, PDF
45.15 텍스트 파일을 인쇄용 언어로 변환하는 방법
45.16 조판한 파일을 인쇄용 언어로 변환하는 방법
45.17 스풀러에서 소스 파일을 자동으로 변환하는 방법
45.18 CUPS
45.19 이식 가능한 비트맵 패키지
46장. 네트워크 접속
46.1 TCP/IP: IP 주소와 포트
46.2 /etc/services
46.3 상태와 문제 해결
46.4 패킷이 어디로 갔나
46.5 현장 감독: inetd
46.6 SSH
46.7 익명 FTP 서버
46.8 메일 SMTP, POP, IMAP
46.9 도메인 이름 서비스: DNS
46.10 DHCP
46.11 게이트웨이와 NAT
46.12 방화벽
46.13 개인용 LAN과 모뎀
47. MS 윈도우즈 연결
47.1 다리 만들기
47.2 삼바 설치 및 설정 방법
47.3 삼바에서의 보안
47.4 SWAT와 GUI SMB 브라우저
47.5 삼바로 인쇄하는 방법
47.6 유닉스에서 SMB 공유 자원에 연결하는 방법
47.7 VNC를 써서 데스크탑을 공유하는 방법
47.8 에뮬레이터 및 API
47.9 시트릭스: 윈도우즈를 여러 명이 동시에 사용하는 방법
9부. 보안
48장. 보안의 기초
48.1 취약점에 대한 이해
48.2 CERT 보안 체크 리스트
48.3 보안 경보
48.4 버퍼 오버플로우
48.5 DoS
48.6 성능 저하를 조심하자
48.7 침입자 감지
48.8 MOTD의 중요성
48.9 리눅스 proc 파일시스템
48.10 inetd를 사용하지 않는 방법
48.11 rlogin과 rsh
48.12 TCP 래퍼
49장. 루트, 그룹 및 사용자 관리
49.1 유닉스의 사용자/그룹 구조
49.2 사용자는 언제 사용자가 되는가
49.3 루트 비밀 번호를 잊어버렸을 때
49.4 umask 설정
49.5 setgid 비트로 디렉토리에 대한 그룹 퍼미션을 설정하는 방법
49.6 그룹과 그룹 소유권
49.7 권한을 거부하기 위해 사용자를 그룹에 추가하는 방법
49.8 SUID, SGID 스크립트
49.9 su 명령어
49.10 루트로 로그인하지 말자
49.11 sudo 명령어
49.12 다윈에서 루트를 사용하는 방법
49.13 로그인을 할 수 없게 만드는 방법
50장. 파일 보안, 소유권 및 공유
50.1 파일 소유권과 보안
50.2 파일과 디렉토리 퍼미션
50.3 새로운 파일의 소유자
50.4 스틱키 비트를 이용한 파일 보호
50.5 chmod를 이용한 파일 퍼미션 변경
50.6 chmod의 = 연산자
50.7 쓰기 금지를 통한 파일 보호
50.8 cx, cw, c-w: 빠르게 파일 퍼미션을 변경하는 방법
50.9 쓰기 접근이 없는 파일을 수정하는 방법
50.10 접근은 가능하지만 목록은 볼 수 없는 디렉토리
50.11 퍼미션 조절
50.12 md5sum을 이용한 파일 검증
50.13 셸 스크립트의 퍼미션
50.14 왜 파일 소유권을 변경할 수 없을까
50.15 chown을 사용하지 않고 파일의 소유권을 바꾸는 방법
51장. SSH
51.1 Mac OS X에 대한 원격 접근
51.2 SSH를 통해 접근을 보호하는 방법
51.3 OpenSSH
51.4 SSH의 문제와 해결책
51.5 일반 문제 및 인증 문제
51.6 키와 에이전트 문제
51.7 서버와 클라이언트의 문제
용어 해설
찾아보기