역자 서문
차례
이 책의 사용 방법
서문
1장. 소 개
1.01 유닉스에는 뭔가 특별한 것이 있다
1.02 키보드를 눌러봐요
1.03 서로 협력하는 프로그램들
1.04 파이프 활용
1.05 쉘 프로그래밍이 별건가요
1.06 편집에 유용한 툴
1.07 솟아나는 힘을 느껴보자
1.08 여러 가지 쉘들
1.09 내가 이용하고 있는 쉘은?
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 유닉스가 파일을 다루는 방법: Inode
1.23 파일 액세스 퍼미션
1.24 슈퍼유저(루트)
1.25 디렉토리 액세스
1.26 다중사용자 시스템
1.27 백그라운드 프로세싱
1.28 백그라운드 프로세싱에 대한 알려진 비밀
1.29 파일이 아닌 파일
1.30 입력과 출력 방향 바꾸기
1.31 X 윈도우 시스템
1.32 누락된 내용
1.33 유닉스 네트워킹과 통신
1.34 유닉스에도 단점은 있다
1부. 느긋한 마음으로
2장. 로그인
2.01 쉘 환경을 내 맘대로
2.02 쉘 설정 파일 - 무엇을, 어디서, 왜
2.03 쉘 설정 파일에서 벌어지는 일
2.04 변경된 설정을 즉석에서 확인하는 방법
2.05 느린 로그인을 빠르게 하는 방법
2.06 쉘 설정 파일에 절대 경로명 이용
2.07 읽혀지지 않는 C 쉘 설정 파일
2.08 로그인 쉘 확인하기
2.09 set prompt 테스트로 C 쉘 속도 증진
2.10 set prompt 테스트에 대한 알려진 비밀
2.11 ksh과 bash의 시작을 $- 테스트로 더욱 빠르게
2.12 서로 다른 터미널 자동 설정
2.13 .cshrc.$HOST로 호스트마다 다르게 설정하기
2.14 motd.diff: 로그인 메시지에 새로운 라인을
2.15 깔끔한 로그인: 로그인 메시지는 한 번만
2.16 허가된 쉘: 허가받지 못한 쉘 이용하기
3장. 로그아웃
3.01 로그아웃하면서 명령어 실행
3.02 Bourne/Korn 쉘 로그아웃하면서 명령어 실행
3.03 행운의 과자
3.04 파일 자동 청소
3.05 돌발적인 C 쉘 로그아웃 중지하기
3.06 돌발적인 Bourne 쉘 로그아웃 중지하기
3.07 다중 화면을 제공하는 screen
3.08 내가 이용하는 tty는?
4장. 홈 디렉토리 구조
4.01 구조적이 뭐지?
4.02 프로그램들과 스크립트들을 담아놓는 bin 디렉토리
4.03 비실행 파일들을 담아둘 디렉토리
4.04 Emacs용 파일을 담아둘 디렉토리
4.05 사적인 디렉토리
4.06 파일명 짓기
4.07 디렉토리가 더 필요해!
4.08 디렉토리 쉽게 만들기
4.09 .exrc 파일에 vi 설정하기
4.10 명령어의 위치가 궁금하면 whereiz를
5장. 터미널 설정
5.01 터미널에 대해 설명하는 단원
5.02 터미널 데이터베이스
5.03 로그인 시 터미널 종류 설정하기
5.04 tset을 이용한 TERMCAP 변수 설정하기
5.05 터미널 종류 질의: qterm
5.06 로그인하면 터미널이 먹통이 되네
5.07 termcap과 terminfo가 제어할 수 있는 것과 없는 것
5.08 터미널 이스케이프 시퀀스
5.09 삭제 문자, kill 문자, 인터럽트 문자 설정하기
5.10 사용하고 있는 터미널의 이름 알아내기
5.11 tset을 이용한 터미널 초기화
5.12 tput을 이용한 터미널 초기화
6장. 쉘 변수와 환경 변수
6.01 환경 변수의 용도
6.02 부모와 자식의 관계
6.03 미리 정의된 환경 변수들
6.04 PATH 환경 변수
6.05 PATH와 경로명
6.06 TZ 환경 변수
6.07 지금 한국은 몇 시죠?
6.08 쉘 변수
6.09 특별한 C 쉘 변수들
6.10 상이한 환경에서 명령어 실행하기
7장. 쉘 프롬프트 바꾸기
7.01 바꾸는게 좋죠!
7.02 기본적인 프롬프트 설정하기
7.03 vi, rsh 등에서 문제를 일으키는 C 쉘 프롬프트
7.04 내장 명령어를 이용한 빠른 프롬프트 설정하기
7.05 다중라인 쉘 프롬프트
7.06 터미널의 상태표시줄에 세션 정보 나타내기
7.07 게으른 사용자를 위한 "메뉴 프롬프트"
7.08 번쩍거리는 쉘 프롬프트
7.09 $SHLVL로 서브 쉘의 레벨 나타내기
7.10 텅 빈 쉘 프롬프트의 유용성
7.11 $cwd보다 더 좋은 dirs
7.12 외부 명령어가 보낸 시그널로 변수를 설정하기
7.13 bash에서 명령어 실행과 프롬프트 출력을 동시에
2부. 귀찮은 일은 컴퓨터가 하도록
8장. 명령어를 쉘이 해석하는 방법
8.01 쉘이 하는 일
8.02 bash의 소개
8.03 tcsh의 소개
8.04 명령어 해석과 실수에 의한 파일 덮어쓰기
8.05 명령행 해석
8.06 명령행 인자 출력하기
8.07 검색 경로 설정하기
8.08 실행할 수 없는 명령어를 갖고 있는 디렉토리
8.09 앨리어스 속의 와일드카드
8.10 eval: 다른 기회가 필요한 경우
8.11 bash가 어느 것을 이용할까?
8.12 C 쉘이 어느 것을 이용할까?
8.13 "2>&1 file" 또는 "> file 2>&1"? 217
8.14 Bourne 쉘의 인용 처리
8.15 Bourne 쉘 인용 처리와 C 쉘 인용 처리의 차이점
8.16 파일명 내의 특수 문자를 인용 처리로 해결하기
8.17 변수 verbose와 echo로 인용 처리 보기
8.18 Here 문서 227
8.19 "특수" 문자들과 연산자들
8.20 백슬래시의 필요한 개수
9장. 명령행에서 시간 절약하기
9.01 유닉스 명령행에 특별한 뭔가가 있다
9.02 라인 삭제 및 단어 삭제를 사용하여 빠르게 라인을 수정하기
9.03 CTRL-r을 사용하여 명령행에 다시 출력하기
9.04 와일드카드를 사용하여 파일 생성하기
9.05 { }을 사용하여 문자열 구성하기
9.06 문자열을 편집(콜론) 연산자
9.07 ksh과 bash에서 문자열 편집하기
9.08 파일명 입력 대행: 파일명을 빠르게 입력하기
9.09 파일명 입력 대행에서 쓸모없는 파일들에 매칭하지 않기
9.10 파일명 입력 대행이 적절하지 않은 경우
9.11 foreach 순환문을 사용하여 명령어 반복하기
9.12 Bourne 쉘의 for 순환문
9.13 다중행 명령어와 보조 프롬프트
9.14 형식문을 작성하기 위한 "here" 문서 사용하기
9.15 복잡한 명령어들을 위한 일회용 스크립트
9.16 명령어 치환
9.17 임시 파일을 이용해서 많은 양의 텍스트 다루기
9.18 프로세스 치환
9.19 성미가 급한 사람들을 위한 미리 입력
9.20 명령행을 위한 많은 파일들
9.21 xargs를 가지고 긴 명령행 다루기
9.22 xargs: 공백과 뉴라인으로 인한 문제점
9.23 "Arguments Too Long" 에러에 대한 해결책
9.24 ls -l, grep 등의 결과를 편집해서 파일 목록 얻기
9.25 C 쉘 repeat 명령어
9.26 Expect
10장. 앨리어스
10.01 커스텀 명령어 만들기
10.02 커스텀 명령어를 위한 앨리어스
10.03 C 쉘 앨리어스에서 명령행 인자 사용하기
10.04 ksh과 bash에서의 앨리어스
10.05 source할 수 있는 스크립트
10.06 C 쉘에서 앨리어스 루프 피하기
10.07 C 쉘의 앨리어스에 if-then-else를 넣기
10.08 C 쉘에서 makealias와 quote를 사용하여 인용부호 넣기
10.09 쉘 함수
10.10 Bourne 쉘 함수와 앨리어스 흉내내기
11 장. 히스토리
11.01 역사로부터의 교훈
11.02 히스토리 요약
11.03 내가 즐겨 이용하는 !$
11.04 내가 즐겨 이용하는 !:n*
11.05 내가 즐겨 이용하는 ^^
11.06 와일드카드의 안전한 사용을 위해 !$ 사용하기
11.07 히스토리 치환
11.08 명령어 사이클 반복
11.09 파일에 일련의 명령어들을 수행하기
11.10 :p를 사용해서 히스토리 확인하기
11.11 로그아웃할 때 히스토리 남겨놓기
11.12 다른 쉘로 히스토리 전달하기
11.13 쉘의 명령행 편집하기
11.14 대화식 히스토리 편집을 위한 다른 방법
11.15 histchars를 사용하여 C 쉘 히스토리 문자 바꾸기
11.16 히스토리 문자를 바꾸는 것 이외의 방법
12장. 작업 제어
12.01 효율적인 작업 제어
12.02 작업을 가리키는 여러 가지 방법
12.03 "현재 작업"이 생각했던 작업과 다른 경우
12.04 작업 제어와 vi의 autowrite
12.05 시스템 과부하? 몇몇 작업을 중지시키자
12.06 작업의 상태 변경 알리기
12.07 stty tostop을 이용하여 백그라운드 출력을 차단하기
12.08 작업 제어 요약
12.09 screen을 이용하여 여러 개의 쉘 세션들을 실행하기
13장. 입력과 출력 리다이렉션
13.01 표준 입력과 표준 출력 이용하기
13.02 cat 명령어에 인자를 하나만 주는 것은 부족하다
13.03 표준 에러만을 파이프로 전달하기
13.04 페이저로 파이프할 때의 문제점
13.05 C 쉘의 리다이렉션
13.06 noclobber를 이용한 안전한 리다이렉션
13.07 ( ) 서브 쉘 연산자
13.08 {리스트}를 이용하여 Bourne 쉘 명령어들을 그룹화하기
13.09 tee를 이용하여 출력을 여러 곳으로 보내기
13.10 tee를 이용해서 여러 명령어들을 하나의 파일로 모으기
13.11 tpipe: 표준 출력을 하나 이상의 곳으로 리다이렉트하기
13.12 여러 터미널로 쓰기
13.13 파일명 "-" 348
13.14 빈 파일로 할 수 있는 일은?
13.15 양동이가 넘쳐흐를 때 :-)
13.16 logerrs를 이용하여 에러를 저장하고 보여주기
3부. 파일시스템과 춤을
14장. 파일시스템 개요
14.01 파일시스템에 대해 배울 내용
14.02 상대 경로명과 절대 경로명
14.03 현재 디렉토리에 대한 이해
14.04 현재 디렉토리의 이름 찾기
14.05 디렉토리 변경 시 시간 절약: cdpath
14.06 쉘의 pushd와 popd 명령어
14.07 pushd를 활용한 앨리어스
14.08 앨리어스를 이용한 빠른 cd
14.09 디렉토리 대표 문자를 이용해서 cd하기
14.10 디렉토리들과 파일들을 찾게 도와주는 변수들
14.11 아무개의 홈 디렉토리를 빠르게 찾기
14.12 쉘 변수로 위치 표시하기
14.13 나는 실제로 어느 디렉토리에 있지?
14.14 디렉토리를 들어가고 나올 때 자동으로 설정하기
15장. 와일드카드
15.01 파일의 이름을 지정하는 와일드카드
15.02 파일명 와일드카드 요약
15.03 Korn 쉘 및 Bourne 쉘에 { } 연산자 추가하기
15.04 와일드카드가 일치하지 않으면?
15.05 점으로 시작하는 파일들을 와일드카드로 일치시키기
15.06 경로명 안에 와일드카드를 사용할 수 없는 경우
15.07 grep -l로 일치하는 파일 목록 얻기
15.08 grep -c를 사용해서 일치하지 않는 파일 목록 얻기
15.09 nom: 와일드카드에 일치되지 않는 파일들을 나열
15.10 디렉토리에만 일치되는 와일드카드
16장. 어디에 두었더라?
16.01 find 명령어 외의 모든 것들
16.02 ls -t와 ls -u를 가지고 가장 오래되거나 가장 새로운 파일들을 찾기
16.03 ls 출력을 재배열하기
16.04 모든 서브 디렉토리들을 ls -R로 출력하기
16.05 세 가지 UNIX의 파일 시간
16.06 clf, cls: "압축된" ls 목록
16.07 ls 단축 명령: ll, lf, lg 등
16.08 ls -d 옵션
16.09 최근에 변경된 파일들을 나열하기 위한 앨리어스
16.10 findcmd: 검색 경로에서 명령어 찾기
16.11 ls -A와 -a로 숨은 파일들을 보여주기
16.12 유용한 ls 앨리어스들
16.13 파일을 액세스할 수 없다면 이름 속의 공백을 찾아보자
16.14 파일명 속의 출력 불가능한 문자들을 보여주기
16.15 웃으면서 UNIX를 변경할 수 있게 해주는 스크립트: dir, ...,...
16.16 고유한 파일명을 자동으로 선택하기
16.17 파일의 경로명에서 디렉토리 이름 가져오기
16.18 오늘 생성했거나 편집한 파일들을 나열하기
16.19 stree: 간단한 디렉토리 트리
16.20 vtree: 비주얼 디렉토리 트리 프로그램
16.21 같은 이름을 가진 모든 디렉토리 찾기
16.22 dircmp로 두 디렉토리 트리를 비교하기
16.23 두 디렉토리 트리 내의 파일명들을 비교하기
16.24 종류별로 파일의 개수 세기
16.25 파일들을 나이와 크기로 나열하기
16.26 findtext로 텍스트 파일들을 찾아내기
16.27 newer: 가장 새로운 파일의 이름을 출력하기
16.28 oldlinks: 연결되지 않은 심볼릭 링크 찾아내기
16.29 sls: 출력 형식을 선택할 수 있는 훌륭한 ls
17장. find로 파일 찾기
17.01 find 명령은 대단하다; 문제는 그 사용법을 아는 것이다
17.02 깊은 디렉토리 트리 파고 들어가기
17.03 -print를 잊지 말자
17.04 특정한 이름을 가진 파일 찾기
17.05 오래된 파일들 검색하기
17.06 find 검색 연산자의 전문가가 되기
17.07 find가 찾는 시간들
17.08 정확한 파일 시간 비교
17.09 -newer의 문제점들
17.10 찾은 것에 명령 실행하기
17.11 -exec을 이용해서 커스텀 테스트하기
17.12 명령어 하나로 여러 가지 찾기
17.13 종류에 따라 파일 검색하기
17.14 크기로 파일 검색하기
17.15 퍼미션으로 파일 검색하기
17.16 소유자와 그룹으로 검색하기
17.17 디렉토리 트리 복제하기(경로명 없이 find의 { } 연산자를 이용)
17.18 "빠른 find" 사용하기
17.19 find 데이터베이스를 이용해서 (훨씬) 더 빠르게 파일 찾기
17.20 디렉토리 트리를 grep 하기
17.21 lookfor: 어떤 파일에 그 단어가 있는가?
17.22 파일을 가리키는 링크 찾기
17.23 -prune으로 파일 찾기
17.24 find 내에서 트리의 특정 부분을 건너뛰기(더 선택적인 -prune)
17.25 find가 네트워크 파일시스템들을 검색하지 않게 하기
18장. 링크걸기, 이름바꾸기, 그리고 파일 복사하기
18.01 파일 복사가 뭐 그리 복잡한가?
18.02 디렉토리에는 실제로 무엇이 들어있는가?
18.03 2개 이상의 이름을 가진 파일
18.04 링크에 대한 더 많은 내용
18.05 링크 만들기와 삭제하기
18.06 끊어진 심볼릭 링크
18.07 디렉토리에 링크걸기
18.08 심볼릭 링크의 실제 파일명 보여주기
18.09 여러 파일들의 이름 바꾸기, 복사하기, 비교하기
18.10 그 일을 하는데는 한가지 이상의 방법이 있다
18.11 ren으로 파일 이름 바꾸기
18.12 대화식으로 파일 목록의 이름 바꾸기
18.13 한가지 이상의 방법
18.14 다중 심볼릭 링크들을 재연결하기
18.15 cp -r로 디렉토리 트리 복사하기
18.16 (tar | tar)를 사용해서 디렉토리 트리 복사하기
19장. 아카이브 만들기와 읽기
19.01 묶어서 옮기기
19.02 쉘 아카이브에 대한 소개
19.03 unshar: 쉘 아카이브를 풀기
19.04 unshar의 단순한 버전
19.05 tar를 사용하여 아카이브 만들고 풀기
19.06 GNU tar 샘플러
19.07 압축된 아카이브에서 파일 풀기
19.08 설명하는 tar의 문제점
19.09 시스템 V 테이프 아카이버: cpio
20장. 파일 백업
20.01 tar에 대해 한 말씀
20.02 백업을 직접 해보자
20.03 로컬 테이프 장치를 이용해서 백업하기
20.04 tar 명령어로 테이프에서 파일을 복구하기
20.05 tar를 이용하여 원격지 테이프 장치로 백업하기
20.06 원격 장비의 테이프 장치에 쓰기
20.07 선택적 백업을 위한 타임스탬프 파일 생성
20.08 이런 파일은 포함하고 저런 파일은 제외하면서 tar 실행하기
20.09 프로그램이 와일드카드를 이해하지 못하는 경우
20.10 절대 경로명 금지
20.11 tar의 인자들을 올바른 순서대로 취하기
20.12 SCCS나 RCS를 이용한 파일 보호
20.13 SCCS 개요
20.14 RCS 개요
20.15 rcsrevs를 이용한 RCS 리비전 번호 나열
21장. 파일 관리에 대한 추가 내용
21.01 들어가기에 앞서
21.02 임시 파일들에 적합한 장소: /tmp
21.03 임시 파일에 고유한 이름을 부여
21.04 /tmp와 /usr/tmp가 모두 있는 이유
21.05 파일의 마지막 액세스 시간이 중요한 경우
21.06 파일의 Inode 변경(생성 시간이 아님!) 시간
21.07 touch를 이용하여 파일 수정 시간을 설정하기
21.08 MAILCHECK 및 mail 변수
21.09 make를 이용해서 자동으로 파일 인쇄물을 최신으로 유지하기
21.10 화면의 상단에 디렉토리 목록을 나타내기: dirtop
21.11 안전한 삭제, 이동, 그리고 복사
21.12 파일들을 디렉토리에 복사하기
21.13 stat을 이용해서 Inode 읽기
21.14 자동으로 날짜를 파일명에 추가하기
22장. 파일 보안, 소유권 및 공유
22.01 파일 소유권과 보안에 대한 소개
22.02 파일과 디렉토리 퍼미션에 대한 안내
22.03 새로운 파일의 소유주
22.04 정확한 umask 설정
22.05 setgid 비트를 갖는 디렉토리 내의 그룹 퍼미션
22.06 스티키 비트를 이용한 파일 보호
22.07 chmod를 이용해서 파일의 퍼미션 변경
22.08 chmod = 연산자의 효용성 548
22.09 중요한 파일을 쓰기 금지하여 보호
22.10 cx, cw, c-w: 파일 퍼미션의 신속한 변경
22.11 쓰기 액세스가 없는 파일을 수정하기
22.12 액세스는 가능하지만 목록은 볼 수 없는 디렉토리
22.13 그룹과 그룹 소유권
22.14 사용자를 그룹에 추가하여 퍼미션 박탈하기
22.15 퍼미션 뒤섞기
22.16 cpmod를 이용한 퍼미션 복사
22.17 crypt의 보안성을 높이는 방법
22.18 보안을 위해 화면 지우기
22.19 쉘 스크립트는 읽기 및 실행이 가능해야 함
22.20 왜 BSD UNIX에서 파일 소유권을 변경할 수 없을까?
22.21 chown을 이용하지 않고 파일의 소유권 바꾸기
22.22 누구나 이용할 수 있는 su 명령어
23장. 파일 지우기
23.01 생성과 소멸의 순환
23.02 rm의 무서움
23.03 rm을 안전하게 만드는 트릭
23.04 "yes"나 "no" 중에서 항상 yes
23.05 일부만 지우고 일부는 남겨두기
23.06 대화식으로 파일들을 지우는 빠른 방법
23.07 일부 디렉토리 내의 안전한 파일 삭제
23.08 안전한 삭제의 장단점
23.09 delete: 불의의 삭제로부터 파일들을 보호
23.10 무조건 지우기: rm -f
23.11 괴상한 이름의 파일 지우기
23.12 와일드카드를 이용해서 이상한 이름의 파일들 지우기
23.13 비어있는 이름의 파일들 지우기
23.14 대시(-)로 시작하는 파일명 다루기
23.15 unlink를 이용해서 이상한 이름의 파일을 제거하기
23.16 이상한 파일을 inode 번호로 지우기
23.17 디렉토리를 지울 때의 문제점
23.18 디렉토리 생성과 삭제의 원리
23.19 읽히지 않는 (BSD) 매뉴얼 페이지 삭제하기
23.20 낡은 파일들 지우기
23.21 하나만 남기고 모든 파일을 다 지우기
23.22 find를 이용해서 불필요한 파일들을 청소하기
24장. 디스크 공간을 늘리는 기타 방법
24.01 파일을 지우는 대신에 비워버리자
24.02 디스크 공간 절약: 로그 파일과 메일박스
24.03 열려있는 파일을 언링크하는 것은 좋은 생각이 아니다
24.04 링크를 이용해서 공간 절약하기
24.05 파일 크기 제한
24.06 탭 문자를 이용해서 공간 절약하기
24.07 파일을 압축해서 공간 절약하기
24.08 디렉토리 트리를 tar로 묶고 압축해서 공간 절약하기
24.09 디스크 공간 확인하기
24.10 zloop: 압축된 파일에 명령어 실행하기
24.11 zvi, zex, 그리고 zed를 이용하여 압축된 파일 편집하기
24.12 디렉토리 트리 압축하기: 세세한 조절
24.13 strip으로 실행 파일에서 공간 절약하기
24.14 strip은 신중하게 이용하자
24.15 디렉토리 새로 구성하기
24.16 덩치가 큰 디렉토리 다듬기
24.17 디스크 쿼터
24.18 덩치가 크다고 디스크를 많이 차지하는 것은 아니다
4부. 파일 안 살펴보기
25장. 파일 안에 무엇이 있는가 살펴보기
25.01 어려운 문제 해결하기
25.02 cat을 정복하는 네 가지 방법
25.03 파일 내용을 페이지 단위로 자르는 more 명령어 사용하기
25.04 "more" 보다는 "less"
25.05 압축 파일, RCS 파일, 출력 불가 파일들 보기
25.06 공백 문자는 어떻게 보나?
25.07 cat -v 또는 od -c를 이용해서 출력 불가 문자들 보기
25.08 파일 타입 찾아내기
25.09 공백 문자 지우고 덧붙이기
25.10 비어있는 라인 제거하기
25.11 모든 공백 라인들을 무시하는 cat: crush
25.12 두 개의 스페이스, 세 개의 스페이스...
25.13 pushin: 여분의 공백 문자 줄이기
25.14 파일의 끝을 보기: tail
25.15 tail을 잘 다루기
25.16 파일이 점점 커질 때 어떻게 파일을 보나?
25.17 tail이 없는 경우에는 앨리어스를
25.18 많은 파일의 추가적인 입력 보기
25.19 flip을 이용해서 라인 파일들의 라인들을 거꾸로 보기
25.20 파일의 첫부분 출력하기
25.21 라인 번호 달기
26장. 정규표현식(패턴 매칭)
26.01 표현식이란?
26.02 와일드카드와 정규표현식을 혼동하지 마라!
26.03 정규표현식 이해하기
26.04 정규표현식에서 메타 문자 사용하기
26.05 정규표현식 시작하기
26.06 무엇이 정규표현식에 매칭되는가?
26.07 매칭의 확장을 제한하기
26.08 원하지 않는 메타 문자를 결코 사용하지 않는다
26.09 다른 유닉스 프로그램에서 유효한 메타 문자들
26.10 예를 통한 패턴 매칭에 대한 참조
27장. 파일에서 검색하기
27.01 grep의 다른 버전들
27.02 grep으로 텍스트 검색
27.03 매칭되지 않는 텍스트 찾기
27.04 단어를 패턴으로 찾기
27.05 egrep으로 텍스트의 확장 검색
27.06 빠른 grep은 아니다
27.07 패턴들의 리스트에 대한 grep
27.08 glimpse와 agrep
27.09 새로운 grep이 훨씬 빠르다
27.10 rcsgrep으로 RCS 파일 검색
27.11 sed를 사용하여 다중 라인의 내용 검색하기
27.12 펄로 일반적인 grep 명령어 만들기
27.13 펄로 작성된 grep 같은 프로그램
27.14 복합 검색
27.15 빠르게 검색하기
27.16 대소문자 구별없이 검색하기
27.17 열에 있는 한 개의 문자 찾기
27.18 "look"을 이용한 빠른 검색과 오타 체크
27.19 바이너리 파일에서 단어 검색
27.20 찾은 문자열을 강조하여 보여주는 hgrep
28장. 파일 비교하기
28.01 diff로 파일의 차이점 체크하기
28.02 세 개의 다른 버전을 비교하는 diff3
28.03 context diff
28.04 Side-by-Side diff: sdiff
28.05 다른 파일과 나란히 파일 비교하기
28.06 sdiff로 파일 내용 선택하기
28.07 아주 긴 파일들의 비교: bdiff
28.08 diff 결과를 쉽게 보기
29.09 diff에 의해 만들어진 ex 스크립트
28.10 diff와 탭스탑의 문제점
28.11 cmp와 diff
28.12 comm으로 두 파일을 비교하기
28.13 make는 프로그래머만을 위한 것이 아니다!
28.14 make를 더 잘 사용하기
28.15 diffmk로 troff 파일의 변경 보기
29장. 철자 체크, 단어 수 계산, 텍스트 분석
29.01 유닉스 쉘 명령어
29.02 ispell로 철자 체크하기
29.03 그 단어의 철자는 어떻게 되지?
29.04 spell 내부 들여다 보기
29.05 ispell의 사전에 단어 추가하기
29.06 라인 수, 단어, 문자를 세는 wc
29.07 각각의 단어들이 얼마나 많이 사용되었는가?
29.08 두 번 반복되는 a 찾기
29.09 closure를 찾기
29.10 부디, 단어만을
5부. 문서 편집
30장. vi에 대한 팁과 기교
30.01 vi와 ex 편집기가 왜 중요한가?
30.02 이 장에서 다루게 될 내용
30.03 마우스와 vi
30.04 vi로 여러 개의 파일들을 편집하기
30.05 파일들을 오가며 편집하기
30.06 vi와 ex의 로컬 설정들
30.07 버퍼를 이용하여 텍스트를 옮기고 복사하기
30.08 번호 버퍼에서 삭제한 것을 되살리기
30.09 검색 패턴 및 글로벌 명령어 이용하기
30.10 ex와 vi에서 치환 확인하기
30.11 원본 파일을 보존하고 새 파일로 쓰기
30.12 파일의 일부분을 저장하기
30.13 기존 파일에 덧붙이기
30.14 패턴을 이용하여 텍스트 블록을 옮기기
30.15 유용한 글로벌 명령어들(패턴 매칭 활용)
30.16 등장 횟수 세기: 검색 랩 멈추기
30.17 라인에 있는 모든 단어를 대문자로 변환하기
30.18 각각의 파일에 대한 vi 옵션을 자동으로 설정하기
30.19 모드라인: 버그인가 기능인가?
30.20 다중 편집 설정 파일: 검색부터 시작하기
30.21 각기 다른 파일별 설정
30.22 유닉스 명령어를 통한 텍스트 필터링
30.23 안전하게 vi 필터를 통과시키기
30.24 vi/ex 파일 복구 및 네트워크 파일시스템
30.25 vi -r은 편집 종료 시 복구 버퍼에 기록하지 않을 수도 있다
30.26 쉘 이스케이프: 다른 명령어를 실행하면서 또다른 유닉스 명령어 실행하기
30.27 vi 복합 검색
30.28 ctags와 tag로 함수와 인클루드 파일 추적하기
30.29 여러 개의 tags 파일 설정하기
30.30 두 가지 기능의 펑션키 처리
30.31 vi 단어 축약어
30.32 vi 축약어를 명령어로 이용하기(vi들간의 잘라내기 및 붙이기)
30.33 vi 축약어를 이용하여 오타 수정하기
30.34 vi의 라인 명령어와 문자 명령어
30.35 임시 공간이 부족한가? 다른 디렉토리를 이용하자
30.36 ex 오픈 모드가 유용한 경우
30.37 라인 깔끔하게 편집하기
30.38 Undo를 이용하여 위치 찾기
31장. vi에서 커스텀 명령어 만들기
31.01 왜 여러분들이 해야 하는 것보다 더 많이 입력하는가?
31.02 vi 맵 명령어를 이용한 입력과 시간 절약
31.03 map! 명령어 사용의 손실
31.04 vi @-함수
31.05 vi를 실행하는 윈도우를 복사하기 위한 키맵
31.06 ex에 의한 키 해석 방지
31.07 반복적인 편집을 위한 맵
31.08 vi에서의 키 맵핑의 다양한 예
31.09 .exrc 파일을 위한 유용한 도구
31.10 vi 키맵을 반복해서 실행하기
31.11 CAPS LOCK을 사용하지 않고 대문자 쓰기
31.12 텍스트 입력 모드에서의 커서 동작
31.13 텍스트 입력 모드에서 커서 키 만들기
31.14 간과하기 쉬운 중요한 맵의 기능: noremap 이용
31.15 복잡한 매크로 이용하기
31.16 긴 라인을 분리하는 vi 매크로
32장. GNU Emacs
32.01 Emacs: 그밖의 편집기들
32.02 Emacs의 기능: 목록
32.03 자신에게 맞는 환경 설정하기
32.04 백업과 파일 자동저장
32.05 수정 모드에서 Emacs 편집하기
32.06 명령어 입력 대행
32.07 타이핑이 빠른 사람에겐 시간 절약을
32.08 검색 기능
32.09 Emacs를 사용하기 전에 PWD 재설정
32.10 파일에 바이너리 문자 삽입하기
32.11 축약어 모드 사용하기
32.12 Emacs에서의 흐름 제어 문제
32.13 재미있는 기능
33장. 배치 편집
33.01 라인 편집기의 놀라움
33.02 편집 스크립트 작성하기
33.03 라인 위치 지정
33.04 유용한 ex 명령어
33.05 vi 안에서 편집 스크립트 실행하기
33.06 한 번 편집으로 여러 파일들을 변경하기
33.07 ed/ex 배치 편집: "no matches" 에러 피하기
33.08 배치 편집: 큰 파일 편집 시 에러처리
33.09 patch: 파일 변경 방법
33.10 qsubst를 이용하여 명령행에서의 빠른 변경
33.11 빠른 참조: awk
33.12 awk의 버전
34장. 스트림 편집기 sed
34.01 sed에 대해 알아야 하는 2가지 사항
34.02 sed 실행하기
34.03 sed 스크립트 테스트하고 이용하기: checksed, runsed
34.04 sed 라인 지정 방법
34.05 스크립트 내의 명령어들의 순서
34.06 한 번에 하나씩
34.07 정규표현식 구분 짓기
34.08 sed 치환 구문 내의 뉴라인
34.09 치환문에서 검색 문자열 참조하기
34.10 검색 문자열의 일부분을 참조하기
34.11 검색과 치환: 여러 개 중에서 하나만 매치
34.12 텍스트 변환
34.13 대기 공간: 곁가지 버퍼
34.14 라인의 일부분 변환하기
34.15 라인을 넘나들며 편집하기
34.16 열심히 일하는 비서
34.17 여러 라인에 걸쳐 분리되어 있는 패턴 찾기
34.18 다중라인 지우기
34.19 특정 부분을 제외하고 편집하기
34.20 sed의 Test 명령어
34.21 sed의 Quit 명령어 사용하기
34.22 sed Quit 명령어의 위험성
34.23 sed 쉘 스크립트에서의 뉴라인, 인용부호, 백슬래시
34.24 빠른 참조: sed
35장. 편집의 한계 극복
35.01 못할 것이 없다!
35.02 fmt를 이용해서 텍스트 다듬기
35.03 fmt의 변형
35.04 recomment: 프로그램의 주석문 블록 청소
35.05 메일과 뉴스 메시지의 헤더를 제거하는 behead
35.06 dd를 이용한 파일 다루기
35.07 offset: 텍스트 들여쓰기
35.08 파일의 라인들을 가운데 맞춤하기
35.09 파일 조각내기: split
35.10 구문 내용에 의해 파일을 조각내기: csplit
35.11 tr을 이용하여 문자 바꾸기
35.12 ASCII와 EBCDIC 간의 변환
35.13 dd를 이용한 기타 변환
35.14 cut을 이용해서 열이나 필드를 잘라내기
35.15 colrm을 이용해서 열들을 잘라내기
35.16 cols를 이용해서 열을 자동으로 생성하기
35.17 pr을 이용해서 열 속에 텍스트 만들기
35.18 열 속에 붙이기
35.19 join을 이용해서 라인들을 붙이기
35.20 빠른 참조: uniq
35.21 IFS를 이용해서 문자열 분리하기
35.22 들쭉날쭉한 열을 깔끔하게 다듬기
35.23 텍스트 돌리기
36장. 정 렬
36.01 순서대로 정렬하기
36.02 필드 정렬: sort 명령의 동작 원리
36.03 필드 구분자 바꾸기
36.04 필드 구분자가 공백일 때의 문제점
36.05 알파벳 정렬과 숫자 정렬
36.06 정렬에 대한 다양한 힌트
36.07 여러 라인 단위로 정렬하기
36.08 lensort: 라인 길이별로 정렬하기
36.09 성으로 이름 목록 정렬하기
37장. 펄, 못하는 게 없는 도깨비 방망이
37.01 펄에 관해 이 책에서 다룰 내용
37.02 펄을 배워야 하는 이유 #1
37.03 훌륭한 프로그래머로서 갖추어야 할 3대 덕목
37.04 펄을 배워야 하는 이유 #2
37.05 자, 이제 펄 5에 대해 이야기하자
6부. 프로세스 관리
38장. 프로세스 시작, 정지, 그리고 종료
38.01 이번 장에 포함된 내용들
38.02 fork, 그리고 exec
38.03 프로세스 관리: 전반적 개념들
38.04 서브 쉘
38.05 ps 명령어
38.06 제어 터미널
38.07 왜 ps 는 어떤 명령어들을 괄호 안에 넣어서 보여주는가?
38.08 시그널이란?
38.09 포그라운드 작업 죽이기
38.10 kill 명령어로 프로세스 죽이기
38.11 프린터 큐 감시자: 재 기동시킬 수 있는 데몬 쉘 스크립트
38.12 자신의 모든 프로세스들을 죽이기
38.13 패턴과 일치하는 프로세스들을 대화식으로 죽이기
38.14 폭주되고 있는 프로세스들
38.15 죽일 수 없는 프로세스들을 정리하기
38.16 왜 좀비 프로세스를 죽일 수 없는가
38.17 csh에서 로그아웃할 때 백그라운드 프로세스들을 자동으로 죽이기
38.18 nohup
39장. 시간과 성능
39.01 어떤 시간을 의미하는가?
39.02 시간측정 프로그램
39.03 csh의 time 변수
39.04 runtime을 이용한 명령어 평균 실행 시간 구하기
39.05 왜 시스템이 이렇게 느린거지?
39.06 lastcomm: 현재 어떠한 명령어들이 실행되고 있으며 그것들은 얼마나 오랫동안 실행되고 있는가?
39.07 시스템 부하 검사: uptime
39.08 커다란 환경은 여러분의 작업을 느리게 할 수 있다
39.09 언제 다른 사용자들에게 “nice” 해져야 하는지, 그리고 언제 그래선 안되는지
39.10 nice에 관한 잘 알려진 비밀
39.11 BSD UNIX 상에서 우선순위 변경하기
39.12 무엇이 컴퓨터를 느리게 만드는가? 그리고 어떻게 해결할 것인가?
40장. 나중에 실행하기
40.01 한가한 시간을 활용하기
40.02 잠시 기다리기: sleep
40.03 at 명령어
40.04 at에 의해 사용될 쉘 선택하기
40.05 다른 at 또는 cron 작업들을 피하기
40.06 시스템 V.4 배치 큐
40.07 at 작업이 조용히 실행되게 하기
40.08 at 작업이 자동적으로 다시 실행되게 하기
40.09 작업 확인 및 삭제
40.10 nextday, nextweekday: 내일 또는 다음주
40.11 여러분 자신에게 재확인 메일 보내기
40.12 주기적 프로그램 실행: cron 설비
40.13 crontab 항목 추가하기
40.14 cron 항목에서 표준 입력 포함하기
40.15 crontab 편집을 더 쉽고 안전하게 만드는 crontab 스크립트
7부. 터미널과 프린터
41장. 터미널과 시리얼 라인 설정
41.01 조금 더 깊이 파고들기
41.02 stty와 그런 모든 도구들
41.03 stty로 터미널 설정 알아내기
41.04 유닉스가 탭 문자를 다루는 방법
41.05 일부 시스템이 프롬프트를 넘어서 백스페이스하는 이유
41.06 포트 세팅을 유지하기 위해 sleep 사용하기
41.07 터미널에서 매우 긴 라인 읽기
41.08 pty와 윈도우 시스템
41.09 터미널을 조절하는 명령어들
41.10 쉘 프로그램에서 terminfo 기능 사용하기
41.11 termcap과 terminfo가 터미널을 설명하는 방법
41.12 터미널의 특수키가 어떤 문자를 보내는지 알아내기
42장. 터미널에 생기는 문제들
42.01 엉망이 된 터미널에서 의미 찾기
42.02 엉망이 된 터미널이나 작업 고치기
42.03 가끔 TERM을 바꾸는 것이 안되는 이유
42.04 엉망이 된 터미널을 리셋하기 위한 점검표
42.05 점검표: 화면 크기가 엉망인가?
42.06 화면 크기를 검사하는 파일들
42.07 termtest: 터미널에 반복되는 문자 보내기
42.08 에러가 너무 빨리 지워지는가? 이런 해결책은 어떤가?
43장. 프린트하기
43.01 프린팅의 소개
43.02 유닉스에서 프린팅의 소개
43.03 lpc를 이용한 프린터 제어
43.04 다른 프린터 사용하기
43.05 스풀링을 위해 심볼릭 링크 사용하기
43.06 터미널 프린터에 프린트하기
43.07 프린트하기 전에 임시방편으로 포맷팅하기
43.08 pr과 fold로 여백 결정하기
43.09 프린팅을 위해 텍스트를 들여쓰기
43.10 pr없이 파일 위에 파일명 헤더 쓰기
43.11 큰 글자들: banner
43.12 조판 개요
43.13 텍스트 포맷터들 nroff, troff, ditroff, ...
43.14 nroff/troff와 매크로 패키지
43.15 소스 파일을 프린터로 보내기
43.16 groff
43.17 nroff가 없는가? gnroff나 awf를 시도해 보자
43.18 nroff가 볼드체와 밑줄을 만드는 방법; 그것을 없애는 방법
43.19 앞부분의 탭과 그밖의 사소한 것 없애기
43.20 troff 매크로 정의 표시하기
43.21 sed로 troff 입력을 전처리하기
43.22 텍스트 파일을 포스트스크립트로 변환하기
43.23 psselect: 포스트스크립트 파일에서 일부 페이지를 프린트하기
43.24 그밖의 포스트스크립트 유틸리티들
43.25 이식 가능한 비트맵 패키지
8부. 쉘 프로 그래밍
44장. 초보자를 위한 쉘 프로그래밍
44.01 모두가 배워야 하는 쉘 프로그래밍
44.02 간단한 쉘 프로그램 작성하기
44.03 도대체 쉘이란 무엇인가?
44.04 시스템이 파일을 실행하는 방법 테스트하기
44.05 Bourne 쉘의 case를 이용한 문자열 값 테스트하기
44.06 case문에서의 패턴 매칭
44.07 유닉스 프로세스의 종료 상태
44.08 if 구문으로 종료 상태 테스트하기
44.09 성공 여부 테스트하기
44.10 종료 상태를 테스트하는 순환문
44.11 쉘(스크립트)의 종료 상태 설정하기
44.12 인터럽트로 인해 종료 트랩하기
44.13 read: 키보드로부터 읽기
44.14 쉘 스크립트 안에 awk, sed 등을 넣기
44.15 쉘 스크립트에서 명령행 인자 다루기
44.16 for 순환문으로 명령행 인자 다루기
44.17 while과 shift로 인자 다루기
44.18 표준 명령행 구문분석
44.19 Bourne 쉘의 set 명령어
44.20 test: 파일과 문자열 테스트하기
44.21 새로운 명령어를 위한 이름 고르기
44.22 프로그램 이름 찾기; 복수 개의 프로그램 이름
44.23 .과 source 명령어로 파일 읽기
45장. 고수를 위한 쉘 프로그래밍
45.01 쉘 환경을 내 맘대로
45.02 : #, #!의 역사
45.03 쉘이 필요없는 스크립트
45.04 재미있는 #!
45.05 내용을 보여주는 파일 및 #!의 역할
45.06 #!이 없어도 Bourne 쉘로 실행되도록 쉘을 작성하기
45.07 exec 명령어
45.08 자식 프로세스로 시그널 넘기기
45.09 Bourne 쉘의 ":" 연산자
45.10 편리함과 보안을 위해 오픈된 파일을 삭제하기
45.11 다목적 jot 명령어
45.12 파라미터 치환
45.13 디스크 공간과 프로그래밍 수고를 덜기: 하나의 프로그램에 여러 이름을 주기
45.14 마지막 명령행 인자를 찾기
45.15 명령행 파라미터를 모두 unset하는 방법
45.16 표준 입력을 for 순환문으로
45.17 여러 개의 변수들을 이용한 순환문 만들기
45.18 basename과 dirname 이용하기
45.19 여러 순환문 제어 명령어들을 이용하는 while 순환문
45.20 오픈 파일 및 파일 기술어
45.21 n>&m: 표준 출력과 표준 에러를 서로 바꾸기
45.22 파일을 라인 단위로 처리하기
45.23 리다이렉트된 I/O 순환문의 입력과 출력
45.24 쉘이 표준 입력으로부터 스크립트를 읽을 수 있다. 그러나...
45.25 표준 입력으로부터 작성하는 즉석 쉘 스크립트
45.26 "here" 문서를 인용 처리할 때의 문제점: sh 대 csh
45.27 "비밀스러운" 대답을 받을 때는 echo를 꺼놓자
45.28 빠른 참조: expr
45.29 expr을 이용해서 문자열 내의 문자들을 테스트하기
45.30 문자열의 일부분을 포획하기
45.31 중첩된 명령어 치환
45.32 read 명령어보다 더 좋은 grabchars
45.33 하나의 case를 이용해서 두 개의 문자열을 테스트하기
45.34 Bourne 쉘의 배열
45.35 스크립트 내에서 제어 문자 이용하기
45.36 쉘의 잠금파일
46장. 쉘 스크립트 디버깅
46.01 쉘 스크립트 디버깅을 위한 팁
46.02 인용 처리에 문제가 있다면 잘 생각해 보고 echo를 사용하자
46.03 쉘 변수를 보여주는 Bourne 쉘 디버거
46.04 숫자를 비교할 때 문법 에러 방지하기
46.05 문자열을 비교할 때 문법 에러 방지하기
46.06 Bourne 쉘 -e 옵션의 버그를 조심하자
46.07 인용 처리와 명령행 파라미터
46.08 내장 명령어의 실행 실패 테스트
46.09 명령어가 상태를 리턴하지 않으면 에러 메세지를 확인하라
46.10 이식성이 좋은 echo 명령어
47장. C 쉘 프로그래밍은... 곤란해!
47.01 왜?
47.02 해롭다고 간주되는 C 쉘 프로그래밍
47.03 if를 이용한 조건문
47.04 C 쉘 변수 연산자와 표현식
47.05 C 쉘 배열 이용하기
47.06 C 쉘의 switch문
9부. 잡동사니
48장. 사무자동화
48.01 음, 다른 적당한 말이 있을까?
48.02 온라인 전화/주소록
48.03 화면위에 메모장을
48.04 자동 재확인 또는 그 이상: calendar
48.05 leave: 오! 마칠 시간이라네!
48.06 어떤 날짜에 대해서도 달력을 보자: cal
48.07 cal은 오늘 날짜를 확실히 알려준다
48.08 132열 터미널 또는 프린터를 위한 달력
48.09 pcal을 가지고 포스트스크립트 달력 얻기
48.10 이름과 주소 다루기
48.11 인덱스 데이터베이스 프로그램
48.12 필터와 함께 인덱스 사용하기
49장. 수 다루기
49.01 bc: 쉘 프롬프트에서 간단한 산수를
49.02 bc: 16진수 또는 8진수 변환
49.03 진수변환 시 주의사항
49.04 bc의 사인, 코사인의 단위는 라디안
49.05 cvtbase를 사용한 진수변환
49.06 expr를 사용한 빠른 연산
49.07 addup으로 열의 값들을 합계내기
49.08 스프레드쉬트가 있었으면 좋을텐데
49.09 ipl로 사무용 그래픽을
50장. 온라인 문서 기능과 그 외의 것들
50.01 UNIX의 온라인 문서
50.02 apropos 명령어
50.03 apropos가 없는 시스템 상에서 apropos
50.04 whatis: 온라인 명령어 요약
50.05 whereis: 명령어가 어디에 있는지 찾기
50.06 온라인 매뉴얼 페이지 탐색하기
50.07 어떻게 유닉스 시스템이 시스템 이름을 기억하고 있을까?
50.08 어떤 버전을 사용하고 있을까?
50.09 인덱스 읽는 법
50.10 troff를 배우지 않고 자신만의 맨페이지 만들기
50.11 -man 매크로를 사용하여 간단한 매뉴얼 페이지 작성하기
50.12 공통 UNIX 에러 메시지들
51장. 자잘하지만 유용한 프로그램들
51.01 드디어 끝이 보인다
51.02 어떻게 유닉스는 시간을 유지할까?
51.03 아스키 문자들: 값들을 나열하고 얻는 법
51.04 누가 지금 사용 중일까?
51.05 script를 사용해서 무엇을 했는지 기록하기
51.06 script 파일 정리하기
51.07 성급한 사람들을 위해
51.08 Bang Splat을 입력하라. Rabbit Ears를 잊지말자
51.09 "로그인" 쉘 만들기
51.10 date 명령어
51.11 테스트를 위해 임의 크기의 파일을 만들기
51.12 전자우편의 웃는 얼굴
52장. CD-ROM에 수록된 내용
52.01 소 개
52.02 어디서 공짜 소프트웨어가 끝나고 유닉스가 시작될까?
52.03 유닉스를 위한 일반 소비자용 소프트웨어
52.04 디스크 수록내용에 대한 요약설명
52.05 파워 툴의 CD-ROM을 사용하기
52.06 CD-ROM 드라이브가 없다면?
52.07 소프트웨어를 얻는 다른 방법들
52.08 소스 코드 컴파일하기
52.09 RTR(Ready-to-Run)의 소프트웨어 지원
53장. 용어 정리
찾아보기