서브메뉴

본문

리눅스 문제 분석과 해결
리눅스 문제 분석과 해결
저자 : Mark Wilding,Dan Behman
출판사 : 에이콘출판
출판년 : 2006
정가 : 28000, ISBN : 8989975999

책소개


모든 리눅스 관리자, 개발자, 지원 부서, 고급 사용자를 괴롭혀왔던 불가결의 문제 해결 길잡이가 드디어 출간되었다. 오류, 비정상 종료, 정지, 성능 저하, 기대하지 않은 행동 양식, 기대하지 않은 결과를 시스템적으로 파헤치며, strace, gdb, kdb, SysRq, /proc 등 핵심적인 리눅스 문제 해결 도구에 통달하는 방법을 알려준다.

목차


1장 문제 해결 우수 기법과 초반 조사
1.1 시작
1.2 효과적으로 문제를 분석하기 위한 시스템 준비
1.3 네 단계 조사 과정
1.3.1 1단계: 자기 힘으로 초반 조사 수행
1.3.2 2단계: 효과적인 인터넷 검색
1.3.3 3단계: 심도 있는 조사 수행 (우수한 문제 조사 기법)
1.3.4 4단계: 도움/아이디어 얻기
1.4 기술적 조사
1.4.1 증상과 원인
1.5 상용제품 문제해결 방법
1.6 결론

2장 strace와 시스템 호출 추적
2.1 개요
2.2 strace란?
2.2.1 커널 측면에서 이해하기
2.2.2 언제 strace를 사용할까?
2.2.3 간단한 예제
2.2.4 동일한 예제를 정적으로 빌드한 경우
2.3 주요 strace 옵션
2.3.1 자식 프로세스 추적
2.3.2 시스템 호출 활동 시간 측정
2.3.3 상세 출력 모드
2.3.4 실행 중인 프로세스 추적
2.4 strace 영향과 고려 사항
2.4.1 strace와 EINTR
2.5 디버깅 실례
2.5.1 LD_LIBRARY_PATH 경로를 수정하여 시작 시간 줄이기
2.5.2 PATH 환경 변수
2.5.3 inetd 또는 xinetd (수퍼 서버) 추적하기
2.5.4 통신 오류
2.5.5 strace로 정지 상태 조사하기
2.5.6 역공학 (strace 도구가 동작하는 방식)
2.6 시스템 호출 추적 예제
2.6.1 예제 코드
2.6.2 시스템 호출 추적 코드 설명
2.7 결론

3장 /proc 파일시스템
3.1 개요
3.2 프로세스 정보
3.2.1 /proc/self
3.2.2 /proc/ 세부 사항
3.2.3 /proc//cmdline
3.2.4 /proc//environ
3.2.5 /proc//mem
3.2.6 /proc//fd
3.2.7 /proc//mapped_base
3.3 커널 정보와 조작
3.3.1 /proc/cmdline
3.3.2 /proc/config.gz 또는 /proc/sys/config.gz
3.3.3 /proc/cpufreq
3.3.4 /proc/cpuinfo
3.3.5 /proc/devices
3.3.6 /proc/kcore
3.3.7 /proc/locks
3.3.8 /proc/meminfo
3.3.9 /proc/mm
3.3.10 /proc/modules
3.3.11 /proc/net
3.3.12 /proc/partitions
3.3.13 /proc/pci
3.3.14 /proc/slabinfo
3.4 시스템 정보와 조작
3.4.1 /proc/sys/fs
3.4.2 /proc/sys/kernel
3.4.3 /proc/sys/vm
3.5 결론

4장 컴파일
4.1 개요
4.2 GCC
4.2.1 GCC의 간단한 역사
4.2.2 GCC 버전 호환성
4.3 기타 컴파일러
4.4 리눅스 커널 컴파일
4.4.1 커널 원시 코드 얻기
4.4.2 아키텍처 관련 원시 코드
4.4.3 커널 컴파일 오류 처리하기
4.4.4 일반적인 컴파일 문제
4.5 어셈블리 목록
4.5.1 어셈블리 목록의 목적
4.5.2 어셈블리 목록 생성하기
4.5.3 어셈블리 목록 읽기와 이해하기
4.6 컴파일러 최적화
4.7 결론

5장 스택
5.1 개요
5.2 실생활에 비유한 예제
5.3 x86/x86-64 아키텍처 스택
5.4 스택 프레임이란?
5.5 스택 동작 방식
5.5.1 BP와 SP 레지스터
5.5.2 함수 호출 규약
5.6 스택 자료 참조와 수정
5.7 디버거로 스택 보기
5.8 스택 이해하기
5.8.1 직접 설계한 스택 역추적 기능
5.9 결론

6장 GNU 디버거(GDB)
6.1 개요
6.2 디버거를 사용하는 시점
6.3 명령행 편집
6.4 GDB로 프로세스 제어하기
6.4.1 GDB 명령행에서 프로그램 실행하기
6.4.2 GDB에 실행 중인 프로세스 붙이기
6.4.3 core 파일 사용하기
6.5 데이터, 메모리, 레지스터 확인하기
6.5.1 메모리 맵
6.5.2 스택
6.5.3 메모리와 변수 확인하기
6.5.4 레지스터 덤프
6.6 실행
6.6.1 기본 명령
6.6.2 실행 제어 명령을 위한 환경설정
6.6.3 정지점
6.6.4 감시점
6.6.5 정지 시 표현식 출력
6.6.6 공유 라이브러리로 작업하기
6.7 원시 코드
6.8 어셈블리 언어
6.9 팁과 기교
6.9.1 프로세스 붙이기: 다시 한번 돌아보기
6.9.2 변수와 함수의 주소 찾기
6.9.3 디버그 심볼이 없는 프로그램에서 구조체 보기
6.9.4 엔디언 방식 이해하고 다루기
6.10 C++ 디버깅
6.10.1 전역 생성자와 소멸자
6.10.2 인라인 함수
6.10.3 예외
6.11 스레드
6.11.1 스택 공간 부족
6.12 DDD
6.12.1 데이터 표시 윈도우
6.12.2 원시 코드 윈도우
6.12.3 기계어 윈도우
6.12.4 GDB 콘솔 윈도우
6.13 결론

7장 리눅스 시스템 비정상 종료와 정지
7.1 개요
7.2 정보 수집
7.2.1 syslog 설명
7.2.2 직렬 콘솔 준비하기
7.2.3 직렬 널 모뎀 케이블 연결하기
7.2.4 컴퓨터 시작 과정에서 직렬 콘솔 활성화하기
7.2.5 SysRq 커널 마법 키 활용하기
7.2.6 웁스 보고서
7.2.7 수동 커널 트랩 추가하기
7.2.8 웁스 보고서 검사하기
7.2.9 실패한 코드 행 찾아내기
7.2.10 커널 웁스와 하드웨어
7.2.11 cscope로 커널 원시 코드 색인하기
7.3 결론

8장 KDB를 사용한 커널 디버깅
8.1 개요
8.2 KDB 활성화하기
8.3 KDB 활용하기
8.3.1 KDB 시작하기
8.3.2 일반 동작으로 복귀하기
8.3.3 기본적인 명령어
8.4 결론

9장 ELF
9.1 개요
9.2 개념과 정의
9.2.1 심볼
9.2.2 목적 파일, 공유 라이브러리, 실행 파일, 코어 파일
9.2.3 링킹
9.2.4 런타임 링킹
9.2.5 프로그램 인터프리터/런타임 링커
9.3 ELF 헤더
9.4 세그먼트와 섹션 개괄
9.5 세그먼트와 프로그램 헤더 테이블
9.5.1 텍스트와 데이터 세그먼트
9.6 섹션과 섹션 헤더 테이블
9.6.1 문자열 테이블 형식
9.6.2 심볼 테이블 형식
9.6.3 섹션 이름과 유형
9.7 재배치와 위치 독립 코드
9.7.1 PIC와 PIC가 아닌 경우 비교
9.7.2 재배치와 위치 독립 코드
9.7.3 재배치와 링킹
9.8 ELF 목적파일에서 디버깅 정보 제거하기
9.9 프로그램 해석기
9.9.1 링크 지도
9.10 심볼 결정
9.11 문제 분석을 위한 약한 심볼 활용
9.12 GOT를 활용한 고급 가로채기
9.13 원시 파일
9.14 ELF API
9.15 기타 정보
9.16 결론

부록 A 디버깅 도구 상자
A.1 개요
A.2 프로세스 정보와 디버깅
A.2.1 도구: GDB
A.2.2 도구: ps
A.2.3 도구: strace (system call tracer)
A.2.4 도구: /proc 파일시스템
A.2.5 도구: DDD (Data Display Debugger)
A.2.6 도구: lsof (List Open Files)
A.2.7 도구: ltrace (library call tracer)
A.2.8 도구: time
A.2.9 도구: top
A.2.10 도구: pstree
A.3 네트워크
A.3.1 도구: traceroute
A.3.2 File: /etc/hosts
A.3.3 File: /etc/services
A.3.4 도구: netstat
A.3.5 도구: ping
A.3.6 도구: telnet
A.3.7 도구: host/nslookup
A.3.8 도구: ethtool
A.3.9 도구: ethereal
A.3.10 File: /etc/nsswitch.conf
A.3.11 File: /etc/resolv.conf
A.4 시스템 정보
A.4.1 도구: vmstat
A.4.2 도구: iostat
A.4.3 도구: nfsstat
A.4.4 도구: sar
A.4.5 도구: syslogd
A.4.6 도구: dmesg
A.4.7 도구: mpstat
A.4.8 도구: procinfo
A.4.9 도구: xosview
A.5 파일과 목적 파일
A.5.1 도구: file
A.5.2 도구: ldd
A.5.3 도구: nm
A.5.4 도구: objdump
A.5.5 도구: od
A.5.6 도구: stat
A.5.7 도구: readelf
A.5.8 도구: strings
A.6 커널
A.6.1 도구: KDB
A.6.2 도구: KGDB
A.6.3 도구: ksymoops
A.7 기타
A.7.1 도구: VMWare 워크스테이션
A.7.2 도구: VNC 서버
A.7.3 도구: VNC 뷰어

부록 B 자료 수집 스크립트
B.1 개요
B.1.1 -thorough
B.1.2 -perf, -hang , -trap, -error
B.2 스크립트 돌리기
B.3 스크립트 소스코드
B.4 면책