JANGUN


LINUX 시스템


지음 : 김희천



목차

Chapter 1 리눅스의 개요
Chapter 2 리눅스 설치
Chapter 3 시작하기
Chapter 4 기본 운영
Chapter 5 vi 편집기
Chapter 6 기본 명령
Chapter 7 프로세스 관리 명령
Chapter 8 쉘
Chapter 9 패키지 관리
Chapter 10 네트워크 개요 및 설정
Chapter 11 원격 관리
Chapter 12 FTP 서버
Chapter 13 APM 설치 및 활용
Chapter 14 메일서버 설치 및 관리


Chapter 1 리눅스의 개요

1. 리눅스의 특징은 무엇인가?
- 멀티유저(multiuser), 멀티태스킹(multitasking) 지원
- 신뢰성과 성능 보장
- Character User Interface / Graphical User Interface 지원
- 공개 소스로서 빠르게 발전하고 보완됨
- 여러 종류의 파일 시스템을 지원
- 쉘(shell)을 이용
- 효율적인 하드웨어 활용
- 인터넷의 모든 기능 지원

2. 리눅스 역사에서 중요한 공헌 두 가지 이상을 나열하면?
- 1972년 벨 연구소의 Ken Thompson과 Dennis Ritchie가 Unix 운영체제를 C언어 기반으로 작성
- 1984년 Richard Stallman이 Unix와 유사한 공개 운영체제를 개발하는 GNU 프로젝트를 시작
- 1991년 Linus B. Torvalds에 의해 리눅스 커널 발표
- 1992년 최초 리눅스 배포판 : MCC Interim 리눅스

3. GNU General Public License에서 보장하는 소프트웨어에 대한 자유는?
- 자유롭게 프로그램을 복제하고 사용할 수 있으며 소스 코드를 개작할 수 있고 개작된 프로그램을 배포할 수 있으나 소스코드는 공개하여야 한다.

4. 리눅스 배포판 중 최근에 인기 있는 것은 어떤 것이며, Red Hat 계열인 CentOS 리눅스와 Fedora 리눅스의 특징은 무엇인가?
- 현재 가장 인기 있는 배포판은 Ubuntu인 것으로 보인다.
- Fedora, openSuSE, Debian Linux, Mandriva Linux, Linux Mint, PCLinuxOS, Slackware Linux, Gentoo Linux, CentOS, FreeBSD 등도 인기 있는 배포판이다.
- CentOS 리눅스는 안정적이라는 특징이 있고 Fedora 리눅스는 새로운 버전이 빠르게 나온다는 특징이 있다.



Chapter 2 리눅스 설치

1. 가상머신을 이용하여 리눅스를 설치하는 것과 하드디스크의 비어있는 파티션에 리눅스를 직접 설치하는 것의 장단점은 무엇이며 어떻게 선택해야 하는가?
- 가상머신에 설치하는 경우 VirtualBox등의 가상머신 소프트웨어 설치절차가 필요하지만 디스크 공간의 여유만 있으면 간단하게 리눅스를 설치할 수 있다는 장점이 있다. 단점은 PC의 성능이 낮을 경우 가상머신을 구동하는데 부담이 있다는 것이다. 절대적인 기준은 아니지만 CPU Pentium4 2.6GHz, 메모리 1GB 정도의 PC에 설치하였을 때 설치 진행속도는 느리지만 시스템 운영에는 문제가 없는 것으로 보인다.
- 하드디스크의 비어있는 파티션에 설치하기 위해서는 반드시 Windows등 기존 운영체제에 사용하지 않는 파티션이나 별도의 하드디스크 드라이브가 있어야 한다. 그러나 가상머신을 사용하는 것에 비하여 리눅스 시스템의 속도가 빨라진다는 장점이 있다. CPU Pentium3 1GHz, 메모리 512MB 정도의 PC에는 가상머신 없이 직접 설치를 권장하며, 직접 설치 시 시스템 운영에는 문제가 없는 것으로 보인다.

2. 하드디스크의 파티션이란 무엇이며 리눅스에서 기본으로 사용하는 파티션은 무엇인가?
- 파티션은 하드디스크를 논리적으로 나눈 구역이며 논리적인 하드디스크라고 할 수 있다.
- Windows에서는 독립적인 드라이브(C:, D: 등)로 지정할 수 있고 리눅스에서도 각각의 파티션은 독립적인 저장장치로 취급된다.
- 리눅스에는 반드시 root(/) 파티션이 있어야 하고 swap 파티션이 가상 메모리 관리를 위하여 필요하다. 이외에도 필요에 따라 추가 파티션을 생성할 수 있다.

3. 리눅스의 /etc, /home, /var, /dev 디렉터리 각각의 용도는 무엇인가?
- /etc : 시스템 환경 설정 파일이 주로 위치하는 곳이다.
- /home : 사용자 계정별 디렉터리가 위치하는 곳이다.
- ‘/home/사용자명’ 디렉터리가 만들어지며 일반적으로 개별 사용자는 자신의 디렉터리 아래에 있는 파일만 생성, 변경, 삭제할 수 있다.
- /var : 인쇄, 메일 등 가변 자료를 저장한다.
- /dev : 리눅스는 모든 장치를 파일로 취급하는데 장치를 접근하는데 필요한 파일이 위치한 곳이다.



Chapter 3 시작하기

1. 리눅스 시스템의 부팅 과정을 전원을 켰을 때부터 로그인 프롬프트가 뜨기까지 과정을 자세히 나열하면?
- 전원을 켜면 ROM BIOS의 부트스트랩 로더(bootstrap loader)가 실행된다. 부트스트랩 로더는 MBR(Master Boot Record)에 있는 부트 블록(boot block)에 있는 내용을 실행한다.
- MBR 부트 블록은 운영체제의 부트 섹터에 있는 프로그램인 부트 로더(boot loader)를 실행한다.
- LILO, GRUB 등의 부트 로더는 보조 기억장치에 저장된 리눅스 커널 이미지를 찾아 실행시킨다.
- 커널 이미지는 압축을 풀고 커널 프로그램의 주 기능을 수행한다. 커널의 기능 점검, 하드웨어 점검, root 파티션을 읽기 전용으로 마운트(mount), 디스크 검사, root 파티션을 쓰기 가능 모드로 리마운트(remount), 그리고 init 프로세스를 실행시키고 제어권을 넘긴다.
- init 프로세스는 /etc/inittab 파일을 읽어 설정된 내용을 실행한다. Runlevel에 따라 실행되는 내용이 달라진다. init은 각종 장치를 활성화 시키고 리눅스 시스템 운영에 필요한 프로세스를 실행시킨다. Runlevel 5인 경우 최종적으로 X Window 로그인 화면이 나타난다.

2. 리눅스 시스템의 종료 명령어는 무엇이고 어떤 옵션이 있는가? 그리고 리눅스 시스템의 종료 절차를 나열하면?
- 종료 명령은 ‘shutdown [-krhfc][-t sec] time [경고메시지]’ 이다. 다음을 포함하여 여러 가지 옵션을 선택할 수 있다.
-t sec : 프로세스에 경고 보냄과 kill 시그널 사이 초 단위 간격
-k : 사용자에게 경고 메시지만 전달
-r : 시스템 종료 후에 재부팅
-h : shutdown 후에 시스템 정지(halt)
-f : 재부팅할 때 fsck(file system check)를 하지 않음
-c : shutdown명령어를 취소한다.
- time : +m(m분 후) 또는 hh:mm(지정 시각)에 시스템 종료
- 경고메시지 : 사용자에게 보내지는 메시지

- 시스템 종료는 다음 순서로 진행된다.
① 사용자들에게 시스템 종료메시지를 보내고 로그인을 제한한다.
② 지정된 시간 내 종료되지 않은 프로세스를 강제 종료한다.
③ 지정된 시간 내 로그아웃하지 않은 사용자를 강제 로그아웃 시킨다.
④ 메모리에 데이터를 디스크에 저장한다.
⑤ 시스템 종료와 관련된 정보를 시스템 로그 파일에 기록한다.
⑥ 마운트 되어 있는 디바이스들을 마운트 해제한다.
⑦ 시스템을 종료한다.

3. 리눅스의 주요 파일 시스템과 각각의 특징을 자세히 조사하시오.
- ext : 리눅스 초기의 파일 시스템이다. 지금은 거의 사용되지 않는다.
- ext2: 리눅스의 기본 파일 시스템으로 사용되었다. 여전히 기본 파일 시스템으로 많이 사용하고 있는데 ext2는 journaling을 지원하지 않으므로 단순 쓰기 성능은 ext3나 ext4에 비하여 빠르다. 단점은 복구가 어렵다는 것이다.
- ext3: ext2를 journaling을 지원하도록 확장한 것이다. Journaling은 변경을 기록하는 로그(journal)를 두어 시스템 비정상 종료 시 파일 시스템 복구를 쉽게 하는 방법이다. 현재 리눅스에서 주로 사용되고 있다.
- ext4: ext3를 확장한 것이다. 일반적으로 ext2나 ext3에 비하여 읽는 속도가 빠르고 ext3보다 쓰기 속도도 빠르다. 최근 ext4의 사용이 늘어나고 있으며 안정성도 높은 것으로 알려져 있다.



Chapter 4 기본 운영

1. 사용자 계정을 추가, 삭제, 변경하는 명령의 사용법을 간단히 기술하고 관련이 있는 파일에 관해 설명하시오.
- 계정을 추가하는 명령은 ‘useradd 사용자명’, 삭제하는 명령은 ‘userdel 사용자명’, 변경하는 명령은 ‘usermod 사용자명’이다.
- 참조하는 파일은 다음과 같다. /etc/passwd : 사용자 계정의 자세한 정보
/etc/shadow : 암호화된 패스워드
/etc/skel : 사용자 홈 디렉터리에 복사되는 파일들의 템플릿
/etc/group : 그룹 정보, 그룹명과 GID 나열
/etc/login.defs : 사용자 계정 추가 시 적용되는 설정
/etc/default/useradd : 홈 디렉터리, 쉘의 종류 등 정보

2. 디렉터리의 내용을 보여주는 ls 명령의 사용법을 자세히 설명하시오.
ls [옵션] [파일명]...
- 파일명 : 나열할 파일 이름 또는 디렉터리 이름이다. 파일명을 주면 해당 파일 정보만 나열하고 파일명을 생략하면 현재 디렉터리의 내용이 나열된다. 디렉터리 이름을 주면 해당 디렉터리의 내용을 나열한다. 여러 파일명을 사용할 수 있는데 파일명에 *나 ?를 사용하면 shell에 의하여 패턴에 맞는 파일의 이름들로 변환된다.
- 예를 들어 디렉터리 내에 a.txt, b.txt, cc.txt 파일이 있다고 가정하면 *.txt는 ‘a.txt b.txt cc.txt’로 변환되고 ?.txt는 ‘a.txt b.txt’로 변환된다.
-a : 숨겨진 파일과 숨겨진 디렉터리 등을 포함하여 나열
-l : 파일종류/디렉터리/링크 구분, 접근 권한, 링크 수, 소유자, 그룹명, 파일 크기, 최종 수정된 시간, 이름 등 자세한 정보를 나열
-F : 이름 뒤에 실행 가능한 파일은 '*‘, 디렉터리는 '/'를 붙여서 보여줌
-i : 파일 및 디렉터리의 inode 번호를 보여줌
-s : 파일 및 디렉터리의 블록 수(간접 블록 포함)를 보여줌
-u : 파일 및 디렉터리가 최종 사용된 시간 순서로 보여주며 -l 옵션과 같이 사용하면 최종 사용된 시간을 보여줌

3. 텍스트 파일의 내용을 보여주는 명령을 나열하고 기능을 간략히 설명하시오.
- cat 파일명... : 파일(들)의 내용을 보여준다.
- more 파일명... : 파일(들)의 내용을 페이지 단위로 보여준다. 패턴 검색이 가능하다.
- head 파일명... : 파일(들)의 앞부분을 보여준다.
- more 파일명... : 파일(들)의 뒷부분을 보여준다.

4. 현재 디렉터리를 변경하는 명령, 디렉터리를 생성, 삭제하는 명령을 나열하고 기능을 간략히 설명하시오.
- cd [디렉터리명] : 디렉터리명을 생략하면 사용자 계정의 홈 디렉터리로 변경되고 디렉터리명을 지정하면 해당 디렉터리로 변경된다.
‘cd ∼’명령도 ‘cd’명령과 동일하다. ∼은 shell에서 홈 디렉터리를 의미한다. ‘.’은 현재 디렉터리이고 ‘..’은 상위 디렉터리이다.
- mkdir 디렉터리명... : 디렉터리(들)를 생성한다.
- rmdir 디렉터리명... : 디렉터리(들)를 삭제한다. 비어있는 디렉터리만 삭제 가능하므로 삭제 이전에 디렉터리 아래에 있는 파일과 디렉터리를 모두 삭제하여야 한다.

5. 파일의 권한을 변경하는 명령어의 사용법을 자세히 설명하시오.
- chmod [옵션] 권한 파일명...
-R : 파일명이 디렉터리일 경우 디렉터리 아래에 있는 모든 파일과 디렉터리에 권한이 재귀적으로 적용됨을 의미한다.
- 읽기 (r) : 파일 및 디렉터리 내용 보기
- 쓰기 (w) : 파일의 쓰기 및 디렉터리 안에 파일 생성 및 삭제
- 실행 (x) : 파일 실행 및 디렉터리 접근
- 사용자 권한 : 첫 번째 열 (예: rwx)
- 그룹 권한 : 두 번째 열 (예: r-x)
- 다른 사용자들 권한 : 세 번째 열 (예: r-x)
- 기호모드 [ugoa][+-=][rwx]
ugoa는 각각 user, group, other, all을 의미, 생략하면 all(user, group, other 모두 포함)의 의미이다.
+, -, =는 각각 권한 추가, 권한 삭제, 권한 지정을 의미한다.
여러 기호모드를 나열하여야 할 경우 , 로 연결하고 ‘ ’로 기호모드를 감싸서 표현한다. (예 : chmod 'u=rw,g=r,o=' test.txt)

6. 파일의 속성을 변경하는 명령어의 필요성과 사용법을 자세히 설명하시오.
- root 계정 뿐만 아니라 파일의 소유자일지라도 파일을 읽기전용으로만 사용하거나 삭제를 할 수 없게 지정하여 파일을 실수로 삭제하는 것을 막기 위하여 사용된다. root 계정만 속성을 변경할 수 있다.
- chattr [옵션] [+-=속성] 파일명...
-R : 파일명이 디렉터리일 경우 디렉터리 아래에 있는 모든 파일과 디렉터리에 속성이 재귀적으로 적용됨을 의미한다.

- 속성 지정은 다음과 같다.
+, -, = 는 각각 속성 추가, 속성 삭제, 속성 지정을 의미
i : 읽기 전용 모드
a : 추가 전용 모드
- lsattr 명령은 ls 명령과 비슷하나 파일과 디렉터리의 속성을 확인할 수 있다.

7. 리눅스 명령어의 설명서를 보는 명령은 무엇이며 사용법을 구체적인 예를 들어 기술하시오.
- man 명령 : man find (find 명령에 대한 설명 표시, <space>로 페이지 이동, /로 단어 검색)
- 한글 설명서(번역 과정에서 생략된 내용이 있음) 대신 영문 설명서는 보려면 쉘에서 unset LANG 명령을 수행한 후 man 명령을 수행하면 그 이후부터는 영문 설명서가 표시된다.

8. 파일을 복사, 삭제, 이동하는 명령의 사용법을 구체적인 예를 들어 기술하시오.
- 복사 명령 cp cp src_file dst_file (src_file을 dst_file이라는 이름으로 복사)
cp src_file dst_dir (src_file을 dst_dir에 복사)
cp -r src_dir dst_dir (src_dir의 내용을 dst_dir로 복사)
- 삭제 명령 rm rm del_file (del_file을 삭제)
- rm -r del_dir (del_dir과 내용을 모두 삭제)
- 이동 명령 mv mv src_file dst_file (src_file을 dst_file이라는 이름으로 변경)
mv src_file dst_dir (src_file을 dst_dir로 이동)
mv src_dir dst_dir (src_dir을 dst_dir로 이동)

9. 파일의 링크를 생성하는 명령의 사용법을 구체적인 예를 들어 기술하시오.
- 하드 링크의 생성 ln : 하나의 파일(디렉터리 제외)에 여러 이름을 부여 ln filename nickname (filename 파일에 nickname이라는 별명을 부여)
vi nickname (filename 파일을 nickname으로 접근할 수도 있음)
rm filename (filename을 삭제해도 nickname이라는 이름으로 파일이 남아있음)
rm nickname (nickname까지 삭제해야 파일이 실제로 삭제됨)
- 심볼릭 링크의 생성 ln -s : 파일(디렉터리 포함)에 연결을 생성
ln -s src_dir/src_file my_link (src_dir에 있는 src_file에 대한 연결을 현재 디렉터리에 생성)
cat my_link (src_dir에 있는 src_file을 my_link로 접근할 수 있음)
rm src_dir/src_file (연결의 원본이 삭제되면 my_link는 사용할 수 없음)

10. 조건에 맞는 파일을 검색하는 명령의 사용법을 구체적인 예를 들어 기술하시오.
- 파일 검색 명령 find
find ~ -type d -perm 700 -name 'pr*' –print (홈 디렉터리 아래에서 접근 권한이 700이고 이름이 pr로 시작하는 디렉터리를 찾아서 이름을 출력)
find . -name '*.txt' -print -exec cat {} \; (현재 디렉터리 아래에서 이름이 .txt로 끝나는 것을 찾아서 이름을 출력하고 그 내용을 출력)
find /etc -type f -name passwd -print -exec grep root {} \; (/etc 디렉터리 아래에서 이름이 passwd인 파일을 찾아서 파일의 이름을 출력하고 그 파일 안에서 root라는 단어가 있는 줄을 출력, grep은 파일 안에 주어진 문자열 패턴이 있는 줄을 출력하는 명령임)



Chapter 5 vi 편집기

1. vi 편집기의 세 가지 모드에 대하여 설명하시오.
- 명령모드 (command mode) : 커서 이동, 복사, 삭제, 붙여 넣기, 치환, 검색 등 기능 수행
- 라인 모드 또는 입력 모드에서 Esc를 눌러서 전환
- 라인모드 (line mode) : 명령 프롬프트에서 저장, 검색 등 명령 수행
- 명령 모드에서 : 를 눌러서 전환
- 입력모드(insert mode) : 글자를 입력하는 모드
- 명령 모드에서 a, A, i, I, o, O 키를 눌러서 전환

2. vi 편집기의 파일 저장 및 끝내기 방법을 기술하시오.
- 라인 모드에서 저장
w : 현재 작업 중인 파일에 저장
w 파일명 : 다른 이름으로 저장
w! 파일명 : 다른 이름으로 저장 (기존 내용을 덮어씀)
- 명령 모드에서 종료
ZZ : 변경 내용을 저장하고 종료
- 라인 모드에서 종료
q : 그대로 종료(이전 저장 후 변경된 내용이 없는 경우)
q! : 저장하지 않고 종료
wq [파일명] 또는 x [파일명] : 변경 내용을 저장하고 종료

3. vi 편집기의 복사, 잘라내기, 붙여넣기 명령 수행 과정에 대하여 자세히 설명하시오.
- 복사
y이동명령 : 현재 위치부터 이동 위치까지 복사
yy : 커서 위치의 한 줄 복사
- 잘라내기
x : 커서가 위치한 문자 삭제
X : 커서 앞의 문자 삭제
D : 커서부터 줄의 끝까지 삭제
dd : 현재 줄을 삭제
d이동명령 : 현재 위치부터 이동 위치까지 잘라내기
- 붙여 넣기
p : 잘라내기 하거나 복사된 부분을 커서 다음(줄)에 붙여넣기
P : 잘라내기 하거나 복사된 부분을 커서 앞(줄)에 붙여넣기
- 이동명령
화살표 키 또는 hjkl : 각 방향으로 한 칸 이동
e : 다음 단어 끝 글자로 이동
b : 이전 단어의 첫 글자로 이동
w : 다음 단어의 첫 글자로 이동
- : 이전 줄의 처음으로 이동
+ 또는 Enter : 다음 줄의 처음으로 이동
0, $: 현재 줄의 처음, 현재 줄의 끝으로 이동
^ : 현재 줄의 공백이 아닌 첫 글자로 이동
(, ) : 문장의 시작, 문장의 끝으로 이동
{, } : 문단의 시작, 문단의 끝으로 이동
G : 문서의 마지막으로 이동
nG : 문서의 n 번째 줄로 이동
'' : 이전의 커서 위치로 이동
M : 화면의 중간 줄에 커서 이동

4. vi 편집기 옵션을 설정하는 방법을 설명하시오.
- vi 편집기 내에서 설정 라인모드에서 set 명령을 사용, 예를 들어, : set number autoindent
- 홈 디렉터리의 .exrc 파일에서 set 명령어를 설정 예를 들어, :set number autoindent
- shell에서 명령을 수행하거나 홈 디렉터리의 .bashrc에 추가 예를 들어, EXINIT='set number autoindent' export EXINIT



Chapter 6 기본 명령

1. 파일의 아카이브 및 압축 파일을 관리하는 방법을 설명하시오.
- 아카이브 생성 및 풀기
- 만들기 : tar cvf 아카이브명 묶을파일명...
- 풀기 : tar xvf 아카이브명
- 내용보기 : tar tvf 아카이브명
- 압축 및 압축 풀기
- gzip 파일명...
- gunzip 압축파일명...

2. 단순 백업과 수준별(다단계) 백업에 대하여 설명하시오.
- 단순 백업
처음에 완전 백업(모든 파일과 프로그램을 백업)을 수행
이후 변경된 부분에 대하여 변경 분 백업(이전의 백업 후에 변경된 파일만을 백업)을 수행
- 수준별(다단계) 백업
처음에 level 0의 완전 백업을 수행
이후 변경 분을 수행하는데 백업의 여러 level이 있어 level이 0보다 큰 경우 더 낮은 level의 백업 이후에 추가, 변경된 내용만 백업
단순 백업은 level 0과 level 1만 있는 수준별 백업과 동일

3. 리눅스의 백업 명령 사용법을 설명하시오.
- cpio 명령 : 특정 디렉터리 아래 모든 파일을 지정한 백업장치로 백업
find 디렉터리명 -print | cpio -o > 백업장치명
- cpio 명령 : 특정 파일보다 나중에 변경된 파일만 백업
find 디렉터리명 -newer 기준파일명 -print | cpio -o > 백업장치명
- dump 명령
dump -수준 -f 백업파일명_or_장치명 백업할파일시스템장치명_or_마운트지점
dump -수준 -f 백업파일명_or_장치명 백업할파일명

4. 리눅스 파일의 종류를 나열하고 설명하시오.
- 정규 파일 : 일반적인 텍스트 파일이나 이진 파일
- 디렉터리 파일 : 디렉터리 정보를 나타내는 파일
ls -l 명령을 수행했을 때 가장 앞에 d로 표시되는 파일
ls -al 명령을 수행하면 . (현재 디렉터리)과 ..(상위 디렉터리) 파일이 표시되는 것을 볼 수 있음
- 특수 파일 : 주변 장치나 프로세스 간 통신에 이용되는 파일 /dev 디렉터리 아래의 파일, 프로세스 간 pipe 등

5.리눅스의 ext3 파일 시스템의 특징을 ext2와 비교하여 설명하시오.
- ext3는 저널링 기능이 추가되었다.
- 저널링은 변경을 기록하는 로그를 두어 시스템이 비정상 종료했을 때 파일 시스템 복구를 쉽게 할 수 있게 해주는 메카니즘이다.
- ext3는 ext2 파일 시스템으로부터 바로 업그레이드가 가능하다는 장점을 가지고 있다.
- ext3는 ext4, ReiserFS, XFS 등에 비하여 비교적 간단하고 많은 사용자에 의해 테스트되었으므로 신뢰성이 높다.



Chapter 7 프로세스 관리 명령

1. 마운트와 언마운트의 기능을 설명하시오.
- 마운트 mount
파일시스템을 특정 디렉터리 아래에 붙여서 파일시스템을 사용할 수 있게 해 주는 것이다.
파일시스템은 마운트하지 않으면 접근할 수 없으므로 사용을 위해서는 반드시 마운트 하여야 하고 마운트 명령 수행 이전에 마운트할 디렉터리가 존재하여야 한다.
mount 명령을 이용하여 마운트가 가능하지만 /etc/fstab 파일에 기본적인 마운트 목록이 기술되어 있으며 주로 부팅 시에 /etc/fstab 파일에 기술된 마운트를 수행한다.
- 언마운트 umount
마운트된 파일시스템을 디렉터리에서 떼어내는 것이다.
언마운트 하더라도 파일의 내용은 유지되며 다시 마운트하면 파일시스템을 사용할 수 있다.
umount 명령을 이용하여 언마운트가 가능하다.

2. 새로운 디스크에 파티션을 생성하고 파일시스템을 만들어 마운트 하는 방법을 예를 들어 설명하시오.
- 디스크 설치
PC에 새로운 디스크 설치 또는 VirtualBox에서 새로운 디스크 생성
새로운 디스크가 IDE secondary slave라고 가정하면 장치명은 /dev/hdd
- 파티션 생성(PPT 내용에서처럼 파티션을 추가하지 않고 파일시스템을 생성하는 것도 가능함)
fdisk /dev/hdd 명령 수행
fdisk 명령 내부에서 n 명령으로 새로운 파티션을 추가하고 w 명령으로 파티션 테이블을 기록하고 빠져나옴
새로운 파티션의 이름은 /dev/hdd1 이 됨
- 파일시스템 생성 : mkfs -t ext3 /dev/hdd1 명령 수행
- 마운트 위치 디렉터리 생성 : mkdir /mnt/testmount
- 마운트 실행 : mount /dev/hdd1 /mnt/testmount

3. 프로세스 관리 블록(PCB)이 무엇인지 설명하고 PCB에서 관리하는 정보를 기술하시오.
- PCB는 커널에 등록된 각 프로세스에 대한 정보를 저장하는 영역이다.
- 프로세스들은 모두 커널 공간에 자신의 PCB를 가지며 커널이 PCB의 내용을 관리한다.
- 프로세스 고유 번호(PID) : 커널이 시스템 내의 프로세스마다 고유하게 부여하는 번호, 프로세스 생성 시 부여된다.
- 프로세스의 우선순위(priority) : 프로세스 스케줄링을 위한 정보이며 프로세서를 할당할 프로세스를 선정하는데 참조된다.
- 현재 상태(current state) : 프로세스의 현재 상태이다.
- 할당 받은 자원에 대한 정보 : 프로세스에 할당된 자원에 대한 정보이다. 자원 관리에 참고된다.
- 문맥 저장 영역(context save area) : 프로세스가 실행을 중지해야 할 때 각종 레지스터(register)들의 값을 보관하기 위하여 사용된다. 해당 프로세스가 다시 실행될 때 레지스터의 값을 복원

4.프로세스 상태 전이도와 각 상태의 의미, 상태 전이가 일어나는 조건에 대하여 설명하시오.
- 프로세스 상태 전이도 프로세스 상태 전이도
- 생성(created) 상태 : 커널 공간에 PCB 등이 만들어지고 프로세스가 처음 생성되는 상태
- 준비(ready) 상태 : 기억 장치 등 필요한 모든 자원을 할당 받은 상태에서 프로세서를 할당 받으려고 대기하는 상태, 프로세서를 할당 받게 되면 즉시 실행이 가능
- 실행(running) 상태 : 프로그램 코드가 프로세서에 의해 실행되고 있는 상태, 프로세스가 필요한 모든 자원을 할당 받은 상태
- 대기(blocked) 상태 : 프로세스가 필요한 자원을 요청하고 이를 할당 받을 때까지 기다리는 상태
- 지연(suspended) 준비 상태 : 프로세스가 기억장치를 제외한 다른 모든 필요한 자원들을 보유한 상태
- 지연(suspended) 대기 상태 : 프로세스가 대기 상태에서 기억 장치를 잃은 상태
- 디스패치(dispatch) 또는 스케줄(schedule) : 준비 상태에서 프로세서를 할당 받아 실행 상태로 전이
- 선점(preemption) : 실행 상태의 프로세스가 프로세서 시간 할당량이 끝나거나 우선순위가 높은 프로세스가 들어왔을 때 프로세서를 반납하고 준비 상태로 전이
- 대기(block) : 실행 상태의 프로세스가 자원을 요청하여 대기 상태로 전이
- 웨이크업(wakeup) : 대기(지연 대기) 상태에서 프로세스가 요청한 자원이 할당되어 준비(지연 준비) 상태로 전이
- 스왑 인(swap-in) 또는 재활동(resume) : 지연 준비(지연 대기) 상태에서 기억 장치를 할당받아 준비(대기) 상태로 전이
- 스왑 아웃(swap-in) 또는 지연(suspend) : 준비(대기) 상태에서 기억 장치를 반납하고 지연 준비(지연 대기) 상태로 전이


5. 백그라운드 프로세스와 포어그라운드 프로세스의 차이를 설명하시오.
- 백그라운드(background) 프로세스
- 프롬프트에서 명령 &로 실행한 프로세스로 키보드 입력을 받을 수 없다.
- 백그라운드로 프로세스를 실행시키면 쉘은 즉시 명령 대기 상태가 되는데 키보드 입력 없이 장시간 실행되어야 하는 경우 주로 사용한다. 백그라운드 프로세스도 화면 출력은 가능하다. 포어그라운드로 전환하는 방법은 쉘에서 fg 명령을 실행한다. ps 명령을 이용하여 백그라운드 프로세스의 상태를 점검할 수 있다.
- 포어그라운드(foreground) 프로세스
- 쉘 프롬프트에서 & 없이 명령을 실행한 프로세스로 키보드 입력을 받을 수 있다. 프로세스가 포어그라운드로 실행 될 때 쉘에서 <Ctrl>+<Z> 키를 누르면 백그라운드로 전환된다.

6. 프로세스 모니터링 명령과 프로세스 관리 명령이 어떤 것이 있는지 기술하시오.
- Ps : 실행 중인 프로세스에 관한 정보를 보여줌
- Top : 시스템에서 실행되고 있는 프로세스들의 실시간 정보를 보여줌
- kill / killall : 프로세스에 종료하라고 시그널(기본 SIGTERM)을 보냄, kill은 PID로 프로세스를 지정, killall은 명령 이름으로 지정
- Exec : exec 명령을 호출하는 프로세스를 새로운 프로그램을 수행하도록 변경
- Nice : 프로세스를 실행할 때 우선순위 값을 설정
- Nohup : 터미널을 빠져나가도(예 : 로그아웃) 실행 중인 프로그램을 종료되지 않고 계속 수행되게 함
- cron 데몬, /etc/crontab 파일, crontab 명령 : 특정 시간에 특정 작업을 자동으로 수행하도록 지정

7. 유닉스 시스템의 데몬이 무엇인지 설명하고 어떤 데몬이 있는지 알아보시오.
- 데몬(daemon)은 백그라운드로 실행되며 커널 요청 시 작동하는 프로세스이다. 주로 시스템의 서비스를 제공한다.
- 주요 데몬은 crond(시간에 따라 등록된 명령을 정기적으로 실행하는 데몬), httpd(웹 서버), sendmail(메일 전송 서버), sshd(시큐어 쉘), atd(명령 예약 기능), cupsd(프린팅 시스템 데몬), iscsid(Internet Small Computer System Interface 데몬), pcscd(스마트 카드 데몬) 등이 있다. 자세한 데몬의 종류는 교재를 참고할 것.



Chapter 8 쉘

1. 쉘이 무엇인지 설명하고 대표적인 쉘의 종류는 어떤 것이 있는지 나열하시오. 그리고 사용자의 쉘을 변경하는 방법은 무엇인가?
- 쉘은 리눅스의 대화형 사용자 인터페이스로서 명령어를 해석하여 운영체제에 전달하는 역할을 한다. 쉘 명령어로 스크립트를 작성하여 여러 명령을 조합하여 실행하거나 일괄 작업을 수행할 수 있다.
- 대표적인 쉘의 종류는 다음과 같다.
- Bourn Shell : 실행명령은 sh, 초기설정은 .profile 파일
- C Shell : 실행명령은 csh, 초기설정은 .cshrc 파일
- Korn Shell : 실행명령은 ksh, 초기설정은 .kshrc 파일
- Bourn Again Shell : 실행명령은 bash, 초기설정은 .bashrc 파일
- 사용자 쉘은 /etc/passwd 파일을 수정하거나 ‘usermod -s <쉘명령경로> <사용자명>’으로 변경 가능하다.
- 일시적으로 다른 쉘을 사용하기 위해서는 쉘 실행명령을 사용한다. 쉘을 변경하는 예는 다음과 같다.
- /etc/passwd 파일 - nipark:x:502:502::/home/nipark:/bin/csh
- usermod 명령 - usermod -s /bin/csh nipark)
- 일시적 사용 - 명령 프롬프트에서 csh 입력

2. 쉘에서 사용하는 편리한 특수 키 기능과 특수 기호가 무엇이 있는지 기술하시오.
- 특수 키는 명령어의 일부만 입력하면 나머지 부분을 완성해 주는 <Tab>키와 파일 이름의 일부만 입력하면 나머지 부분을 완성해 주는 <Esc> 키가 있다.
- ! 기호 : ‘! <history번호>’를 입력하면 이전에 실행한 명령 중 <history번호>에 해당하는 것이 다시 실행된다. <history번호>는 history 명령으로 확인할 수 있다.
- * 기호 : Wildcard 문자이다. 문자 수와 관계없이 모든 문자열 패턴을 의미한다. 단, ‘.’으로 시작하는 문자열은 해당되지 않는다. * 문자를 사용한 명령의 예는 다음과 같다.
- cat *.txt (현재 디렉터리의 .txt로 끝나는 모든 파일의 내용을 보여줌)
- ls * (현재 디렉터리에서 이름이 '.'으로 시작하는 것을 제외한 모든 파일 또는 디렉터리의 목록을 보여준다. 즉, ‘.’, ‘..’, ‘.bashrc’ 등은 해당되지 않는다.)
- ? 기호 : 임의의 한 문자에 해당하는 패턴이다. ? 문자를 사용한 명령의 예는 다음과 같다.
- tar cvf a.tar a? (현재 디렉터리에서 이름이 a로 시작하고 두 글자인 모든 파일을 a.tar 아카이브 파일에 묶는다.)
- > 기호 : Output redirection이다. ‘명령 > <파일명>’으로 명령의 표준 출력을 <파일명>으로 재 지정한다. 명령을 수행할 때 화면에 출력되는 내용이 파일로 저장된다.
- < 기호 : Input redirection이다. ‘명령 < <파일명>’으로 명령의 표준 입력을 <파일명>으로 재 지정한다. 명령을 수행할 때 키보드에서 입력받을 내용을 파일에서 읽어 들인다.
- | 기호 : Pipe 기능이다. 앞의 명령의 표준 출력을 다음 명령의 표준 입력과 연결한다. ‘<명령1> | <명령2>’는 <명령1>의 수행할 때 출력되는 내용이 <명령2>의 입력으로 주어진다.
- $ 기호 : 변수 내용을 접근하는 기호이다. 변수 값을 지정할 때는 변수이름 앞에 $ 기호를 쓰지 않지만 변수 값을 의미할 때는 변수이름 앞에 $ 기호를 붙인다.
- # 기호 : 주석을 의미한다. 쉘은 명령행의 # 기호 이후는 해석하지 않는다.
- & 기호 : 명령을 백그라운드로 실행하는 기호이다. ‘<명령>&’는 <명령>을 포어그라운드가 아닌 백그라운드로 실행한다.
- ~ 기호 : 홈 디렉터리를 의미한다.
- { } 기호 : 인수 등을 나타내는데 사용된다.

3. 쉘 스크립트의 조건문이나 순환문에서 사용할 수 있는 비교 연산자, 검사 연산자, 논리 연산자, 산술 연산자는 어떤 것이 있는지 나열하고 test 명령을 이용한 조건 검사 방법을 설명하시오.
- 정수 비교 연산자
int1 –eq int2 : int1과 int2의 값이 같음
int1 –ne int2 : int1과 int2의 값이 같지 않음
int1 –gt int2 : int1이 int2보다 큼
int1 –lt int2 : int1이 int2보다 작음
int1 –ge int2 : int1이 int2보다 크거나 같음
int1 –le int2 : int1이 int2보다 작거나 같음

- 문자열 비교 연산자
string1 = string2 (또는 string1 == string2) : string1과 string2가 같음
string1 != string2 : string1과 string2가 같지 않음
string : string이 정의되어 있고 NULL 이 아님
-z string : string이 정의되어 있지 않거나 NULL 임

- 파일 검사 연산자
-e file : file이 존재함
-f file : file이 존재하며 일반 파일이고 디렉터리가 아님
-d dir : dir이 존재하며 디렉터리임
-r file : file이 존재하며 읽기 가능
-w file : file이 존재하며 쓰기 가능
-x file : file이 존재하며 실행 가능

- 논리 연산자
!condition : NOT
condition1 -a condition2 : AND
condition1 –o condition2 : OR

- 조건문이나 순환문에서는 ‘test condition’ 또는 ‘[ condition ]’으로 조건을 검사할 수 있다. 비교 연산자, 검사 연산자, 논리 연산자를 이용하여 표현식의 조합이 가능
if test $a -eq $b  (변수 a의 값이 변수 b의 값과 같으면)
if [ $1 = unix ]  (첫 번째 명령행 인수가 'unix'이면)
if [ $1 = unix -a $2 = system ]  (첫 번째 명령행 인수가 'unix‘이고 두 번째 명령행 인수가 ‘system')
while test $A -lt 0  (변수 A의 값이 0보다 크면)
while [ -e test.txt ]  (test.txt 파일이 존재하면)

- ‘test condition’ 또는 ‘[ condition ]’는 다음 논리 연산자로 조합이 가능하다.
! : NOT
&& : AND
|| : OR

- ‘test condition’ 또는 ‘[ condition ]’를 논리 연산자로 조합한 예는 다음과 같다.
if [ $# -gt 0 ] && [ $# -lt 4 ]  ( if [$# -gt 0 -a $# -lt 4 ]의 의미와 동일함)

4. 쉘 스크립트의 expr 명령은 무엇이며 expr 명령에서 사용 가능한 산술 연산자 및 논리 연산자는 어떤 것이 있는지 나열하고 간단한 예를 드시오.
- expr 명령은 ‘expr expression’ 형태로 사용되며 ‘expr expression’의 결과값은 expression을 평가한 값이다.
expr 1 + 2  (더하기 연산의 결과인 3이 출력됨)
expr 1 \* 2  (곱하기 연산의 결과인 2가 출력됨)
expr 1 \< 2  (비교 연산 <의 결과가 참이므로 1이 출력됨)
expr 1 \> 2  (비교 연산 >의 결과가 거짓이므로 0이 출력됨)

- 산술 연산자
+ : 더하기
- : 빼기
* : 곱하기 (wildcard 문자와 혼돈을 피하기 위해 \*로 표현)
/ : 나누기
% : 나머지

- 비교 연산자
= : 같다
!= : 같지 않다
< : 작다 (redirection 문자와 혼돈을 피하기 위해 \<로 표현)
> : 크다 (redirection 문자와 혼돈을 피하기 위해 \>로 표현)
<= : 작거나 같다(redirection 문자와 혼돈을 피하기 위해 \<=로 표현)
>= : 크거나 같다(redirection 문자와 혼돈을 피하기 위해 \>=로 표현)

- 논리 연산자
& : AND
| : OR

- 쉘 스크립트에서는 '$( )' 기호를 이용하여 '$( )' 자리를 expr 명령의 결과값으로 치환하여야 산술식의 값을 구할 수 있다.
- 쉘 스크립트 내에서 사용 예는 다음과 같다. 참고로 변수에 expr 명령의 결과값을 대입하기 위해서는 'sum=$('와 같이 ‘변수명’, ‘=’, ‘$’, ‘(’ 사이에 공백을 두어서는 안 된다.
sum=$( expr $a + $b )
sub=$( expr $a - $b )
mul=$( expr $a \* $b )
div=$( expr $a / $b )
mod=$( expr $a % $b )

5. 쉘에서 사용하는 따옴표의 의미를 구분하시오.
- '…' : 안의 특수 문자를 해석하지 않음
예 : echo ' " $PATH " ' (" $PATH " 가 그대로 출력됨)
- "…" : '…'와 같으나 일부 특수 문자를 해석함
$, \, ` 등의 특수 문자는 해석함 예 : echo " ' $PATH ' "
(겹따옴표 안에 있으므로 홑따옴표 문자가 그대로 출력되고 $ 문자는 해석되므로 홑따옴표로 둘러싸인 PATH 환경변수 값이 출력됨)
- `…` 또는 $(…) : 안의 명령을 실행함. 둘러싸인 명령을 실행하는 것을 command substitution라고 함
예1 : echo " Today is `date` “ ('Today is' 문자열에 이어 date 명령이 실행결과가 출력됨)
예2 : echo $( expr 3 \* 7 ) (expr 명령이 실행되어 21이 출력됨)

6. 쉘의 순환문 형식은 어떤 것이 있는지 기술하시오.
- 순환문의 종류
do ~ done 사이의 구문을 지정한 조건만큼 반복
순환문의 종류 : for, while, until
for 문 : 각 원소에 대해 구문을 수행
while 문 : 조건이 참인 동안 구문을 수행
until 문 : 조건이 거짓인 동안 구문을 수행

- for 문
형식 for 변수 in list1 ... listn   또는 for ((초기값; 조건; 증가식))
do
문장(들)
done
- for 문 조건의 예
예1 : for num in 1 2 3 4 5 6 7 8 9 예2 : for (( num=1; num<=9; num++ ))

- while 문
형식 while 조건
do
문장(들)
done
- while 문 조건의 예
예1 : while [ $num –le 9 ]
예2 : while test $num –le 9

- until 문
형식 until 조건
do
문장(들)
done
- until 문 조건의 예
예1 : until [ $num –gt 9 ]
예2 : until test $num –gt 9

7. 쉘의 조건문 형식과 비교 연산의 종류에 대해 설명하시오.
- 조건문 형식은 다음과 같다. elif 부분은 없을 수도 있고 여러 개가 올 수도 있다. else 부분은 있어도 되고 없어도 된다.
if [조건1]; then
문장 1
elif [조건2]; then
문장 2
ㆍㆍㆍ
elif [조건n-1]; then
문장 n-1
else
문장 n
fi

- 비교 연산의 종류은 다음과 같다. A –eq B : A와 B의 값이 같다
A –ne B : A와 B의 값이 같지 않다
A –gt B : A가 B보다 크다
A –lt B : A가 B보다 작다
A –ge B : A가 B보다 크거나 같다
A –le B : A가 B보다 작거나 같다

8. 쉘의 스크립트에서 함수를 정의하는 형식을 설명하시오.
- 함수 : 특정한 일을 수행하는 기능이 구현된 코드 블록

함수 정의 function 함수명
{
문장(들)
}

- 함수 호출 형식 : 함수명 또는 함수명 인자(들)
- 함수 호출 예 : 명령행 인수가 있으면 해당 단의 구구단을 출력하고 인수가 없으면 사용법을 출력하는 쉘 스크립트이다. mult $1 으로 첫 번째 명령행 인수를 mult 함수에 인수로 넘겨준다.

#!/bin/bash
function mult
{
for ((i=1; i<=9; i++))
do
echo " $1 * $i = $( expr $1 \* $i ) "
done
}
if [ $# -eq 0 ]
then
echo "Usage: $0 integer_number"
else
mult $1
fi



Chapter 9 패키지 관리

1. 리눅스의 패키지 관리자인 RPM과 YUM이 무엇인지 간단하게 기술하시오.
- RPM (Redhat Package Manager)
- GNU의 GPL에 의해 배포되는 소프트웨어 패키지 관리자
- RPM의 용도 : 패키지 설치, 업그레이드, 제거, 정보 검색 및 검증
- YUM (Yellowdog Updater Modified)
- rpm 기반의 시스템을 위한 자동 패키지 설치, 업그레이드 및 삭제 도구
- RPM 명령의 어려운 부분인 패키지 의존성 문제를 해결
- 설치되어 있거나 저장소에서 설치 가능한 패키지에 관한 정보를 검색
- 저장소 URL 목록은 /etc/yum.repos.d 디렉터리에 있음



Chapter 10 네트워크 개요 및 설정

1. TCP/IP의 기능을 설명하시오.
- TCP(Transmission Control Protocol)
- TCP의 기능은 바이트 스트림(연속된 바이트들, 메시지나 파일 등)을 목적지 (IP 주소, port 번호)로 신뢰성 있게 전송하는 것이다. TCP는 송수신 측의 연결이 유지되는 연결지향 프로토콜이다.
- IP 주소는 어떤 호스트로 데이터가 전달되어야 할지를 의미하며 port 번호는 해당 호스트에서 TCP 소켓을 열고 있는 어떤 프로세스에게 전달되어야 할지를 의미한다.
- TCP는 바이트 스트림을 전송할 때 패킷으로 나누어서 전송하며 패킷 수신 측에서 패킷들을 원래의 스트림으로 재조립한다. 패킷을 전송한 순서와 수신된 순서가 다를 수 있으므로 패킷의 순서를 맞추고 유실된 패킷의 재전송을 요청하며 수신 측에서 데이터를 받는 속도가 송신 측보다 느릴 경우 전송 속도를 조절하는 등의 기능이 있다.

- IP(Internet Protocol)
- IP는 패킷을 목적지 IP 주소로 전송한다.
- 패킷은 허브, 게이트웨이, 라우터 등을 거치며 목적지 IP주소에 도달할 수 있게 중계된다.
- 패킷은 보내는 측의 IP 주소와 받는 측의 IP 주소를 가지고 있다. 각 주소는 32비트 크기이다.
- 그 외에도 패킷의 길이, 패킷이 네트워크상에 존재할 수 있는 시간 등이 패킷에 기록되어 있다.

2. ifconfig 명령의 기능과 사용법을 설명하시오.
- ifconfig 명령을 이용하여 네트워크 인터페이스 정보를 확인하거나 설정할 수 있다.
- 네트워크 인터페이스 카드(NIC)는 랜(LAN) 카드, 이더넷(Ethernet) 카드라고도 하며 고정된 이더넷 주소를 가지고 있으며 IP 주소가 할당된다.

- ifconfig로 확인 및 설정 가능한 정보
- MAC 주소 : Ethernet H/W 주소 또는 어댑터 주소라고도 하며 48bit로 구성된다.
- IP 주소 : 32bit로 구성된다. 예를 들어 192.168.0.5, 10.0.2.15 등과 같이 구성된다.
- 브로드캐스트 주소 : 같은 네트워크에 속한 모두에게 메시지를 보낼 때 사용하는 주소이며 ARP(Address Resolution Protocol), DHCP(Dynamic Host Configuration Protocol) 등에 사용된다.
- 서브넷 마스크가 255.255.255.0이고 IP 주소가 192.168.0.5라면 브로드캐스트 주소는 192.168.0.255이다.
- 서브넷 마스크 : 서브 네트워크의 범위를 나타내는 값이다. 서브넷 마스크가 255.255.255.0이고 IP 주소가 192.168.0.5라면 서브 네트워크의 범위는 192.168.0.1 ~ 192.168.0.254이다.
- MTU : 패킷의 최대 크기, 보통 1500 값을 가짐
- RX packets : 받은 패킷 수, TX packets : 보낸 패킷 수
- RX bytes : 받은 바이트 수, TX bytes : 보낸 바이트 수
- Interrupt 주소

- ifconfig 명령의 예
- 모든 네트워크 인터페이스의 정보를 출력하는 명령 → ifconfig
- 네트워크 인터페이스 eth1의 IP 주소를 192.168.56.101로 설정하는 명령 → ifconfig eth1 192.168.56.101

3. 리눅스에서 사용하는 네트워크 설정 파일의 내용을 설명하시오.
- /etc/sysconfig/network 파일 : HOSTNAME 항목으로 시스템의 호스트명을 설정한다. hostname 명령으로 호스트명을 확인하거나 설정할 수 있다.
- /etc/resolv.conf 파일 : nameserver 항목에 DNS 서버 주소가 기록되어 있다. DNS는 도메인명이나 호스트명에 대응되는 IP 주소를 알려주는 서비스이다.
- search로 도메인 뒷부분을 제외하고 앞부분 호스트명 만으로 사용할 수 있게 설정할 수 있다. 예를 들어 /etc/resolve.conf 파일에 ‘search knou.ac.kr' 행을 추가하고
- 쉘 프롬프트에서 'nslookup www' 명령을 실행하면 'www'를 'www.knou.ac.kr'로 인식하여 IP 주소를 찾는다.
- /etc/hosts 파일 : IP 주소에 할당된 호스트명 및 별명을 설정한다. 파일에 설정된 IP 주소는 DNS를 사용하지 않고 직접 접속한다.
- 예를 들어 /etc/hosts 파일에 '203.232.172.70 www.knou.ac.kr' 행을 추가하면 DNS와 관계없이 호스트명 'www.knou.ac.kr'을 바로 IP 주소 ‘203.232.172.70’으로 해석한다.

4. 네트워크를 점검하는 각종 리눅스 명령에 대하여 설명하시오.
- ping 명령 : ICMP를 이용하여 원격 호스트와의 연결 여부와 네트워크의 상태 정보를 점검한다.
- ping을 통해 알 수 있는 내용은 보낸 패킷 수, 받은 패킷 수, 유실된 패킷 수, 응답속도 등이다.
- ping 명령의 예 (주요 사이트들은 ping 요청에 응답하지 않으므로 자기 자신에게 ping을 수행) → ping localhost
- traceroute 명령 : 특정 호스트까지 통신이 이루어지는 경로를 확인한다. traceroute로 확인할 수 있는 정보는 대상 호스트까지 통신 가능 여부, 대상 호스트까지 hop수, 대상 호스트까지 통신 지연 구간 등이다.
- traceroute 명령의 예 (TCP 옵션을 사용하여 www.knou.ac.kr까지 경로를 확인) → traceroute -T www.knou.ac.kr
- 참고: VirtualBox 가상머신에 리눅스를 설치한 경우 NAT(Network Address Translation)을 통해 외부 네트워크와 연결하기 때문에 traceroute로 경로 정보를 확인할 수 없다.
- netstat 명령 : 네트워크 연결 상태, 시스템 라우팅 테이블, 네트워크 인터페이스 통계, 멀티캐스팅 등 시스템의 네트워크에 관한 정보를 확인한다.
- netstat 명령의 예 (TCP socket 연결을 보여주는 명령) → netstat -t
- nslookup 명령 : DNS를 이용하여 호스트의 IP 주소를 확인한다.
- nslookup 명령의 예 (www.knou.ac.kr의 IP 주소 확인) → nslookup www.knou.ac.kr



Chapter 11 원격 관리

1. Telnet 서버를 설치하고 Telnet에 접속하는 과정을 설명하시오.
- Telnet 서버 설치 : yum 명령을 이용하여 설치한다.
→ yum -y install telnet-server
- telnet이 설치되었는지 rpm 명령으로 확인한다.
→ rpm -qa | grep telnet
→ rpm -qi telnet-server
→ rpm -ql telnet-server
- Telnet 서버 설정 : Telnet 서버를 직접 실행하지 않고 xinetd 데몬이 Telnet 서비스를 제공하도록 설정하는데 이를 위하여 /etc/xinetd.d/telnet 파일의 disable 부분을 no로 설정하고 쉘 프롬프트에서 ‘service xinetd restart’ 명령을 실행하여 xinetd를 재실행시킨다.
- Telnet 클라이언트를 이용한 서버 접속 : 다음 명령으로 Telnet 클라이언트를 실행시키고 localhost에 접속한다. → telnet localhost
- 사용자명과 password를 입력하여 로그인한다.
- exit 또는 logout 명령을 이용하여 로그아웃한다.

2. Secure Shell(SSH)의 기능과 특징을 기술하시오.
- SSH는 원격 시스템에 로그인하여 쉘 명령을 수행할 수 있게 해 주는 Telnet과 비슷한 프로그램이다.
- SSH는 전자 서명을 이용하여 클라이언트와 서버 간 연결을 인증하며 클라이언트와 서버 간에 주고받는 메시지를 암호화하여 Telnet에 비하여 보안이 강화되었다.
- SSH는 TCP port 번호 22를 사용하여 연결한다. 원하는 경우 port 번호를 변경할 수 있다.
- OpenSSH는 널리 사용되는 SSH 서버이고 ‘yum install openssh' 명령으로 설치 가능하다.

- 다음은 널리 사용되는 SSH 클라이언트이다.
- PuTTY : http://www.putty.org (공개 S/W)
- 한글 PuTTY : http://kldp.net/projects/iputty (공개 S/W)
- XShell : http://www.netsarang.com/products/xsh_overview.html (개인 사용자에게만 무료)



Chapter 12 FTP 서버

1. File Transfer Protocol(FTP)의 기능과 특징을 기술하고 ProFTP 설치 방법을 설명하시오.
- FTP는 파일 전송을 위한 프로토콜로 클라이언트가 서버에 접속하여 파일을 업로드하거나 다운로드 할 수 있는 프로그램이다.
- FTP 클라이언트와 서버는 TCP 연결을 생성하는데 명령을 위한 연결과 데이터를 위한 연결을 별도로 관리한다.
- 명령 전송은 서버 측에서 제공하는 port 번호 21을 사용한다. 원하는 경우 port 번호를 변경할 수 있다.
- 데이터 전송은 클라이언트와 서버 간에 임의의 port 번호를 사용하는데 active, passive mode에 따라서 port를 열고 기다리는 측이 달라진다.
- FTP는 데이터 전송 방식에 따라서 active mode와 passive mode가 있다.
- Active mode에서는 데이터를 전송할 때 클라이언트 측에서 열어놓은 임의의 port에 서버가 접속한다.
- Passive mode에서는 데이터를 전송할 때 서버 측에서 열어놓은 임의의 port에 클라이언트가 접속한다.
- ProFTP는 널리 사용되는 FTP 서버이다.
- CentOS에서 yum 명령으로 ProFTP를 설치하기 위해서는 다음과 같은 명령을 순서대로 실행한다.
- cd /etc/yum.repos.d
- wget http://centos.karan.org/kbsingh-CentOS-Extras.repo
- rpm –import http://centos.karan.org/RPM-GPG-KEY-karan.org.txt
- vi /etc/yum.repos.d/kbsingh-CentOS-Extras.repo 명령으로 파일을 편집하여 enabled = 0'을 'enabled = 1'로 고친다.
- yum –y install proftpd

2. FTP 클라이언트에서 사용하는 주요 명령의 기능을 설명하고 널리 사용되는 FTP 클라이언트 프로그램들을 나열하시오.
- FTP 클라이언트로 서버에 접속하여 'ftp>' 프롬프트에서 사용하는 명령 중 많이 사용하는 것은 다음과 같다.
- help : 사용할 수 있는 명령을 보여주고 각 명령의 사용법을 조회할 수 있다.
- dir : 작업 디렉터리의 내용을 보여준다.
- cd : 서버 측 작업 디렉터리를 변경한다.
- lcd : 클라이언트 측 작업 디렉터리를 변경한다.
- get : 파일을 remote 서버에서 local 클라이언트로 받는다.
- put : 파일을 local 클라이언트에서 remote 서버로 보낸다.
- mget : 여러 파일을 remote 서버에서 local 클라이언트로 받는다. 파일 이름에 wildcard 문자를 사용할 수 있다.
- mput : 여러 파일을 local 클라이언트에서 remote 서버로 보낸다. 파일 이름에 wildcard 문자를 사용할 수 있다.
- prompt : mget이나 mput에서 각각의 파일을 전송할 것인지 묻지 않도록 설정하는 ‘Interactive mode Off’나 전송 여부를 매번 묻도록 설정하는 ‘Interactive mode On’을 선택할 수 있다.

- 다음은 많이 사용되는 FTP 클라이언트이다.
- FileZilla : http://filezilla-project.org (공개 S/W)
- 알 FTP : http://www.altools.co.kr/Product/ALFTP_Intro.aspx (개인 사용자에게만 무료)
- Smart FTP : http://www.smartftp.com (유료)
- /usr/bin/ftp : 리눅스 기본 제공
- ftp.exe : Windows 기본 제공



Chapter 13 APM 설치 및 활용

1. HTTP에 대하여 간단히 설명하시오.
- HTTP는 클라이언트와 서버 간의 요청(request)과 응답(response) 프로토콜이다. 일반적으로 클라이언트는 웹 브라우저이고 서버는 Apache와 같은 웹 서버이다. HTTP는 전송 프로토콜로 대부분 TCP를 사용하며 port 번호는 일반적으로 80번을 사용한다.
- HTTP 요청은 클라이언트가 서버에게 특정 자원(주로 웹 페이지)에 대한 요청 명령(GET, POST 등)을 보내는 것이다.
- HTTP 응답은 클라이언트의 요청에 대한 서버의 응답이며 응답코드(200 OK, 404 Not Found 등)와 요청한 자원이 전달된다. 요청한 자원을 전달할 수 없을 경우 오류코드가 반환된다.
- HTTP/1.0까지는 한 쌍의 요청과 응답이 끝나면 TCP 연결을 끊어졌지만 1.1 버전부터는 keep-alive 기능이 제공되어 클라이언트가 한 번의 연결로 서버에게 여러 번 요청을 보내고 응답을 받을 수 있다.
- HTTP는 상태 정보를 유지하지 않는 stateless 프로토콜이다. 따라서 로그인 등의 상태 정보를 표현하기 위하여 cookie, session 등이 필요하다.

2. APM을 구성하는 세 가지 요소에 대하여 알아보시오.
- APM의 구성요소는 Apache HTTP 서버, PHP 스크립트 처리기, MySQL 데이터베이스관리시스템이다.
- 클라이언트가 웹 문서를 Apache 웹 서버에게 요청하면 웹 문서 내에 있는 PHP 스크립트가 PHP 모듈 등에 의하여 처리되고 HTML 문서가 생성되어 클라이언트에게 응답으로 보내진다.
- PHP 스크립트 처리 과정에 MySQL 데이터베이스에 접근하여 데이터를 검색하거나 추가, 변경, 삭제하는 등 질의를 수행할 수 있다.

- Apache HTTP 서버
- Apache는 현재 가장 널리 사용되는 웹 서버이다. Apache Software Foundation에 의해 개발되고 관리된다.
- Apache Tomacat은 Apache 웹 서버와 다르다. Apache Tomcat은 Java Servlet과 JSP(JavaServer Pages) 기능을 제공하는 서버이다.

- PHP 스크립트 처리기
- PHP(PHP: Hypertext Processor)는 동적으로 웹 페이지를 생성할 수 있게 고안된 HTML 내장 스크립트 언어이다. 공개 소프트웨어이며 the PHP Group에 의하여 관리된다.
- PHP의 시초인 PHP/FI(Personal Home Page / Forms Interpreter)는 1995년에 Rasmus Lerdorf에 의해 만들어졌고 현재 PHP의 모습을 가진 PHP3는 1997년 Andi Gutmans 와 Zeev Suraski에 의해 완전히 재 작성되었다.
- PHP5는 Zend 2.0 엔진 기반의 객체지향 프로그래밍 모델을 지원한다.

- MySQL 데이터베이스관리시스템
- MySQL Community Server는 공개 소스 데이터베이스 관리 시스템이다. MySQL Enterprise Edition은 유료로 제공된다.
- MySQL은 C, C++, C#, Java, PHP 등 다양한 프로그래밍 언어 인터페이스를 제공한다.

- MySQL은 1995년 설립된 MySQL AB에 의해 개발되었으며 2008년 Sun Microsystem이 MySQL AB를 인수하였고 2010년 Oracle Corporation이 Sun Microsystem을 인수하였다.

3. Apache 웹 서버의 설정파일 및 주요 설정항목에 대하여 설명하시오.
- Apache 웹 서버의 설정파일은 httpd.conf이며 Apache 서버가 /etc/httpd에 설치되었을 경우 /etc/httpd/conf 디렉터리에 위치한다.
- httpd.conf 파일에서 설정할 수 있는 주요 설정항목은 다음과 같다.
- ServerRoot : Apache 서버가 설치된 디렉터리
- KeepAlive : 클라이언트와 한 번의 연결로 서버와 여러 번의 요청과 응답을 주고받을 수 있도록 지속적인 연결을 허용할지 여부
- KeepAliveTimeout : 클라이언트와 지속적인 연결을 유지할 최대 대기 시간
- MaxRequestsPerChild : 자식 서버 프로세스를 종료하기 전에 처리할 최대 요청 수, 자식 서버 프로세스가 처리한 요청 수가 MaxRequestsPerChild 값을 초과하면 프로세스를 종료시킴
- StartServers : 초기에 생성하는 자식 서버 프로세스 수
- MinSpareServers / MaxSpareServers : 유휴 자식 서버 프로세스 수가 부족 또는 초과 시 자식 서버 프로세스를 생성하거나 종료시키는 기준
- Listen : 서버가 사용할 TCP port 번호, 일반적으로 80번을 사용함
- DocumentRoot : 웹 페이지의 문서가 위치하는 디렉터리
- UserDir : 리눅스 사용자별 웹 문서의 기본 디렉터리 위치
- DirectoryIndex : 클라이언트가 요청한 경로에 파일 이름이 포함되지 않았을 경우 기본으로 사용할 웹 페이지 파일 이름



Chapter 14 메일서버 설치 및 관리

1. 메일 서버의 기능을 간단히 설명하고 널리 사용되는 메일 서버의 종류를 알아보시오.
- 메일 서버는 Mail Transfer Agent(MTA)라고 하며 메일을 송수신하는 서버 프로그램이다.
- MTA는 Simple Mail Transfer Protocol(SMTP)를 이용하여 클라이언트로부터 메일을 받거나 다른 서버에게 메일을 전송한다.
- SMTP는 TCP port 25번을 사용하였으나 최근에는 TCP port 587번을 사용하는 경우도 많이 있다.

- 널리 사용되는 메일 서버의 종류는 다음과 같은 것이 있다.
- Sendmail : 메일 서버 중 가장 많이 사용됨
- Qmail : sendmail보다 기능적인 장점이 많으며 사용자가 늘어나고 있음
- Postfix : CentOS의 기본 메일 서버로 sendmail 보다 사용하기 쉽고 보안성이 우수함
- MS Exchange Server : Microsoft의 메일 서버로 유료임

2. 메일 전송이나 수신을 위한 프로토콜에 관해 설명하시오.
- SMTP : 메일 클라이언트가 서버에 메일 전송을 요청하거나 두 MTA 사이에서 메일을 송수신할 때 사용되는 프로토콜로 인터넷 메일 표준 프로토콜이다.
- POP3, IMAP : 원격에 있는 메일 클라이언트가 서버 컴퓨터에 접속하여 메일을 수신하기 위한 프로토콜이다.

3. Sendmail의 주요 설정항목에 대하여 설명하시오.
- 설정파일은 보통 /etc/mail 디렉터리에 위치한 sendmail.cf 이다.
- 메일 중계(relay) 규칙 지정 파일 설정
- 스팸 메일을 전송을 막기 위하여 relay 규칙을 지정할 수 있다.
- /etc/mail/relay-domains 또는 /etc/mail/access 파일을 이용하도록 다음과 같이 'FR-o /etc/mail/relay-domains', 'Kaccess hash /etc/mail/access'로 설정한다.
- /etc/mail/relay-domains 파일에 relay 규칙을 설정하였을 경우 sendmail 서버를 다시 시작 하여야 하며 /etc/mail/access 파일에 설정한 경우 서버를 다시 시작할 필요는 없으나 access 파일 변경 후 makemap 명령으로 /etc/mail/access.db 파일을 다시 생성하여야 한다.

- 메일 전달(forward) 규칙 지정 파일 설정
- 받은 메일을 다른 메일 주소로 보내도록 forwarding 규칙을 지정할 수 있다.
- 일반적으로 사용자 홈 디렉터리의 .foward 파일에 규칙을 지정할 수 있도록 ‘O ForwardPath=$z/.forward.$w:$z/.forward’와 같이 설정한다.
- 메일 최대 크기 설정
- ‘O MaxMessageSize=1000000’와 같이 메일의 최대 크기를 설정한다.