2008. 3. 31.

DNS check website

무료점검사이트가 여러군데 있습니다.

1. 웹사이트

1) DNS 점검사이트

DNS전문가 카페에서 만든사이트 : http://www.serverchk.com/

NIDA: http://domain.nida.or.kr/information/namedns.jsp

http://www.dnsreport.com/



2) NS확인
http://www.zonecut.net/dns/

http://zonecheck.denic.de/zonecheck ( http://www.afnic.fr/outils/zonecheck)



3) DNS Trace
http://www.squish.net/dnscheck/



4) 리버스점검 외

http://dnssnoop.net/index.php






2. DNS버전 확인 유틸리티
http://www.rfc.se/fpdns/

2008. 3. 27.

[Linux] ftp shell script

#!/bin/sh

## 소스 백업 2007. 7. 21

# 소스 : /app1/cvsrepo/
# WEB : /supp1/webdocs/
# WAS : /supp1/webapps/

tar cfz `date +%Y%m%d`_webapps.tar.gz /supp1/webapps/

USERNAME=w3sli
PASSWORD=*****
HOST=100.5.100.99

PUT_FILES=`date +%Y%m%d`_webapps.tar.gz
{ echo user $USERNAME $PASSWORD
echo cd /backup1/re_backup/`date +%Y%m%d`/
echo bin
echo put $PUT_FILES
echo bye
} | ftp -n -v $HOST >> /tmp/log

#echo " 백업 성공 "
rm -f `date +%Y%m%d`_webapps.tar.gz

Qmail Error

Error : Sorry, I wasn't able to establish an SMTP connection.


1. Backup
/var/qmail/control/rbllist - Backup

2. This lists are Spam web site. Delete the list.

relays.ordb.org reject 127.0.0.2 ORDB - http://www.ordb.org/faq/
relays.ordb.org reject any ORDB - http://ordb.org/

3. Qmail - Smtpd restart
cd /var/qmail/script
./restart.sh qmail-smtpd

2008. 3. 17.

[Linux] Binary core analysis

LINUX 운영체제에서 코어 정보 수집 LINUXGDB는 Linux의 기본 디버거로 사용되며 강력하고 안정적입니다. 다양한 비주얼 디버거를 사용할 수도 있지만 코어에서 스택 트레이스를 가져올 경우 간단한 명령줄 디버거면 충분합니다.


file /core를 실행하여 코어 파일의 출처가 Java VM인지 여부를 확인합니다.
Linux에서 알려진 버그를 방지하려면 최신 버전의 GNU GDB를 사용해야 합니다.

참고: http://ftp.gnu.org/gnu/gdb/
또한 Linux에서 코어 파일에 대해 ulimit가 설정되어 있는지 확인합니다 (예: ulimit -c unlimited).
Linux에서는 기본적으로 코어 덤프가 오프되어 있습니다. RedHat Advanced Server 2.1에서는 코어 파일이 /etc/security에 있고 limits.conf라는 파일이 있어야 합니다. 이 파일에서 설정 사항을 확인할 수 있습니다. "core"라는 단어를 찾아보십시오. 0으로 설정되어 있으면 coredump를 사용할 수 없습니다.
참고 항목: 코어 파일 생성을 위해 검사해야 할 운영 체제 구성
다음과 같이 gdb를 사용하여 스택 트레이스를 가져옵니다(이전 과정과 동일).


$ java -version (need to use right version of jdk)
$ ls /usr/local/bin/gdb (need to know gdb location) or "which gdb"
$ export DEBUG_PROG=/usr/local/bin/gdb (or wherever "gdb" is located)

For JDK 1.3.X do the following:
$ /java corefile
For JDK 1.4.X do the following:
$ gdb /java corefile

Now you will be in the debugger. Execute the following commands:
(gdb) where ("shows a summary of the stack")
(gdb) thr ("switch among threads or show the current thread")
(gdb) info thr ("inquire about existing threads")
(gdb) thread apply 1 bt ("apply a command to a list of threads, specifically the backtrace to thread #1")
(gdb) quit


where 명령을 사용하면 실행된 마지막 스레드의 스택 트레이스가 생성되고, thr 명령을 사용하면 현재 스레드가 표시되고, info thr 명령을 사용하면 모든 스레드의 상태가 표시되고, thread apply 1 bt 명령을 사용하면 코어 파일에 포함된 스레드 1의 스택 트레이스를 다른 방식으로 가져올 수 있습니다. 마지막 명령 thread apply # bt에서 #을 실제 스레드 번호로 바꾸어 개별 스레드의 스택 트레이스를 가져오거나 3을 "all"로 바꾸어 모든 스레드의 스택 트레이스를 가져올 수 있습니다.

[Linux] vsftpd install

아래 리스트는 현재 VSFTP 를 신뢰하고 사용하고 있는 대표적인 사이트입니다.
ftp.redhat.com
ftp.suse.com
ftp.debian.org
ftp.openbsd.org
ftp.freebsd.org
ftp.gnu.org
ftp.gnome.org
ftp.kde.org
ftp.kernel.org
rpmfind.net
ftp.linux.org.uk
ftp.gimp.org
ftp-stud.fht-esslingen.de
gd.tuwien.ac.at
ftp.sunet.se
ftp.ximian.com
ftp.engardelinux.org
ftp.sunsite.org.uk
ftp.isc.org



1. VSFTP 설치

vsftp 홈페이지 : http://vsftpd.beasts.org/
vsftp 다운로드 : ftp://vsftpd.beasts.org/users/cevans/

먼저 VSFTP의 설치를 위해 ftp://vsftpd.beasts.org/users/cevans/ 에 접속해 최신버젼을
다운받습니다. 현재 이 강좌를 쓰고 있는 시점의 최신버젼은 vsfpd-2.0.1 버젼이군요..
그럼 vsftpd-2.0.1을 다운받았다는 가정하에 이강좌를 진행하겠습니다.
버젼별로 큰 차이는 없으니까 다른 버젼을 1.2.2 버젼을 선택하신분들도 설치하시는데는
큰 어려움이 없으실겁니다.

다운로드 : wget http://ftp.superuser.co.kr/pub/FTP/vsftpd/vsftpd-2.0.3.tar.gz

ex)
# cd /home/imsi/
# tar xvfz vsftpd-2.0.3.tar.gz
# cd vsftpd-2.0.3
# make


VSFTP를 운영하기 위해서는 nobody 사용자가 필요합니다. 다음과 같이 현재 nobody 사용자가
존재하는지 체크를 하세요

[root@develop vsftpd-2.0.3]# grep nobody /etc/passwd
nobody:x:99:99:Nobody:/:/bin/bash
VSFTP는 empty 라는 디렉토리를 필요로 합니다. 기본구성은 /usr/share/empty 입니다.
/usr/share/empty 디렉토리가 존재하는지 확인한 후 존재하지 않는다면 empty 디렉토리를 생성해 줍니다.

다음은 Anonymous FTP에서 사용할 ftp 계정이 필요합니다.
ftp 계정이 존재하지 않는다면 추가해야 됩니다.
ftp 계정의 HOME Directory 즉 Anonymous 접근의 루트로
/var/ftp 로 설정하기 위해 -d /var/ftp 옵션을 주어 ftp 계정을 생성해 줍니다.
먼저 /var/ftp 디렉토리를 생성합니다. 만약 이미 /var/ftp 라는 디렉토리가 있을 경우 다음과 같이
디렉토리의 소유자와 그룹을 root로 변경하고 og(Other, Group)에 w(쓰기권한)을 제거합니다


* ftp 계정이 없고 /var/ftp가 존재하지 않을경우
[root@develop vsftpd-2.0.3]# mkdir /var/ftp --> /var/ftp 가 없을 경우


이제 install 과정을 진행하겠습니다.
make install 을 해 줌으로서 생성된 vsftpd 파일이 /usr/local/sbin 에 복사가 되고 vsftpd의 man 페이지가 /usr/local/man/man5, /usr/local/man/man8 로 복사가 되고 inet 모드로 운영할 때 사용할 vsftpd 파일도 /etc/xinetd.d 디렉토리에 복사됩니다.
make install을 진행하기 전에 /usr/local/sbin 디렉토리와 /usr/local/man/man5, /usr/local/man/man8 디렉토리를 먼저 생성해 줍니다.
[root@develop vsftpd-2.0.3]# mkdir /usr/local/sbin
[root@develop vsftpd-2.0.3]# mkdir /usr/local/man/man8
[root@develop vsftpd-2.0.3]# mkdir /usr/local/man/man5

위와 같이 출력되면 에러 없이 install 이 실행된것입니다.

이제 VSFTP의 환경설정파일인 vsftpd.conf를 /etc 디렉토리에 복사합니다.
[root@develop vsftpd-2.0.3]# cp vsftpd.conf /etc



시스템의 local 사용자들의 접속을 허가 하기 위해 복사된 /etc/vsftpd.conf 를 열고
local_enable=YES 부분과 write_enable=YES, local_umask=022 부분의 주석을 제거합니다.
[root@develop vsftpd-2.0.1]# vi /etc/vsftpd.conf





VSFTP 설치하기

리눅스에서 사용할 수 있는 ftp 데몬은 proftp, wu-ftp를 비롯하여 많은 데몬들이 있습니다.
그중 레드헷의 최신 배포판에서 기본 ftp 데몬으로 채택하고 있는 vsftp의 설치방법과 운영방법,
활용법에 대해 얘기하려 합니다.

0. 왜 VSFTP를 추천하는가?
서버 운영에 있어서 가장 중요한 요소는 보안문제입니다.
기존의 proftp와 wu-ftp 는 보안 홀에 대한 보고가 빈번히 일어나 서버의 보안이 흔들린 경우가
많았습니다.
vsftp 는 보안부분을 특히 강조한 서버데몬으로서 REDHAT, SUSE, OPEN-BSD에서 기본 FTP 데몬으로
채택하고 있으며 vsftp를 매우 신뢰하고 있씁니다.
vsftp에서 보안, 빠른 퍼모먼스, 안정성을 주요 특징으로 소개하고 있고 그 성능도 여느 ftp 서버
보다 탁월한듯 합니다.
지원하는 대표적인 기능으로는 가상IP 지원, 가상유저 지원, Standalon 과 inetd 지원, 강력한 사용자
설정, 전송 대역폭 조절기능, 환경설정파일을 IP별로 독립적 운영 지원, IP별 제한기능등이 있습니다.
또한 config 파일의 설정문법도 아주 간단해서 FTP 서버관리를 쉽게 할 수 있습니다.

아래 리스트는 현재 VSFTP 를 신뢰하고 사용하고 있는 대표적인 사이트입니다.
ftp.redhat.com
ftp.suse.com
ftp.debian.org
ftp.openbsd.org
ftp.freebsd.org
ftp.gnu.org
ftp.gnome.org
ftp.kde.org
ftp.kernel.org
rpmfind.net
ftp.linux.org.uk
ftp.gimp.org
ftp-stud.fht-esslingen.de
gd.tuwien.ac.at
ftp.sunet.se
ftp.ximian.com
ftp.engardelinux.org
ftp.sunsite.org.uk
ftp.isc.org

이러쿵 저러쿵 얘기하는것 보다 위의 리스트들이 더 신뢰를 주는것 같군요.


1. VSFTP 설치

vsftp 홈페이지 : http://vsftpd.beasts.org/
vsftp 다운로드 : ftp://vsftpd.beasts.org/users/cevans/

먼저 VSFTP의 설치를 위해 ftp://vsftpd.beasts.org/users/cevans/ 에 접속해 최신버젼을
다운받습니다. 현재 이 강좌를 쓰고 있는 시점의 최신버젼은 vsfpd-2.0.1 버젼이군요..
그럼 vsftpd-2.0.1을 다운받았다는 가정하에 이강좌를 진행하겠습니다.
버젼별로 큰 차이는 없으니까 다른 버젼을 1.2.2 버젼을 선택하신분들도 설치하시는데는
큰 어려움이 없으실겁니다.

다운받은 파일을 /root/SRC 라는 디렉토리에 옮겨서 설치작업을 시작하도록 하겠습니다.
/root/SRC 에서 작업하는 특별한 이유가 있는건 아닙니다. 그러니까 각자 작업공간을 만들어
작업하시면 됩니다. 저는 소스설치한 데몬이나, 유틸의 소스들을 한곳에 모아두는 습관이
있어 /root/SRC 에서 항상 작업을 하는편입니다. 뽀족히 설치작업할 위치가 없다면 저를 따라
/root/SRC 에서 작업을 하는게 좋겠네요


파일이 설치할 디렉토리로 옮겨졌으면 vsftpd-2.0.1.tar.gz 을 압축을 해제합니다.





압축이 풀리면 vsftpd-2.0.1 이라는 디렉토리가 생깁니다. 설치를 위해 이 디렉토리로 이동합니다.




VSFTP 소스가 있는 디렉토리에서 make 명령을 하면 vsftpd 라는 바이너리 파일이 생성됩니다.





ls 명령으로 새로 생성된 vsftpd 바이너리 파일을 확인할 수 있습니다.



VSFTP를 운영하기 위해서는 nobody 사용자가 필요합니다. 다음과 같이 현재 nobody 사용자가
존재하는지 체크를 하세요
[root@develop vsftpd-2.0.1]# grep nobody /etc/passwd
nobody:x:99:99:Nobody:/:/bin/bash



위와같이 nobody 가 존재할 경우는 nobody를 새로 생성하지 않아도 됩니다.
만약 nobody 사용자가 존재하지 않을경우 아래와 같이 nobody 사용자를 추가해 줍니다.




VSFTP는 empty 라는 디렉토리를 필요로 합니다. 기본구성은 /usr/share/empty 입니다.
/usr/share/empty 디렉토리가 존재하는지 확인한 후 존재하지 않는다면 empty 디렉토리를 생성해 줍니다.





다음은 Anonymous FTP에서 사용할 ftp 계정이 필요합니다.
ftp 계정이 존재하지 않는다면 추가해야 됩니다.
ftp 계정의 HOME Directory 즉 Anonymous 접근의 루트로 /var/ftp 로 설정하기 위해 -d /var/ftp 옵션을 주어 ftp 계정을 생성해 줍니다. 먼저 /var/ftp 디렉토리를 생성합니다. 만약 이미 /var/ftp 라는 디렉토리가 있을 경우 다음과 같이 디렉토리의 소유자와 그룹을 root로 변경하고 og(Other, Group)에 w(쓰기권한)을 제거합니다

* /var/ftp가 존재할 경우


* ftp 계정이 없고 /var/ftp가 존재하지 않을경우
[root@develop vsftpd-2.0.1]# mkdir /var/ftp --> /var/ftp 가 없을 경우




이제 install 과정을 진행하겠습니다.
make install 을 해 줌으로서 생성된 vsftpd 파일이 /usr/local/sbin 에 복사가 되고 vsftpd의 man 페이지가 /usr/local/man/man5, /usr/local/man/man8 로 복사가 되고 inet 모드로 운영할 때 사용할 vsftpd 파일도 /etc/xinetd.d 디렉토리에 복사됩니다.
make install을 진행하기 전에 /usr/local/sbin 디렉토리와 /usr/local/man/man5, /usr/local/man/man8 디렉토리를 먼저 생성해 줍니다.
[root@develop vsftpd-2.0.1]# mkdir /usr/local/sbin
[root@develop vsftpd-2.0.1]# mkdir /usr/local/man/man8
[root@develop vsftpd-2.0.1]# mkdir /usr/local/man/man5




디렉토리가 모두 생성되었으면 make install을 합니다.



위와 같이 출력되면 에러 없이 install 이 실행된것입니다.

이제 VSFTP의 환경설정파일인 vsftpd.conf를 /etc 디렉토리에 복사합니다.
[root@develop vsftpd-2.0.1]# cp vsftpd.conf /etc




시스템의 local 사용자들의 접속을 허가 하기 위해 복사된 /etc/vsftpd.conf 를 열고
local_enable=YES 부분과 write_enable=YES, local_umask=022 부분의 주석을 제거합니다.
[root@develop vsftpd-2.0.1]# vi /etc/vsftpd.conf



주석을 제거했으면 저장하고 편집모드를 빠져나옵니다.


마지막으로 local 계정 사용자들의 로그인 인증을 위해 설치디렉토리안의 RedHat 디렉토리안에
있는 vsftpd.pam 파일을 /etc/pam.d 디렉토리에 ftp 라는 이름으로 복사를 합니다.


이제 모든 설치 과정은 끝났습니다. 그럼 VSFTP가 잘 작동하는지 테스트를 해 볼껀데 테스트는
xinetd 모드로 VSFTP 데몬을 돌리고 VSFTP의 standalone 모드로 운영하는 방법과 xinetd 모드로
운영하는 자세한 방법은 'VSFTP 운영및 활용 강좌'에서 다루도록 하죠.

우선 install 할때 복사되었던 /etc/xinetd.d/vsftp 파일을 열어 disable = no 로 설정되어 있나 확인합니다.
혹시 disable = yes 로 되어 있다면 no 로 변경해 줍니다.

[root@sslife03 /etc/init.d]# /etc/init.d/vsftpd restart


# ftp localhost
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.0.3)
Name (localhost:root):

## 여기까지 완료

정상 포트 확인
# netstat -na | grep 21 | grep LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

Weblogic 9.2 install

/supp1/bea921mp1/user_projects/domains/base_domain/bin

웹로직 경로로 이동하여 setDomainEnv.sh 실행한다.
[root@www bin]# ./setDomainEnv.sh
[root@www bin]# echo $CLASSPATH$
ex)
.:/supp1/bea/jdk150_06/lib/tools.jar$

[root@www base_domain]# echo $CLASSPATH$
ex)
:/supp1/bea921mp1/patch_weblogic921/profiles/default/sys_manifest_classpath/weblogic_patch.jar
:/supp1/bea921mp1/jdk150_06/lib/tools.jar:/supp1/bea921mp1/weblogic92/server/lib/weblogic_sp.jar
:/supp1/bea921mp1/weblogic92/server/lib/weblogic.jar
:/supp1/bea921mp1/weblogic92/server/lib/webservices.jar:
:/supp1/bea921mp1/weblogic92/common/eval/pointbase/lib/pbclient51.jar
:/supp1/bea921mp1/weblogic92/server/lib/xqrl.jar:$

:/usr/bea921/patch_weblogic921/profiles/default/sys_manifest_classpath/weblogic_patch.jar
:/usr/jdk/jdk150_07/lib/tools.jar:/usr/bea921/weblogic92/server/lib/weblogic_sp.jar:/usr/bea921/weblogic92/server/lib/weblogic.jar:/usr/bea921/weblogic92/server/lib/webservices.jar:/usr/bea921/weblogic92/common/eval/pointbase/lib/pbclient51.jar:/usr/bea921/weblogic92/server/lib/xqrl.jar


/supp1/applications/
[root@www applications]# java weblogic.marathon.ddinit.WebInit my*
ex)
Searching for classes in WEB-INF/classes/
filters=0 servlets=0 tags=0

확인할 수 있다.
[root@www WEB-INF]# more weblogic.xml



<직접 파일 확인>
web.xml--------------------------------------------------------------------------------------------------



index.jsp
index.html
index.htm


BASIC
WebApp


---------------------------------------------------------------------------------------------------------

weblogic.xml---------------------------------------------------------------------------------------------


---------------------------------------------------------------------------------------------------------

★ Weblogic download list URL

웹로직 다운로드
- WebLogic Server/Express 8.1 with SP4 -
wget http://download2.bea.com/pub/platform/81/server814_linux32.bin

wget http://download2.bea.com/pub/platform/81/server815_linux64.bin
wget http://download2.bea.com/pub/platform/81/server815_linux32.bin

wget http://download2.bea.com/pub/platform/81/pj_server814_generic.jar

- WebLogic Server 10.0 -
wget http://download2.bea.com/pub/platform/100/server100_linux32.bin

wget http://download2.bea.com/pub/platform/100/server922_generic.jar

- WebLogic Server 9.2 -
wget http://download2.bea.com/pub/platform/92/server920_linux32.bin

- WebLogic Server 9.1 -
wget http://download2.bea.com/pub/platform/91/server910_linux32.bin

- WebLogic Server 9.0 -
wget http://download2.bea.com/pub/platform/90/server900_linux32.bin

wget http://download2.bea.com/pub/platform/92/platform921_linux32.bin


- Weblogic Server 10.3
wget http://download2.bea.com/pub/platform/100/server103tp_linux32.bin


UNIX Download

wget http://download2.bea.com/pub/platform/92/platform921_generic.jar


웹로직 설치
./net_platform814_linux32.bin -mode=console

Windows Download Software -
server103tp_win32

[Linux] quota command

#QUOTA



사용자 와 그룹의 사용용량을 제한할때 쓰인다.



1.사용자(user) 사용용량 제한



1) etc/fstab 열어 제한한 마운트지점 defaults 뒤에 usrquota 추가



2) 해당 사용자의 home 디렉토리에 aquota.user 생성

[root@ linux root] #touch aquota.user



3) aquota가 생성된 디렉토리를 quotacheck 한다.

[root@ linux root] #quotacheck -mf /home



4) 사용자별 용량을 설정한다.

[root@ linux root] #edquota testuser



5) 왼쪽(Blocks)엔 사용용량 제한 , 오른쪽(inodes)엔 생성가능한 디렉토리나 파일의 수



6) quota 를 활성화 시킨다.

[root@ linux root]#quotaon /home



7) quota 를 확인한다.

[root@ linux root]#repquota /home



2.그룹별사용용량제한



1) /etc/fstab 에 해당 파티션에 defaults 뒤에 grpquota 추가



2) 해당 그룹 홈디렉토리에 aquota.group 파일 생성

[root@ linux root]#touch aquota.group



3) quota 가 생성된 디렉토리를 quotacheck 한다.

[root@ linux root] #quotacheck -mf -g /home



4) 해당그룹을 설정한다.

[root@ linux root]#edquota -g testgroup


5) quota 를 활성화 시킨다.

[root@ linux root] #quotaon /home



6) 그룹 quota설정을 확인한다.

[root@ linux root]#repquota -g /home



* 물리적 파티션이 나누어져있어야 한다.



* repqutoa -a 옵션을 쓰면 모든 쿼터설정을 다 보여준다.



* 커널2.4 버전에서 quota.user 와 quota.group 을 convert 해주어야한다.

converquota 로 해당 파티션을 지정하면 aquota.user aquota.group 으로 바뀐다.

(RH3버전에서는 그냥 quotacheck 만 해두 된다.)

[Linux] iptables

# iptables -A INPUT -p TCP -s xxx.xxx.xxx.0/24 --destination-port 3306 -j ACCEPT



이제 xxx.xxx.xxx.0 ~ 255 까지의 IP 대에서 접근이 가능합니다.



-A : 새로운 rule 을 추가하는 옵션 (INPUT, FORWARD, OUTPUT)

-p : 사용할 프로토콜을 지정 (TCP, UDP)

-s : 사용할 ip 주소를 지정

--destination-port : 사용할 포트를 지정

-j : 패킷처리방법을 지정(ACCEPT, DROP, REJECT)



추가했던 chain rule 을 제거하는 방법



# iptables -D INPUT -p TCP -s xxx.xxx.xxx.0/24 --destination-port 3306 -j ACCEPT

DNS Cluster Loadbalancing Failover

DNS Server
DNS(Domain Name System)는 컴퓨터 이름을 IP 주소로 변환하거나 해석해 주는데 사용되어지는 분산된 데이터베이스를 유지하는 서버이다.
과거 윈도우NT와는 달리 액티브 디렉터리로 윈도우2000 네트워크를 구성할 때 DNS는 반드시 요구되는 네트워크 서비스이다.

서버동작 원리
도메인 이름 시스템은 계층적 클라이언트/서버 기반의 분산 데이터베이스 관리시스템으로 DNS는 TCP/IP계층의 응용프로그램 계층의 서비스이고, 그 하위의 프로토콜인 UDP와 TCP를 둘 다 사용합니다.
DNS 데이터베이스의 목적은 컴퓨터 이름을 IP 주소로 분해하는 것으로, 클라이언트는 분해자(Resolver)로, 서버는 이름 서버(Name Server)로 부릅니다.
분해자는 성능을 높이기 위하여 UDP 질의를 서버에 보내고 반환된 데이터의 절단현상(truncation)이 발생했을 때만 TCP로 분류합니다.
포트 번호는 53번을 사용합니다.


TCP/IP 네트워크에서 사용되는 네임 서비스의 구조이다. TCP/IP 네트워크에서는 도메인이라고 하는 논리적 그룹을 계층적으로 설정할 수 있고, 그 논리적 그룹 명칭인 도메인명을 컴퓨터의 명칭(호스트명)의 일부에 포함시켜 이용하는 방법을 찾고 있다. 도메인 혹은 호스트 이름을 숫자로 된 IP 주소로 해석해 주는 TCP/IP 네트워크 서비스로서, 계층적 이름 구조를 갖는 분산형 데이터 베이스로 구성되고 클라이언트·서버 모델을 사용한다.

각 컴퓨터의 이름은 마침표에 의해 구분되고 알파벳과 숫자로 구성된 세그먼트의 문자열로 구성되어 있다. 예를 들어 기관별로는 com이면 기업체, edu인 경우는 교육기관, gov인 경우는 정부기관 등으로 나누어져 있다. 국가도메인은 au는 호주, ca는 캐나다, jp는 일본, kr는 한국, tw는 대만, uk는 영국 등이다.

Load balancing

로드밸런싱이라고도 한다. 병열로 운용되고 있는 기기 사이에서의 부하가 가능한 한 균등하게 되도록 작업 처리를 분산하여 할당하는 것을 말한다.

컴퓨터 내에서 여러 개의 마이크로프로세서에 작업의 처리를 균등하게 배정하거나 네트워크 상에서의 접속요구를 여력이 있는 서버로 돌리거나 하는 등 여러 분야에서 광범위하게 사용되고 있는 개념이다.

부하분산을 효율적으로 하기 위해서는 각 기기의 부하를 계속적으로 측정할 필요가 있다. 그러나 부하의 측정을 지나치게 엄밀하게 운용하게 되면 부하분산제어 자체가 오히려 큰 부하가 된다.

이 때문에 부하분산은 정밀도와 부하의 균형을 유지하는 형태로 실용화되고 있으며, 더욱 더 효율이 좋은 방법을 찾기 위한 연구가 계속되고 있다.

---
기존 Server Load Balancing 방법
- DNS Round-Robin을 이용한 Server Load Balancing


L4를 통한 Server Load Balancing
- TCP session관리가 Layer 4 장비를 통하여 가능하게 됨에 따라 다양하고 확실한 Load Balancing 구현
- Client가 웹 브라우저 상에서 URL을 입력하여 DNS로 하여금 얻어지는 Ip address값 (L4에서는 Virtual IP :VIP 이라고 말한다.) 을 통하여 L4의 Virtual Server로 접속.
- Virtual Serve의r로 접속하게된 http request는 Vip로 mapping되어있는 실제 서버(real server) Group matching.
- Server group으로 Matching 시키는 기법은 L4가 가지고 있는 여러 가지 분산 알고리즘에 의해 작동하게 되는데 사이트의 성격에 따라 알맞게 선택.

Cluster
①유사성(類似性)과 같은 어떤 개념을 바탕으로 몇 개의 집단으로 분류한 데이터 집합.
②서로 근접한 위치에 있으며 하나의 제어 장치에 의해 제어되는 입출력 장치나 단말 장치 등의 장치 집단.
③플로피 디스크나 하드 디스크에 정보를 기록하고 기록된 정보를 읽어 내기 위해 운영 체계(OS)가 사용하는 디스크 저장 공간의 단위. 디스크의 물리적 최소 저장 공간 단위는 섹터인데, 섹터는 프로그램이나 데이터를 관리하는 단위로서는 너무 작기 때문에 일정한 수의 섹터로 구성되는 다발을 한 단위로 사용한다. 다발은 디스크의 종류에 따라 보통 2의 제곱수의 섹터로 구성되며, OS가 디스크 저장 공간을 할당하고 해제하거나, 사용·미사용 공간을 관리하는 최소 단위이다. 아무리 작은 정보를 저장하더라도 1다발이 할당된다. 다발의 크기는 다발을 구성하는 섹터의 수에 섹터의 크기를 곱한 것이 된다. 이와 같이 다발을 사용하면 기억 장소가 낭비되는 단점도 있지만, 디스크에 접근하는 횟수가 줄어들기 때문에 전반적으로 처리 속도가 빨라지는 장점이 있다.
클러스터링의 용도는 크게 3가지가 있습니다.
로드벨런싱(Load Balancing) 용도, 빠른처리능력 용도, 장애 허용성(fault tolerance)용도....
LVM
LVM 은 Logical Volume Manager 의 약자로서, 저장장치들을 좀더 효율적이고 유연하게 관리할 수 있는 커널의 부분과 프로그램을 말합니다. 처음에는 IBM에서 개발되었는데, 그후에 OSF(현재는 OpenGroup http://www.opengroup.org)에서 차용을 하여 OSF/1 operating system 에서 쓰였습니다. 지금은 HP-UX, Digital Unix operating system, AIX 등의 상용 유닉스에서 쓰고 있습니다. 리눅스 버전은 현재 HP-UX의 것을 모델로 하여 Sistina Software 사(http://www.sistina.com)에서 open source로 개발하고 있습니다.

LVM 을 이해하려면 먼저 Software RAID (Redundant Array of Inexpensive Drives)를 언급해야 하는데, 이 둘은 비슷하면서도 큰 차이가 있습니다.
비슷한 점은 여러 물리적인 디스크들을 하나의 논리적인 디스크처럼 다룰 수 있게 함으로서 조합방법에 따라 고용량, 고속, 데이터의 무결성을 실현하는 점입니다.
하지만 분명하게 다른 점이 있는데. lvm은 raid보다 관리 및 확장이 비교적 쉬운 반면, raid에는 lvm에는 없는 disk mirroring(RAID level 1), Parity Stripe (RAID level 4,5) 등의 방식이 있어서 속도 또는 데이터의 무결성을 보장 받을 수 있다.

LVM 특징
·쉬운 관리.
·서로 다른 많은 디바이스 조합 지원.
·직관적인 저장 장치로의 접근.
·뛰어난 확장성.
·믿을만한 안전성과 효율.
·스냅샷 기능 지원.

우선, pc 급 시스템 사용자들의 가장 큰 고민 중의 하나가 시스템을 처음 설치할 때에 파티션의 구성을 어떻게 할 것인가 일 것입니다. 파티션은 한번 구성해 놓으면 바꾸기가 쉽지 않기 때문입니다. 또 파티션이 가득 차기라도 하면 어렵게 백업을 하거나 눈물을 머금고(?) 자료를 지워야 할 경우도 심심치 않게 생기기 마련입니다. 하지만 LVM를 쓰면 간단하게 저장공간을 확장, 축소 할 수 있기 때문에 그런 고민을 덜 수 있습니다.

다른 예로, 중소형 서버에서는 비교적 적은 비용으로 대용량 저장 장치를 구현하는 것이 가능해집니다. 그리고, 백업 없이 기존의 환경을 유지한 채 확장이 가능하기 때문에 (물론 백업은 *언제나* 중요하다.) 유지보수 면에서 상당한 이득이 있을 있다.

출처:http://www.linuxlab.co.kr/docs/01-05-4.htm


시스템 Raid

출처: http://blog.naver.com/mybrainz.do?Redirect=Log&logNo=140018561879

#RAID 구성


1. 리눅스에서 지원하는 소프트웨어 raid 레벨

1)raid-Linear : 간단히 여러개의 파티션을 하나로 묶는 역활
2)raid-0 : 여러개의 파티션을 하나로 묶어 스트라이핑기술을 이용하여 처리속도가 빨라진다.
디스크 오류에 대한 안전성은 없다는 단점
3)raid-1 : 미러링 기술을 이용하여 여러개의 디스크에 정확하게 복사본을 만들어 준다.
오류가 발생하면 복사해둔 이미지로 복구하게된다.
4)raid-3 : 패리티정보를 모아 별도의 디스크에 저장한다.이 패리티정보를 이용하여 오류가
발생한 디스크의 데이터를 복구한다. 안정성은 있으나 디스크성능이 감소한다.
5)raid-5 : raid -3 와 비슷하게 패리티정보를 이용하나 디스크에 저장하지는 않는다.
안전성도 제공하고 raid-3 에 비해 디스크의 성능저하가 일어나지 않는다.

2.RAID 관련 예제파일

1)레드햇 9.0 이후로는 /usr/share/doc/raidtools-1.00.3 디렉토리 밑에 예제가있다.
없을경우 rpm -ql raidtools 로 검색한다.
2)cp /usr/share/doc/raidtools-1.00.3/raidtab.sample /etc/raidtab
-> 해당 샘플파일을 /etc/raidtab 이란 화일로 복사한다.

3.raid - 0 구성하기

raid - 0 으로 구성해서 속도를 높이고 /raidtest 로 마운트 시키려고 한다.
여유 하드가 없으므로 자체하드의 남은 공간을 1GB * 2 로 설정해본다.

1) FDISK 로 1GB 를 두개 추가로 나눈다. (FDISK 는 현 블로그 FDISK 참조)
2) 나눠진 파티션은 /dev/hda8 과 /dev/hda9 라고 예를 든다.
3) /etc/raidtab 열어 설정한다.

#vi /etc/raidtab
raiddev /dev/md0 //raid 디바이스명 지정
raid-level 0 //raid 레벨 지정
nr-raid-disks 2 //raid 갯수 지정
persistent-superblock 1 //기본셋팅지정
chunk-size 4

device /dev/hda8 //디바이스명
raid-disk 0 //raid 디스크 넘버로 0부터 설정
device /dev/hda9
raid-disk 1

4)raid device 를 생성

#mkraid /dev/md0
handling MD device /dev/md0
analyzing super-block
disk 0 : /dev/hda8, 875511KB, raid superblock at 875392KB
disk 1 : /dev/hda9, 875511KB, raid superblock at 875392KB

5)raid를 작동 시킨다.

#raidstart /dev/md0
->최근에는 mkraid 하면 자동으로 start가 이루어진다.또한 재부팅시에도 자동으로시작된다

6)파일시스템을 생성한다

#mkfs -t ext3 /dev/md0

7)마운트할 디렉토리 생성

#mkdir /raidtest

8)마운트

#mount -t ext3 /dev/md0 /raidtest

9)raid 상태 확인

#lsraid -p

Cron 데몬
Cron 데몬은 작업을 주기 적으로 반복할 수 있도록 해주는 것이다.
- Cron 재시작
root]# /etc/init.d/crond restart

- 사용자의 crontab 내용을 본다.
root]# crontab -l

시스템 지정 crontab을 이용하는 방법
/etc/cron.hourly(시간별)
/etc/cron.daily(일별)
/etc/cron.weekly(주별)
/etc/monthly(월별)

■ CRON



→ 같은 작업을 주기적으로 반복할수 있도록 해준다.

보통 /etc/rc.d/init.d/crond 데몬에 의해 실행된다.

설정은 /usr/bin/crontab 명령어를 사용한다.



♠ 관련명령어 및 파일



1.crontab

▶ cron작업을 설정하는 명령이다. 실행시키면 기본vi편집기가 실행된다.

▶ option

-l : 현재 crontab 에 의해 설정된 내용을 출력한다.

-e : crontab 의 내용을 작성하거나 수정한다.

-r : crontab 의 내용을 삭제한다.

-u : root권한자가 해당사용자의 crontab 파일을 다룰때 사용한다.

▶ 예제

[root@linux root]#crontab -l

→ 작업목록을 보여준다.

[root@linux root]#crontab -e -u bluetree

→ bluetree 사용자의 crontab 을 작성하거나 수정한다.

[root@linux root]#crontab aaa

→ aaa 란 파일을 crontab 으로 사용한다.

aaa 에는 이미 crontab 형식에 맞에 입력되어 있어야한다.

▶ crontab 의 작업형식

→ 5개의 날짜필드와 1개의 명령필드로 구성되어있다.



MM HH DD mm d command

MM : 분을 의미한다 ( 0 ~ 59까지 사용)

HH : 시를 의미한다. ( 0 ~ 23 까지 사용)

DD : 날짜를 의미한다 ( 1 ~ 31까지 사용)

mm : 달을 의미한다.( 1 ~ 12까지 사용)

d : 요일을 의미한다.( 0 ~ 7 까지 사용, 0 과 7은 일요일을 나타낸다)

command : 실행할 명령을 입력한다.

※ 참고

위 형식에서 시간을 나타내는 각 필드에서 와일드 카드 '*'를 사용할수 있고

각각의 요일을 구분할 때 ',' 를 사용하고 연일을 나타낼때는 '-'를 사용한다.

즉 월요일과 수요일은 '1,3' 월요일부터 금요일까지는 '1-5' 로 표시할수있다



2./etc/crontab

→ 시스템이 정기적인 작업이 수행될수 있도록 기본적으로 설정되어있는 파일이다.



3./var/spool/cron 디렉토리

→ 각각의 사용자가 등록한 crontab은 이 디렉토리아래에 각 사용자이름으로 저장된다.



♠ crontab 내용 설정예



0 12 * * 1-5 /home/bluetree/start

→ 월요일부터 금요일까지 /home/bluetree/start 란 스크립트를 실행시킨다.



0 12 1 1-12/2 * /home/bluetree/babo

→ 1월부터 12월까지 2개월마다 /home/blutree/babo 란 화일을 실행시킨다.



0 4 * * 1,3,5 cat /root/notice | mail -s "notice" bluetree75@naver.com

→ 월,수,금 오전 4시에 notice 라는 문서의 내용을 메일로 발송한다.



♠ cron 사용자 제한



※ /etc/cron.allow (허가목록) 과 /etc/cron.deny(거부목록) 을 참조하게된다.

1./etc/cron.deny 만 존재하는경우

→ 기본적으로 모든사용자가 사용가능하고 cron.deny 에 등록된 사용자만

사용불가능하다.

2./etc/cron.allow 만 존재하는 경우

→ cron.allow 파일에 등록된 사용자만 사용가능하다.

3. 두 파일 모두 없을경우

→ 모든 사용자가가능하다

4. 두 파일 모두 있을경우

→ cron.deny 내용을 무시하고 cron.allow 명기된 사용자만 사용가능하다






장애 극복 : Failover

Failover는 1차 시스템이 고장 또는 정기 유지보수 등의 이유로 이용할 수 없는 상태가 되었을 때, 2차 시스템이 즉시 그 임무를 넘겨받아 프로세서, 서버, 네트웍 또는 데이터베이스 등과 같은 시스템 구성요소의 기능들이 중단 없이 유지될 수 있는 백업 운전 모드를 말한다. 한 차원 더 높은 수준의 무정지형 시스템을 만드는데 주로 사용되었던 failover 개념은, 가동상태를 항상 유지해야 하는 극히 중요한 시스템의 핵심 부분이다. 여기에는 대기 중이던 시스템 구성요소로 작업들이 자동으로 옮겨짐으로써, 최종 사용자들에 한 순간의 중단도 없이 서비스를 제공할 수 있도록 하는 절차가 수반되어 있다. Failover는 어떠한 형태의 시스템에도 적용될 수 있는데, 예를 들어 PC에서의 failover란 고장난 프로세서로부터 보호하는 장치가 될 수 있으며, 네트웍에서의 failover는 접속 경로, 저장장치 또는 웹서버 등과 같은 네트웍 구성요소나 시스템 구성요소에 두루 적용될 수 있다.

저장된 데이터를 이용하기 위해서는 원래 점대점 또는 한 쌍이 상호 교차된 형태 등과 같이 매우 기본적인 구성 형태를 통해 서버에 접속해야만 했다. 이러한 환경에서는, 서버 한 대의 고장으로 인해 많은 사용자들이 서버가 복구되어 온라인에 연결되기 전까지는 원하는 데이터에 접근할 수 없게 된다. 그러나, 최근에는 SAN 등과 같은 여러 대의 서버와 데이터 저장 시스템 사이에서 다대다 접속을 가능케 하고 있다. 일반적으로 데이터 저장관련 네트웍은 많은 경로를 사용하는데, 각각의 경로는 서버와 해당 시스템간에 모든 구성요소가 연관되는 완전한 세트로 구성된다. 고장난 경로는 대개 그 경로의 어떤 개별 구성요소의 고장으로부터 유발될 수 있다. 구성요소들을 각각 이중으로 갖추고 있는 다양한 접속 경로는 하나 이상의 경로에 고장이 발생하더라도 서비스 존속이 가능하도록 보장하는데 사용된다. 자동으로 failover 되는 역량이 있다는 것은, 장비의 고장으로 인해 서비스가 중단되는 사태를 피할 수 없는 심각한 경우에서도 기능이 정상적으로 동작할 수 있도록 하는 것을 의미한다.


부하분산 : Load balancing
요약
병렬로 운영되는 기기 사이에서 부하가 균등하게 되도록 하는 일.

본문
로드밸런싱이라고도 한다. 병열로 운용되고 있는 기기 사이에서의 부하가 가능한 한 균등하게 되도록 작업 처리를 분산하여 할당하는 것을 말한다.
컴퓨터 내에서 여러 개의 마이크로프로세서에 작업의 처리를 균등하게 배정하거나 네트워크 상에서의 접속요구를 여력이 있는 서버로 돌리거나 하는 등 여러 분야에서 광범위하게 사용되고 있는 개념이다.
부하분산을 효율적으로 하기 위해서는 각 기기의 부하를 계속적으로 측정할 필요가 있다. 그러나 부하의 측정을 지나치게 엄밀하게 운용하게 되면 부하분산제어 자체가 오히려 큰 부하가 된다.
이 때문에 부하분산은 정밀도와 부하의 균형을 유지하는 형태로 실용화되고 있으며, 더욱 더 효율이 좋은 방법을 찾기 위한 연구가 계속되고 있다.


HA(High Availability)

HA, 중단 없는 서비스를 위한 필수 전략

인터넷의 급속한 발전으로 세계 어느 곳에 있든지 웹브라우저만 있으면 다양한 업무들을 처리할 수 있게 됐다. 전 세계가 인터넷이라는 거대한 하나의 고리로 연결됐을 뿐 아니라 인터넷 뱅킹, 전자결제, 전자상거래, 홈쇼핑, 증권 거래, 민원 업무 등 우리의 일상도 인터넷을 이용해 처리할 수 있게 된 것이다. 이처럼 인터넷이 생활 속으로 깊숙이 침투하고 이러한 서비스를 이용하는 사용자들이 빠르게 증가함에 따라 중단 없는 서비스에 대한 요구도 점점 높아지고 있다. 따라서 24×7×365일 항상 서비스를 제공할 수 있는 시스템이 절실하게 필요해졌다. ‘해가 져도 비즈니스는 계속된다’는 광고 카피처럼, HA(High Availability)는 이제 비즈니스의 연속성과 가용성을 극대화해주는 필수 전략이 되고 있다.

서비스 다운타임을 초래하는 요소들
서비스의 연속성을 저해하는 요인은 크게 두 가지로 나눌 수 있다. 계획된 다운타임(Planned Downtime)과 계획되지 않은 다운타임(Unplanned Downtime)이 바로 그것.
계획된 다운타임에는 △시스템 변경 △신규 시스템 도입 △데이터 백업 △소프트웨어 추가 △애플리케이션 마이그레이션 같은 것들이 있다.
시스템을 운영하는 데 이와 같은 작업은 필수이다. 비록 작업 전에 계획된 다운타임을 공고한다 할지라도 고객들은 서비스를 받지 못하는 불편함을 감수해야만 한다.
한편 계획되지 않은 다운타임에는 △정전 및 UPS 장애 △하드웨어 장애 △소프트웨어 장애 △네트워크 장애 같은 것들이 있다.
서비스 시스템은 항상 장애가 발생할 수 있는 소지를 갖고 있다.
계획되지 않은 다운타임은 서비스 시스템에 갑자기 발생하는 장애로 인한 것이다. 장애의 종류와 정도에 따라 다운타임 시간은 며칠이 될 수도 있다. 예고 없이 발생하는 장애로 인해 야기된 서비스 다운은 기업이나 조직에게 치명적인 위협을 가할 수도 있다.

서비스 장애 시 발생할 수 있는 일들
요즘 시스템을 이용해 처리되는 많은 업무들은 우리가 매일 이용하는 서비스들이다. 따라서, 서비스 장애 시 우리는 서비스의 중단에서 오는 불편함을 직접 느낄 수밖에 없다. 몇 가지 예를 살펴보자.
백화점에 가서 멋진 겨울 외투를 카드로 구매하려고 하는데, 신용카드 회사의 결제 서버에 장애가 발생한다면 어떻게 될까? 설상가상으로 백화점의 메인 서버에 장애가 발생하면 어떻게 될까? 우리는 물건을 사고 싶어도 살 수 없을 것이다.
홈쇼핑의 메인 서버에 장애가 발생하면 고객들은 큰 불편을 겪게 될 것이고, 홈쇼핑 업체에서는 엄청난 매출 손실을 보게 될 것이다. 또, 인터넷 상거래 서버가 다운되면 거래를 할 수 없게 된 수많은 회사들이 아우성을 칠 것이다. 자동화가 된 제조 업체에서 공장 제조 라인을 제어하는 서버에 장애가 발생하면, 공장 라인은 멈출 수밖에 없다.
필자는 동사무소에서 증명서를 발급받을 때, 한 시간 이상을 기다린 경험이 있다. 당시 증명서를 발행하는 서버에 문제가 있었기 때문이다.
물론, 예로 든 이러한 몇 가지 상황들은 극히 일부에 불과하다. 그러나 예고 없는 서비스의 중단은 우리의 일상 생활에 큰 불편을 초래한다는 점은 분명하다. 서비스가 중단됐을 때 우리가 할 수 있는 일이라곤 서비스가 복구되기를 기다리는 일뿐이다.



서비스 다운타임=손실
그림 2에서 보는 바와 같이 서비스의 다운타임은 곧 직접 손실로 이어진다. 서비스의 종류와 중요도에 따라 손실액은 더 증가할 수 있다. 서비스의 다운타임이 너무 오래 지속되면 그 기업은 회생하기 어려울 수도 있다.
피해액을 계산하기조차 어려운 간접 손실은 더 큰 문제다. 다운타임이 늘어날수록 직접 손실뿐만 아니라 추가적인 간접 손실도 늘어나고, 이는 비즈니스에 치명타가 된다. 브랜드 가치, 시장 점유율, 주가, 평판, 고객 만족 등이 추락하며, 고객들은 등을 돌리고 다른 기업을 찾아 떠난다. 한번 신뢰를 잃고 떠나간 고객은 되돌아오지 않는다.
‘소 잃고 외양간 고친다’는 속담이 있다. 서비스가 다운되는 장애를 겪은 후에야 시스템에 대한 투자를 서두르는 기업들이 바로 이에 해당하는 경우일 것이다. 미리 조금만 투자했더라면 훨씬 손실을 줄일 수 있었을 것이다. 서비스 다운 시 발생하는 간접 손실까지 고려하면, 가용성에 대한 투자는 필수라고 할 수 있다. 특히 요즘처럼 경쟁이 치열한 환경에서는, 서비스의 가용성을 높여야만 유사시에도 회사가 살아남을 수 있다는 절박한 인식이 필요하다.

HA 구성(클러스터 구성)
단일 시스템

시스템 가용성
언제나 보장(서비스 레벨의 HA 구성은 99.999%의 가용성 보장).
한 번 시스템에 장애가 발생하면 복구 시간이 오래 걸림(보통 97% 내외의 가용성을 보장).

애플리케이션
시스템이 다운돼도 대기 상태에 있는 서버에서 항상 서비스 가능.
시스템을 재구성한 후 다시 서비스 재개.

비용 및 효율성
초기 설치 비용에 대해서 부담이 있긴 하지만 훨씬 안정적이고 믿을 만한 서비스를 보장받을 수 있음.
설치 비용은 저렴하나 시스템 장애가 일어나게 되면 가용성이 보장 안됨.

평가
긴 안목에서 중단 없는 서비스를 제공해 더 효율적임.
장애는 곧 막대한 매출 손실뿐 아니라 항상 시스템 운영자를 불안하게 함.

(그림 3) HA 구성과 단일 시스템 비교

HA의 필요성
HA(High Availability)는 고가용성을 의미한다. HA와 클러스터(Cluster)라는 용어는 엄밀히 말하면 다르지만, 고가용성이라는 의미로 혼용해 사용하고 있다. 아마도 몇몇 HA 제품들의 명칭에 클러스터라는 단어가 사용되고 있기 때문일 것이다.
HA의 목적은 서비스의 다운타임을 최소화함으로써 가용성을 극대화하자는 것이다. 운영 서버에 장애가 발생하더라도, 대기 서버가 즉시 서비스를 대신 처리해 준다면 서비스의 다운타임은 최소화될 수 있다. 운영 서버에 언제 장애가 발생할 지는 아무도 예측할 수 없다. 관리자가 아무도 없는 새벽 시간에 장애가 발생할 수도 있다. HA는 관리자가 없을지라도, 운영 서버의 장애를 모니터링해 대기 서버가 처리할 수 있도록 함으로써 중단 없이 서비스를 제공하는 역할을 한다.
HA는 이와 같이 계획되지 않은 다운타임을 위해 구성하는 것이지만, 더불어 계획된 다운타임에 대해서도 이용할 수 있다. 운영 서버 작업 시, HA를 이용해 대기 서버로 쉽고 빠르게 서비스를 이관할 수 있다. 이렇듯 HA는 서비스 이관의 편리함을 제공한다.
과거에는 HA에 투자하는 것을 과잉 투자라고 생각했다. 그러나 HA는 이제 선택 사항이 아니다. e비즈니스 환경에서 기업이 살아남기 위한 필수 사항이 된 것이다.

가용성의 수준
가용성 100%는 이상적인 수치이다. 아무리 견고한 시스템이라도 장애가 발생할 수 있는 소지가 분명히 있다. 그림 2에 보면 99.99%인 경우, 1년 중 발생하는 다운타임은 총 52분임을 알 수 있다.
그러나 HA 솔루션에도 많은 진보가 있었다. HA 솔루션의 기술 진보 과정을 살펴보면 다음과 같이 나눌 수 있다.

1세대: 시스템 장애만을 감지하는 수준
시스템의 하드웨어 장애가 발생할 경우에만 장애를 감지해 대기 서버로 서비스를 이관한다. 그러나 애플리케이션의 장애는 감지하지 못하는 단점이 있었으며 99.5% 정도의 가용성을 제공한다.

2세대: 시스템 장애뿐만 아니라 서비스 레벨까지 감지
하드웨어 장애뿐 아니라 애플리케이션의 장애까지 감지해 서비스를 이관한다. 현재 상용 제품들이 대부분 2세대에 속한다. 대표 제품으로는 레가토, 베리타스 클러스터를 들 수 있으며 99.99% 정도의 가용성을 보장한다.

3세대: 커넥션 손실이 없는 차세대 HA
2세대 HA는 운영 서버 장애 시 커넥션 손실이 발생한다. 그리고 대기 서버가 서비스를 시작하면 새로운 커넥션을 형성해야 한다. 차세대 HA는 커넥션 손실이 없는 100% 가용성에 가장 근접한 HA가 될 것이다.

현재 대부분의 HA 제품은 2세대로서, 가용성 수준은 99.99%에 달한다. 2세대 제품에 대해서는 다음 회에서 고가용성의 다양한 구현 방법을 논하면서 설명할 계획이며, 100%를 지향하는 차세대 HA는 마지막 회에서 더욱 자세히 다룰 예정이다.

HA 구현 효과
HA 구현의 가장 큰 효과는 무엇보다 중단 없는 서비스를 가능하게 해준다는 것이다. 이와 더불어 HA는 시스템 관리자들의 부담을 가볍게 해준다. 시스템 관리자들의 어깨를 짓누르고 있는 것은 장애에 대한 부담이다. 장애 발생 시 서비스 중단에 대한 책임을 져야 하고, 시스템을 복구하는 것 또한 관리자들의 몫이다.
HA를 구현하면 관리자들의 짐이 줄어든다. 장애가 발생하더라도 대기 서버가 즉시 서비스를 수행하게 될 것이며, 본래 운영 서버를 수리할 시간 여유가 생기기 때문이다.

다양한 HA 제품들
현재 상용되고 있는 HA 제품들은 크게 하드웨어 업체에서 제공하는 것과 서드파티 제품으로 구분할 수 있다.
각 하드웨어 업체들은 자체 HA를 가지고 있다. 하드웨어 업체의 HA는 해당 하드웨어와 해당 OS에 종속적이다. 반면에, 서드파티 제품은 하드웨어 업체나 OS 플랫폼에 독립적이며 애플리케이션 레벨에서 동작하기 때문에 제품이 가볍다. 또한 이기종 OS 환경 하에서도 단일 콘솔로 관리할 수 있다는 장점이 있다.

HA가 관리하는 장애 포인트
HA는 어떠한 상황을 장애로 판단하고 대기 서버를 구동해 서비스를 하도록 하는 것일까?
HA가 관리하는 포인트는 크게 세 가지로 나누어 볼 수 있다.
- 하드웨어 장애: 전원 공급, CPU, 메모리, HDD 장애
- 네트워크 장애: 네트워크 카드, LAN 케이블 장애
- 프로세스 장애: DB 및 각종 애플리케이션 장애
HA는 계속해서 상대방 시스템의 상태를 모니터링하고 있다가 이와 같은 장애가 발생할 경우 자동으로 조치하게 된다. 이를 통해 서비스를 지속적으로 제공할 수 있도록 해준다.
HA는 양쪽 서버에 각각 설치하게 된다(그림 7).
각 시스템을 보면 맨 하단에 OS가 있고, 그 위에 애플리케이션이 있다. HA는 맨 상단에서 시스템과 애플리케이션을 모니터링한다. Heartbeat는 두 서버 간의 HA 통신 라인이다. 서로의 상태를 모니터링하는 중요한 연결 라인이다.
그림 8에 HA 절체(Failover) 원리에 대해 도시했다.
활성(Active)-대기(Standby) 상태의 두 시스템이 있다. 활성 서버에 장애가 발생했을 때, 모든 서비스가 대기 서버에서 구동돼 서비스가 이루어진다. 물론 HA가 활성 서버의 장애를 자동으로 감지해 대기 서버로 넘기는 것이다. 이런 현상을 절체, 페일오버(Failover), 스위치오버(Switchover)라고 말한다.
HA는 첫째, 서비스 IP인 10.10.10.3을 넘겨준다. 클라이언트에서는 10.10.10.3 IP만 찾으므로 대기 시스템으로 연결된다.
둘째, 스토리지의 파일 시스템인 /data를 마운트한다. 이 안에 모든 데이터가 들어있다.
셋째, DB 및 각종 애플리케이션을 구동한다. 애플리케이션까지 구동돼야만 온전한 서비스를 할 수 있게 된다.

지금까지 HA의 정의와 필요성, 구축 효과 등에 대해 알아보았다. HA의 도입으로 서비스의 가용성을 극대화할 수 있다. 언제 장애가 발생하더라도 HA가 자동으로 대처해 주기 때문에, 기업들은 업무의 지속성을 유지할 수 있으며, 관리자들은 장애에 대한 공포를 덜 수 있게 된다.

[Linux] php - apache config

apache
./configure -prefix=/usr/local/httpd -enable-mods-shared=most -enable-modules=so -with-mpm=worker -enable-module=vhost_alias

php
./configure -with-apxs2=/usr/local/httpd/bin/apxs -with-config-file-path=/usr/local/httpd/conf -with-exec-dir=/usr/local/httpd/bin -enable-track-vars -enable-trans-sid

[Linux] vi edit

^M 문자 제거하기(vi편집기)


다음은 텍스트 파일에서 ^M 문자를 제거하는 방법이다.

tr -d '^M' < inputfile > outputfile
'^M'문자를 어떻게 명령행(command line)에 입력할 것인가?
CTRL 키를 누른 상태에서 v와 m을 누른다.

이 팁은 피씨(IBM호환기종:일반적으로 말하는 피씨)에서 저장된
파일을 Unix상에서 읽어왔을 때 보이는 ^M 문자를 제거하는 팁이다.
보통 LF/CR이라고 하는데 Line Feed/Carrage Return의 약자이다.
Line Feed 같은 경우 한줄 아래로 이동하는 것이고 Carrage Return의
경우 커서를 행의 맨 처음으로 이동 시키는 것이다. 엔터를 입력하면
이 문자를 얻을 수 있다.



vi에서 g/^M/s///g 또는 %s/^M//g를 실행한다.
이 때 ^M은 Ctrl+V,M으로 입력.

[Linux] rpm package

rpm -Uvh --force gcc-3.4.4-2.i386.rpm



[root@knh rpm]# rpm -q binutils compat-db control-center gcc gcc-c++ glibc glibc-common \ gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver
binutils-2.15.92.0.2-21
compat-db-4.1.25-9
- package control-center is not installed
gcc-3.4.6-3
gcc-c++-3.4.6-3
glibc-2.3.4-2.25
glibc-common-2.3.4-2.25
- package is not installed
- package gnome-libs is not installed
libstdc++-3.4.6-3
libstdc++-devel-3.4.6-3
make-3.80-6.EL4
pdksh-5.2.14-30.3
- package sysstat is not installed
- package xscreensaver is not installed


gcc-3.4.4-2.i386.rpm
------------------------------------------
cpp = 3.4.4-2 is needed by gcc-3.4.4-2.i386
gcc = 3.4.6-3 is needed by (installed) gcc-c++-3.4.6-3.i386
gcc = 3.4.6-3 is needed by (installed) gcc-g77-3.4.6-3.i386
gcc = 3.4.6-3 is needed by (installed) gcc-java-3.4.6-3.i386


gcc-c++-3.4.6-3.i386
-----------------------------------------
error: Failed dependencies:
gcc = 3.4.4-2 is needed by gcc-c++-3.4.4-2.i386
libstdc++ = 3.4.4 is needed by gcc-c++-3.4.4-2.i386
libstdc++-devel = 3.4.4 is needed by gcc-c++-3.4.4-2.i386

libstdc++-3.4.4-2.i386.rpm
-----------------------------------------
error: Failed dependencies:
libstdc++ = 3.4.6-3 is needed by (installed) libstdc++-devel-3.4.6-3.i386
libstdc++ = 3.4.6 is needed by (installed) gcc-c++-3.4.6-3.i386

libstdc++-devel-3.4.4-2.i386.rpm
-----------------------------------------
error: Failed dependencies:
libstdc++ = 3.4.4-2 is needed by libstdc++-devel-3.4.4-2.i386
libstdc++-devel = 3.4.6 is needed by (installed) gcc-c++-3.4.6-3.i386

설치하기

설치방법은 순서에 의해서 따라서 한다.

2.1 glibc2.1 패치하기

2.1.1 root 권한한으로

#tar xvfz i386-glibc-2.1-linux.tar.gz 실행하여 압축을 해제하는데 문제는

/usr/386-glibc-2.1-linux 이런식으로 압축을 풀게되어서 풀린 폴더를 /usr/밑으로 옮긴다

#cd /usr/bin

#mkdir saved

#mv gcc cc ld saved

모두 link 파일을 새롭게 만든 saved 폴더로 옮긴다.

#/usr/bin gcc,cc,ld 파일 bin 디렉토리에는 없기 때문에 압축을 풀었던 곳에 link를 걸어

준다.

#ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-gcc cc

#ln -s cc gcc

#ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-ld ld

#cd /usr/lib

#mkdir saved

#mv libc.so libdl.so libm.so libpthread.so saved

#mv libc.a libdl.a libm.a libpthread.a saved

[Linux] ntp (Network Time Protocol)

/etc/ntp.conf 파일 수정

server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org



[root@knh qmail]# ntpdate time.kriss.re.kr
10 Mar 16:31:10 ntpdate[24894]: the NTP socket is in use, exiting


------------------------------------------------------------------------------------------------

SRDB ID: 20748

개요: NTP 정보와 설치

세부 설명:

차례
___________________

1. NTP 개념
2. NTP 서버 설치 - 운영 모드 선택
3. NTP 클라이언트 설치
4. ntpdate 명령의 사용
5. ntpq 명령의 사용
6. 유용한 디버그 옵션
7. 일반적인 문제와 알려진 버그
8. NTP에 대한 추가 자료






1. NTP 개념
_____________


NTP는 컴퓨터 클라이언트나 서버의 시간을 다른 서버나 라디오 또는 위성 수신기와 같은 참조할 수 있는 타임 소스 또는 모뎀에 동기화하는 데 사용됩니다.
Coordinated Universal Time(UTC)에 동기화된 프라이머리 서버와 관련하여, NTP는 대개 LAN 상에서는 1 ms 이내, WAN 상에서는 10ms 이내의 클라이언트 정확성을 제공합니다.
NTP를 주 서버에 적용하려면 라디오나 위성 수신기 또는 모뎀이 필요합니다.

시간은 NTP 서버 계층을 통해 분배되는 데, 각 서버는 파일의 최상단에 위치하고 라디오 클럭과 같은 외부 타임 소스(대개 라디오 클럭)에 대한 액세스를 갖고 있는 Primary(stratum 1) 서버를 채택합니다.
stratum-2 서버는 stratum-1 서버로부터 시간을 얻고, stratum-3 서버는 stratum 2 서버로부터 시간을 얻는 식으로 진행됩니다.
동기화 루프가 장기화되는 것을 피하려면 strata의 수를 15로 제한하십시오.
네트워크가 격리되어 있어서 인터넷을 통해 다른 사용자의 서버에 접근할 수 없는 경우, 라디오 클럭을 구입하면 좋습니다. 다른 방법은, 알려진 프라이머리 또는 세컨더리 NTP 서버 중 하나에 맞추어 서버를 구성하는 것입니다.

동기화 서브넷의 각 클라이언트(서버 자체일 수도 있음)는 사용 가능한 서버 중 정확히 하나만을 선택하여 동기화하는데, 대개의 경우 자신이 접근할 수 있는 최하위 stratum 서버 중에서 택하게 됩니다. 이것은 최적의 구성이라 할 수 없으므로 NTP는 다른 전제 하에서도 운영됩니다. 다시 말하면, 각 서버의 시간은 다소 부정확할 수 있습니다. 실제로 NTP는 보다 낮은 스트라텀의 여러 시간 소스(최소 세 군데)에 접근하려고 합니다. 이렇게 하면 계약 알고리즘을 적용하여 이들 중 어느 한 곳에서 발생하는 이상 현상을 탐지할 수 있기 때문입니다. 일반적으로 모든 서버가 계약 하에 있을 경우, NTP는 선택할 서버가 최하위 stratum 인지, 가장 가까운 것인지(네트워크 지연 측면에서), 그리고 정밀성이 있는지 등의 요건과 다른 고려사항을 감안하며 이들 중 최선의 서버를 선택합니다.

마지막으로, 연관 모드의 문제가 있습니다. 각 서버 간의 연관에 따라 선택 가능한 여러 가지 모드가 있습니다. 연관을 symmetric-active 모드로 구성하면(일반적으로 구성 파일에서 peer declaration으로 표시됨), 필요에 따라 원격 서버로부터 시간을 얻고, 원격 서버에게 시간을 제공하고자 한다는 것을 원격 서버에 지시할 수 있습니다. 이 모드는 다양한 네트워크 경로를 통해 상호 연결된 다수의 중복된 시간 서버가 관련된 구성에 적합하며, 오늘날 인터넷 상에서 운영되는 대부분의 stratum - 1 및 stratum - 2 서버에 해당합니다.
연관을 클라이언트 모드로 구성하면(일반적으로 구성 파일에서 server declaration으로 표시됨), 사용자가 원격 서버로부터 시간을 얻으려 하지만 원격 서버에 시간을 공급하려 하지 않는 경우를 나타냅니다. 이 모드는 다른 로컬 클라이언트에게 동기화를 제공하지 않는 파일 서버와 워크스테이션 클라이언트에 적합합니다. 정확성과 신뢰성 요건이 엄격하지 않은 경우, broadcast나 multicast 모드를 사용하도록 클라이언트를 구성할 수 있습니다. 최고의 정확성과 신뢰성이 요구되는 경우, 클라이언트와 서버는 각각 클라이언트나 서버 또는 대칭 모드로 운영합니다.






2. NTP server 설치
___________________________


1. 다음과 같이 /etc/inet/ntp.server를 /etc/inet/ntp.conf로 복사하십시오.

# cp /etc/inet/ntp.server /etc/inet/ntp.conf

2. ntp.conf 파일을 편집하십시오.

이 파일에는 명확한 설명을 위해 많은 코멘트를 추가했습니다.
기본 파일에는 코멘트가 많지 않습니다.

#----- start of ntp.conf file ---------------------

# @(#)ntp.server 1.4 97/05/05 SMI
#
# /etc/inet/ntp.server
#
# /etc/inet/ntp.conf로 복사해서 편집할 수 있는 예제 파일입니다.
# 이 파일은 외부 하드웨어 클럭에 따라 로컬 클럭을 동기화하고
# NTP 멀티캐스트 네트워크 상에서
# 자신을 발표하는 서버를 위한 구성 탬플릿을 제공합니다.
#
# 다음 클럭 장치에 대해서는 RFC 1305를 참조하십시오.
# 이것은 외부 클럭 장치입니다. 다음 장치들은
# xntpd 3.4y에 의해 인식됩니다.
#
# XType 장치 이름 설명
# -------------------------------------------------------
# 1 (none) LOCAL Undisciplined Local Clock
# 2 trak GPS_TRAK TRAK 8820 GPS Receiver
# 3 pst WWV_PST PSTI/Traconex WWV/WWVH Receiver
# 4 wwvb WWVB_SPEC Spectracom WWVB Receiver
# 5 goes GPS_GOES_TRUE TrueTime GPS/GOES Receivers
# 6 irig IRIG_AUDIO IRIG Audio Decoder
# 7 chu CHU Scratchbuilt CHU Receiver
# 8 refclock- GENERIC Generic Reference Clock Driver
# 9 gps GPS_MX4200 Magnavox MX4200 GPS Receiver
# 10 gps GPS_AS2201 Austron 2201A GPS Receiver
# 11 omega OMEGA_TRUE TrueTime OM-DC OMEGA Receiver
# 12 tpro IRIG_TPRO KSI/Odetics TPRO/S IRIG Interface
# 13 leitch ATOM_LEITCH Leitch CSD 5300 Master Clock Controller
# 14 ees MSF_EES EES M201 MSF Receiver
# 15 gpstm GPS_TRUE TrueTime GPS/TM-TMD Receiver
# 17 datum GPS_DATUM Datum Precision Time System
# 18 acts NIST_ACTS NIST Automated Computer Time Service
# 19 heath WWV_HEATH Heath WWV/WWVH Receiver
# 20 nmea GPS_NMEA Generic NMEA GPS Receiver
# 22 pps ATOM_PPS PPS Clock Discipline
# 23 ptbacts PTB_ACTS PTB Automated Computer Time Service
#
# 일부 장치는 "fudge" 인자의 혜택을 받습니다. xntpd
# 문서를 참조하십시오.

# 피어 또는 서버입니다. "XType"을
# 위 테이블의 값으로 교체하십시오.

#로컬 클럭 장치를 추가하는 경우,
#해당 드라이버는 다음과 같은 지침에 의해 식별됩니다.
#서버 127.127.XX.0에서 127.127는 NTP에게 이것은 원격 네트워크 피어가 아닌
#로컬임을 지시하고, XX는 NTP distribution에서 설명된
#클럭 유형이라는 것을 지시합니다. 이러한 config file의 제한 지침은
#이 호스트가 지정된 두 IP 주소에만 이야기를 하며
#그 밖의 다른 곳은 신뢰하지 않으므로 어디에도
#시간을 제공하지 않는다고 설명하고 있습니다.


#다음 세 줄은 기본값으로 제공되는 것이고 사용자의 설치에 맞추어 변경하십시오.


server 127.127.XType.0 prefer
fudge 127.127.XType.0 stratum 0

broadcast 224.0.1.1 ttl 4



#세 가지 유형의 시간 서버
# 1. peer host_address [ key # ] [ version # ] [ prefer ]
# 로컬 서버가 호스트 주소로서 지정된 원격 서버와
# 함께 symmetric active 모드로 운영된다는 것을 지정합니다.
# 즉, 로컬 서버는 원격 서버에 맞추어 동기화할 수 있습니다.
# 2. server host_address [ key # ] [ version # ] [ prefer ] [ mode # ] server
# 로컬 서버가 command에서 이름이 지정된
# 원격 서버와 함께 "client" 모드로 운영된다는 것을
# 지정합니다. 이 모드에서 로컬 서버는 원격 서버에 맞추어
# 동기화될 수 있지만, 원격 서버는
# 로컬 서버에 동기화할 수 없습니다.
# 3. broadcast host_address [ key # ] [ version # ] [ ttl # ]
# 로컬 서버가 "broadcast" 모드로 운영된다는 것을
# 지정합니다. 이 모드에서 로컬 서버는 command에서
# 지정된 broadcast/multicast 주소의 클라이언트 무리에게
# 정기적인 broadcast 메시지를 전송합니다.
#
# key 주소에 전송된 모든 패킷이
# 지정된 키 번호를 사용하여 암호화된
# 인증 필드를 포함한다는 것을 나타냅니다. 이
# 번호의 범위는 unsigned 32 비트 정수입니다.
# 기본값으로 암호화 필드는
# 포함되어 있지 않습니다.
# version outgoing NTP 패킷에 사용되는 버전 번호를
# 지정합니다. Version 1, 2 및 3을 선택할 수
# 있습니다. 기본값은 버전 3입니다.
# prefer 호스트를 선택된 호스트로 표시합니다.
# 동기화를 위해 다른 비교 가능한 호스트보다 이
호스트가 선택됩니다.
# 전체 목록은 xntpd에 관한 매뉴얼 페이지를 참조하십시오.



NTP 주 stratum 1 서버에 대한 ntp.conf 파일 예제:


server 127.127.5.0
fudge 127.127.5.0 stratum 1




피어 모드의 NTP 서버에 대한 ntp.conf 파일 예제:

peer ntppeerserver





서버 모드의 NTP 서버에 대한 ntp.conf 파일 예제:


server sometimeserver prefer
server sometimeserver
server sometimeserver
# 언제나 로컬 클럭으로 되돌아갈 수 있습니다.
server 127.127.1.0
fudge 127.127.1.0 stratum 9




자신의 ntp.conf 파일을 생성했다면, 이를 저장한 다음 xntpd daemon을 시작하십시오.
# /usr/lib/inet/xntpd &




3. NTP 클라이언트 설치
____________________________


1. /etc/inet/ntp.client에서 /etc/inet/ntp.conf로 복사하십시오.

# cp /etc/inet/ntp.client /etc/inet/ntp.conf




기본 ntp.client 파일은 multicast를 사용하여 NTP 업데이트를 수신합니다. NTP 클라이언트가 이러한 업데이트를 수신할 수 있는 장소를 제한하려는 경우, 이것을 broadcast로 변경하십시오. (Broadcast 패킷은 다른 서브넷에 전달되지 않는 반면 multicast 패킷은 전달됩니다).


#
# /etc/inet/ntp.client
#
# /etc/inet/ntp.conf로 복사할 수 있는 예제 파일. 이 파일은
# 서버가 ntp multicast 네트워크 상에서 NTP 패킷을 제공하도록
# 수동적으로 기다리는 호스트를 위한 구성을 제공합니다.
#

multicastclient 224.0.1.1



2. xntpd daemon을 시작하십시오.

# /usr/lib/inet/xntpd -m &

(NTP 업데이트를 수신하는 방법으로 broadcast를 사용하는 경우 인수로서 -b를 사용하므로, xntpd daemon은 -m 인수와 함께 시작합니다.)





4. ntpdate 명령의 사용.
_____________________________



ntpdate 유틸리티가 로컬 날짜와 시간을 설정합니다. 이 유틸리티는 정확한 시간을 결정하기 위해, 인수로 주어진 호스트 상에서 Network Time Protocol(NTP) 서버를 폴링합니다. 이 유틸리티는 로컬 호스트에서 루트로 실행되어야 합니다. 이 유틸리티는 각 서버로부터 샘플을 얻어 표준 NTP 클럭 필터와 선택 알고리즘을 적용하여 이들 중 최선의 값을 선택합니다.

이 유틸리티는 daemon 실행의 대안으로서 cron(1M)으로부터 정기적으로 실행할 수 있습니다. 한 두 시간마다 한번씩 실행하면 충분히 정확한 시간을 얻을 수 있으므로 클럭 스테핑이 필요하지 않습니다.


이미 xntpd daemon을 실행하고 있다면 ntpdate 명령을 사용할 수 없습니다.
이 명령을 실행하려고 하면 다음과 같은 오류가 발생합니다.


# ntpdate champ
23 Sep 14:55:52 ntpdate[19780]: the NTP socket is in use, exiting


또한 ntpdate 명령을 실행하려면 루트 사용자가 되어야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

% ntpdate champ
23 Sep 14:44:36 ntpdate[19743]: bind() fails: Permission denied


ntpdate 명령으로 서버를 지정할 경우, 이름을 IP 주소로 전환할 수 있도록 사용자의 naming service를 반드시 실행하십시오. 그렇지 않으면 다음과 같은 오류가 발생합니다.


# ntpdate tiger
23 Sep 15:20:43 ntpdate[20041]: no server suitable for synchronization found


이 예에서 ntp 서버 "jedi"를 동기화되는 서버로 지정합니다.
# ntpdate jedi
23 Sep 17:12:21 ntpdate[20963]: adjust time server 129.148.192.147 offset
0.001422 sec




5. ntpq 명령의 사용
___________________________

ntpq는 현재 상태에 대해, 권장된 NTP 모드 6 제어 메시지 형식을 수행하는 NTP 서버에게 질의합니다. 현재 상태의 변경을 요청할 수도 있습니다. 프로그램은 대화형 모드로 실행되거나 명령줄 인수를 사용하여 제어될 수 있습니다. raw and pretty-printed output 옵션을 사용할 수 있게 하면서 임의 변수에 대한 읽고 쓰기 요청을 조립할 수 있습니다. ntpq는 서버에 복수 쿼리를 전송함으로써 피어 리스트를 일반 형식으로 얻고 인쇄할 수 있습니다.


NTP 서버에게 피어 리스트에 관해 질의하는 방법:

# ntpq -p jedi
remote refid st t when poll reach delay offset disp
==============================================================================
*eastpager1.East dollar.East.Sun 3 u 97 64 376 2.03 4.564 2.33
LOCAL(0) LOCAL(0) 5 l 19 64 377 0.00 0.000 10.01
NTP.MCAST.NET 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
255.255.255.255 0.0.0.0 16 - - 64 0 0.00 0.000 16000.0
+sunswe.Sweden.S carbon.UK.Sun.C 3 u 48 64 377 156.80 6.367 0.41
+canadamail1.Can franc.East.Sun. 3 u 12 64 377 29.48 13.528 29.65
-cosmo.Eng.Sun.C rolex.East.Sun. 2 u 98 128 377 84.08 -1.069 0.87
-centralpager1.C venus.EBay.Sun. 3 u 41 128 377 68.73 -19.219 6.70


remote - 원격 피어
refid - 피어가 동기화되는 호스트
st - stratum 번호
t - 유형, 즉 unicast, mulitcast, local (- = 알 수 없음)
poll - 초 단위 폴링 간격
reach - 도달가능성 레지스터


* 원격에서 현재 선택된 피어를 나타냅니다.
+ 호스트가 동기화에 대한 수락 가능한 피어이지만 수락되지 않았음을 나타냅니다
- 수락 불가능




6. 유용한 디버깅
_________________________


"server" 모드(연관)를 사용하는 경우, ntp.conf 파일에 최소한 세 개의 다른 서버를 두는 것이 바람직합니다. 구성하는 서버가 인터넷 상에서 멀리 떨어져 있고 Firewall을 설치했다면, Firewall 상에서 사용자의 NTP 서버로부터 포트 123 NTP 서버가 들어오고 나갈 수 있도록 허용하는 규칙을 작성하십시오. 일반적으로 NTP 서버를 ntp.conf에 나열된 시간 서버에 동기화하는 데에는 약 5분 정도가 소요됩니다. 동기화가 끝날 때까지 다른 NTP 클라이언트에게 broadcast/multicast NTP 패킷을 보내지 마십시오. 일반적으로 이들 패킷은 64초 간격마다 전송됩니다.

xntpd와 ntpdate 명령은 모두 debug 옵션을 가지고 있지만, ntpdate -d를 사용하는 경우 "작동은 끝까지 수행되지만" 실제로 네트워크 폴링은 수행하지 않으므로 주의해야 합니다.


다음 예에서는 ntp.conf에 대해 ntp.client를 사용하고 xntpd -d를 활성화했습니다.

# /usr/lib/inet/xntpd -d &
20743
# Solaris tick = 10000
kernel vars: tickadj = 625, tick = 10000
adj_precision = 1, tvu_maxslew = 61875, tsf_maxslew = 0.0fd70a37
create_sockets(123)
bind() fd 19, family 2, port 123, addr 00000000, flags=1
bind() fd 20, family 2, port 123, addr 7f000001, flags=0
bind() fd 21, family 2, port 123, addr 8194c097, flags=1
init_io: maxactivefd 21
report_event: system event 'event_restart' (0x01) status 'sync_alarm,
sync_unspec,
1 event, event_unspec' (0xc010)
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147
input_hander: fd=19 length 48 from 8194c093 129.148.192.147
input_handler: fd=19 length 48 from 8194c093 129.148.192.147

(129.148.192.147 is the host "jedi")

또한 multicast나 broadcast NTP 패킷을 기대하면서 동시에 포트 123(ntp) 상에서 ntp 클라이언트에 대한 snooping을 시작했습니다.

# snoop -d le0 port 123
device /dev/le (promiscuous mode) 사용
slave-192-1 -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:42:15 1999)
champ -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:42:46 1999)
jedi -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:42:49 1999)
jedi -> BROADCAST NTP broadcast (Thu Sep 23 16:42:50 1999)
slave-192-1 -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:43:19 1999)
champ -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:43:50 1999)
jedi -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:43:53 1999)
jedi -> BROADCAST NTP broadcast (Thu Sep 23 16:43:54 1999)
slave-192-1 -> NTP.MCAST.NET NTP broadcast (Thu Sep 23 16:44:23 1999)




7. 알려진 버그
______________


4060650 xntpd가 루핑되면서, cpu에 부하를 주고 메모리도 소진하여 컴퓨터를 사용할 수 없게 만듭니다.

4097366 외부 클럭 하드웨어는 xntpd에 의해 지원되지 않습니다.

4192098 xntpd는 일부 Ultra 5에서 "c011 sync_alarm"과 동기화되지 않습니다.

4130698 Solaris 2.6에 대한 ntp 설치/업그레이드 지시사항

4061948 SPARC 전용: 2.5.1 SUNWxntp Package는 Solaris 2.6과 호환되지 않습니다.
(E10k 시스템 전용)







8. NTP에 대한 추가 자료
________________________________


http://www.eecis.udel.edu/~ntp/
http://www.con.wesleyan.edu/~triemer/network/ntp/ntp_tcp.html (contains RFC
list)

[Linux] iostat lsof netstat top vmstat uptime

▶netstat
라우팅 테이블이나 활성화되어 있는 네트워크 연결같은 네트워크 통계와 정보를 보여 줍니다. 이 유틸리티는 /proc/net에서 정보를 얻어 옵니다.
**********************************************************************************************
# netstat -nap : 열려 있는 모든 포트
# netstat -l 또는 netstat nap | grep LISTEN : LISTEN 되는 모든 포트
# netstat -nap | grep ESTABLISHED | wc-l : 모든 서비스 동시 접속자 수
# netstat -nap | grep :80 | grep ESTABLISHED | wc-l : 모든 서비스 동시 접속자 수

포트 스캔 명령어

# nmap -sT -p 1-65535 localhost :TCP 포트 확인 방법
# nmap -sU -p 1-65535 localhost :UDP 포트 확인 방법
# nmap -sX -p 80,7003,7001 192.168.1.* : 네트워크에 열린 포트 확인



usage: netstat [-veenNcCF] [] -r netstat {-V|--version|-h|--help}
netstat [-vnNcaeol] [ ...]
netstat { [-veenNac] -i[] | [-cnNe] -M | -s } [delay]

라우터 -r, --route display routing table
인터페이스 -i, --interfaces=[] display interface table
그룹간 -g, --groups display multicast group memberships
통계 -s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections
-v, --verbose be verbose
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-c, --continuous continuous listing

-l, --listening display listening server sockets
-a, --all, --listening display all sockets (default: connected)
-o, --timers display timers
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-T, --notrim stop trimming long addresses

: Name of interface to monitor/list.
={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom
=Use '-A ' or '--'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
**********************************************************************************************

▶uptime
시스템이 얼마나 오랫동안 돌고 있었는지 관련 통계와 함께 보여줍니다.
**********************************************************************************************
현재시간 돌고있는날짜 사용자 평균전력
ex) 09:29:49 up 2 days, 22:58, 1 user, load average: 0.00, 0.00, 0.00
09:29:16 up 39 days, 1:28, 5 users, load average: 0.00, 0.07, 0.06
**********************************************************************************************

▶top
cpu를 집중적으로 사용하는 프로세스를 중심으로 최신 정보를 계속 보여 줍니다.
-b 옵션은 결과를 텍스트 모드로 보여 주기 때문에 파싱을 하거나 스크립트에서 접근할 수가 있습니다.
**********************************************************************************************
상위 uptime 정보 출력 됨.
top - 11:06:20 up 3 days, 35 min, 3 users, load average: 0.15, 0.05, 0.01
Tasks: 65 total, 1 running, 63 sleeping, 1 stopped, 0 zombie
Cpu(s): 1.0% us, 3.7% sy, 0.0% ni, 0.0% id, 95.0% wa, 0.3% hi, 0.0% si
Mem: 515612k total, 406316k used, 109296k free, 101880k buffers
Swap: 1020088k total, 0k used, 1020088k free, 252884k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10566 root 18 0 3580 560 424 D 4.7 0.1 0:00.44 find
10126 root 16 0 2472 944 752 S 0.3 0.2 0:01.60 top
10352 root 16 0 2688 956 760 R 0.3 0.2 0:00.57 top
1 root 16 0 2756 552 472 S 0.0 0.1 0:00.82 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 events/0
4 root 5 -10 0 0 0 S 0.0 0.0 0:00.01 khelper
5 root 15 -10 0 0 0 S 0.0 0.0 0:00.00 kacpid
20 root 5 -10 0 0 0 S 0.0 0.0 0:00.00 kblockd/0
38 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pdflush
39 root 15 0 0 0 0 S 0.0 0.0 0:00.02 pdflush
41 root 12 -10 0 0 0 S 0.0 0.0 0:00.00 aio/0
21 root 15 0 0 0 0 S 0.0 0.0 0:00.05 khubd
40 root 15 0 0 0 0 S 0.0 0.0 0:00.14 kswapd0
187 root 25 0 0 0 0 S 0.0 0.0 0:00.00 kseriod
310 root 15 0 0 0 0 S 0.0 0.0 0:01.45 kjournald
1321 root 6 -10 2452 456 380 S 0.0 0.1 0:00.03 udevd
1700 root 6 -10 0 0 0 S 0.0 0.0 0:00.00 kauditd
1767 root 6 -10 0 0 0 S 0.0 0.0 0:00.00 kmirrord
1955 root 19 0 0 0 0 S 0.0 0.0 0:00.00 kjournald
1956 root 15 0 0 0 0 S 0.0 0.0 0:00.00 kjournald
1957 root 15 0 0 0 0 S 0.0 0.0 0:00.00 kjournald
1958 root 15 0 0 0 0 S 0.0 0.0 0:00.19 kjournald
1959 root 15 0 0 0 0 S 0.0 0.0 0:00.25 kjournald
2609 root 16 0 2868 544 456 S 0.0 0.1 0:06.80 syslogd
2613 root 16 0 2720 380 316 S 0.0 0.1 0:00.02 klogd
2642 rpc 15 0 3544 548 452 S 0.0 0.1 0:00.00 portmap
2662 root 15 0 2916 724 624 S 0.0 0.1 0:00.00 rpc.statd
2690 root 16 0 4220 340 172 S 0.0 0.1 0:00.00 rpc.idmapd
2767 root 15 0 2664 508 300 S 0.0 0.1 0:00.16 smartd
2777 root 19 0 2952 440 368 S 0.0 0.1 0:00.00 acpid
2789 root 16 0 10332 1964 1512 S 0.0 0.4 0:00.02 cupsd
2865 root 16 0 4256 1136 836 S 0.0 0.2 0:01.67 sshd
2880 root 16 0 2284 804 672 S 0.0 0.2 0:00.01 xinetd
2900 root 16 0 8404 2020 984 S 0.0 0.4 0:00.05 sendmail
2908 smmsp 16 0 7780 1632 812 S 0.0 0.3 0:00.01 sendmail
2919 root 16 0 2172 352 280 S 0.0 0.1 0:00.00 gpm
**********************************************************************************************

▶vmstat
가상 메모리 통계를 보여줌.
**********************************************************************************************
usage: vmstat [-V] [-n] [delay [count]]
-V prints version.
-n causes the headers not to be reprinted regularly.
-a print inactive/active page stats.
-d prints disk statistics
-D prints disk table
-p prints disk partition statistics
-s prints vm table
-m prints slabinfo
-S unit size
delay is the delay between updates in seconds.
unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)
count is the number of updates.
**********************************************************************************************

▶lsof
현재 열려 있는 파일들을 보여줍니다. 이명령어는 현재 열려 있는 모든 파일들에 대한 자세한 표와 각각의 파일에 대한 소유자, 크기, 관련 프로세스등의 정보를 보여 줍니다. 당연히, lsof의 출력은 파이프 grep awk로 넘겨서 파싱해서 분석할 수 있다.
************************************************************************************************************************
프로세스아이디/ 사용자 / 확장자
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 2126 w3sli cwd DIR 9,0 4096 2 /
httpd 2126 w3sli rtd DIR 9,0 4096 2 /
httpd 2126 w3sli txt REG 9,12 2197124 2572313 /app1/web/apache2054/bin/httpd
httpd 2126 w3sli mem REG 9,0 214312 589848 /lib/ld-2.3.2.so
httpd 2126 w3sli mem REG 9,12 382636 1409276 /app1/web/apache2054/lib/libaprutil-0.so.0.9.6
httpd 2126 w3sli mem REG 9,0 48400 1261650 /usr/lib/libgdbm.so.2.0.0
httpd 2126 w3sli mem REG 9,0 1812176 589887 /lib/libdb-4.1.so
httpd 2126 w3sli mem REG 9,0 274928 1261648 /usr/lib/libexpat.so.0.4.0
httpd 2126 w3sli mem REG 9,12 553580 1409270 /app1/web/apache2054/lib/libapr-0.so.0.9.6
httpd 2126 w3sli mem REG 9,0 85176 933951 /lib/tls/librtkaio-2.3.2.so
httpd 2126 w3sli mem REG 9,0 621352 933946 /lib/tls/libm-2.3.2.so
httpd 2126 w3sli mem REG 9,0 41112 589857 /lib/libcrypt-2.3.2.so
httpd 2126 w3sli mem REG 9,0 177640 589863 /lib/libnsl-2.3.2.so
httpd 2126 w3sli mem REG 9,0 157056 933948 /lib/tls/libpthread-0.60.so
httpd 2126 w3sli mem REG 9,0 28536 589859 /lib/libdl-2.3.2.so
httpd 2126 w3sli mem REG 9,0 2789888 933944 /lib/tls/libc-2.3.2.so
httpd 2126 w3sli mem REG 9,12 2470954 1916946 /app1/was/bea/weblogic81/server/lib/linux/ia64/mod_wl_20.so
httpd 2126 w3sli mem REG 9,12 214890 2277776 /app1/web/apache2054/modules/mod_security.so
httpd 2126 w3sli mem REG 9,12 53394 2277604 /app1/web/apache2054/modules/mod_url.so
httpd 2126 w3sli mem REG 9,0 106864 589869 /lib/libnss_files-2.3.2.so
************************************************************************************************************************
logname
현재 사용자의 로그인 이름을 /var/run/utmp에서 찾아서 보여줍니다. 위에서 설명한 whoami와 거의 동일한 명령입니다.

last
사용자가 마지막으로 로그인 한 시간을 /var/log/wtmp에서 읽어서 보여줍니다. 이명령어는 외부에서 로그인 한 정보도 보여줄 수 있습니다.

lastlog
시스템의 모든 사용자가 마지막으로 로그인한 시간을 보여줍니다. 이 명령어는 /var/log/lastlog 파일을 참조 합니다.

logrotate
이 유틸리티는 시스템 로그 파일들을 적당하게 로테이트 시키고, 압축하고, 지우고, 메일을 보내는 일들을 처리해 줍니다.
보통 crond은 logrotate를 가장 기본적인 하루 일과로 삼습니다.
/etc/logrotate.conf에 적당한 내용을 적어주면 시스템 전체 로그뿐만 아니라 개인용 로그 파일을 관리할 수 있습니다.

▶iostat 시스템 파일의 정보 [디스크 이용률 보고서]
중앙 연산 처리장치 (CPU)통계, 비동기 입출력 및 전체 시스템, 어댑터, tty 장치, 디스크 및 CD-ROM에 대한 입출력 통계를 보고 합니다.

sysstat version 4.0.7
(C) S. Godard
Usage: iostat [ options... ]
Options are:
[ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ ] ]
[ [ ] ]
# iostat -c
# iostat -d Block
# iostat -k KByte
# iostat -t
# iostat -v
# iostat -x

Linux 2.6.9-42.EL (www.myserver.com) 04/19/07

avg-cpu: %user %nice %sys %iowait %idle
0.16 0.01 0.18 0.06 99.60

Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
hda 1.08 2.02 7.52 546381 2035663
hda1 0.00 0.00 0.00 873 24
hda2 0.56 0.58 1.10 157889 298079
hda3 0.10 0.07 0.32 19041 86180
hda4 0.00 0.00 0.00 1 0
hda5 0.62 0.32 2.24 85590 607013
hda6 0.03 0.02 0.02 6626 6029
hda7 1.02 1.02 3.83 275257 1038338
hda8 0.00 0.00 0.00 544 0
hdb 0.00 0.00 0.00 876 0

ex)
-d : 드라이브 보고서
드라이브명 초당평균 요청횟수
# iostat -d hda1 2 2

Kbps : 드라이브에 전송된 데이터의 양을 초당 KB 단위로 나타냅니다.

bkread : 호스팅 서버로부터 이 어댑터에 수신된 초당 블록 갯수.
bkwrtn : 이 어댑터에서 호스팅 서버로 전송된 초당 블록 갯수.
tps : 어댑터에 발행된 초당 전송 수
Kb_read : (전체 시스템으로부터 or 어댑터로 부터) 읽여진 KB의 총수
Kb_wrtn : (전체 시스템으로부터 or 어댑터에) 기록된 KB의 총수

----------------------------------------------------------------------------
EXAMPLES
To see every process on the system using standard syntax:
ps -e
ps -ef
ps -eF
ps -ely

To see every process on the system using BSD syntax:
ps ax
ps axu

To print a process tree:
ps -ejH
ps axjf

To get info about threads:
ps -eLf
ps axms

To get security info:
ps -eo euser,ruser,suser,fuser,f,comm,label
ps axZ
ps -eM

To see every process except those running as root (real & effective ID)
ps -U root -u root -N

To see every process with a user-defined format:
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps -eopid,tt,user,fname,tmout,f,wchan

Odd display with AIX field descriptors:
ps -o "%u : %U : %p : %a"

Print only the process IDs of syslogd:
ps -C syslogd -o pid=

Print only the name of PID 42:
ps -p 42 -o comm=

[Linux] grep command

grep

# grep -n dba /etc/group // -n : 파일안에서의 패턴이 발견된 라인 및 라인번호
# grep -v dba /etc/group // -v : 패턴이 발견되지 않은 라인
# grep -n dba /etc/group /etc/passwd // 파일을 여러개 나열
# grep -i the ~/tdir/* // -i : 대소구분 무시(ignore) => the 대소구분 없이
# grep -li the ~/tdir/* // -l : 패턴이 들어있는 파일 이름만..
# grep -c the ~/tdir/* // -c : 패턴이 들어있는 라인 번호만..

^ : ^패턴 패턴으로 시작하는 모든 라인 찾기
$ : 패턴$ 패턴으로 끝나는 모든 라인 찾기
. : d... d로 시작하는 4자리 character 찾기
* : [a-d]* a, b, c, d로 시작하는 character 찾기
[] : [Dd]atabase Database 또는 database 찾기
[^] : [^D] D 가 나타나지 않는 라인 찾기

# grep -i ^the ~/tdir/* // the 로 시작하는 라인 찾기
# grep -i meal.$ ~/tdir/* // meal.으로 끝나는 라인 찾기
# grep c....d ~/tdir/* // c로 시작하고 d로 끝나는 5자리 character 찾기

[Linux] etc directory explain

CORBA/==CORBA(Common Object Request Broke Architecture)에 파일을 저장한다
DIR_COLORS==컬러-ls 명령어 표시색의 설정파일
HOSTNAME==FQDN(Fulley Quallified Domain Name)형식으로 호스트명으로 쓰여있는 파일
Muttrc==메일소프트웨어 Mutt의 설정파일
TextConfig==콘솔 화면의 해상도,커서모양,폰트정보
X11==X Window System 설정파일군을 저장하는 디렉토리
adjtime==시각을 설정하는 hwclock의 파라미터 파일
aliases==메일의 앨라이어스 설정파일
aliases.db==메일의 앨라이어스 데이터베이스 파일
amd.conf,amd.net==amd 데몬의 설정 파일
anacrontab==24시간 가동하지 않는 시스템을 위한 cron
at.deny==at 명령어 이용을 금지하는 유저를 기술하는 파일
auto.master==automount 데몬의 설정 파일
auto.misc==automount데몬이 이용하는 맵 파일
bashrc==bash 기동시에 실행되는 설정 파일(~/.bashrc)의 템플릿
cdrecord.conf==cdrecord 명령어의 설정 파일
charsets/==Mutt 캐릭터세터 정의 파일을 저장하는 디렉토리
codepages/==삼바에서 이용하는 codepage 정보를 저장하는 디렉토리
conf.linuxconf==linuxconf의 모듈을 기술한 파일
conf.modules==modeprobe가 이용하는 로더블 모듈 설정 파일(테보리눅스는 modules.conf)
cron.d/==crontable 명령어의설정 파일을 저장하는 디렉토리
cron.daily/==하루에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
cron.hourly/==1시간에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
cron.monthly/==1개월에 1회 자동 실행시키고 싶은 스크립트를 저장하는 디렉토리
cron.weekly/==1주일에 1회 자동 실행시키고 싶은 스크립트를 저장하는 대렉토리
crontab==crontab명령어의 설정 파일
csh.cshrc==C 쉘 기동시에 실행되는 설정 파일(~/.cshrc)의 디렉토리
csh.login==C 쉘이 로그인시에 시랳하는 설정파일(~/.login)의 디렉토리
default/==신규유저용 디폴트 설정을 저장하는 디렉토리
dhcpc/==DHCP 클라이언트 데몬 dhcpcd가 네트웍 정보를 저장하는 디렉토리
dumpdates==dump명령어로 디스크의 백업을 한 일시와 시각등이 기록된다
enscript.cfg==텍스트 파일을 PostScript로 변환하는 enscript 의 설정 파일
esd.conf==Enlightened Sound Daemon 설정 파일
exports==nfs(Network File System)서버의 설정파일
fb.modes==프레임버퍼 디바이스의 데이타베이스파일(레드햇 리눅스만)
fdprm==플로피 디스크의 패러미터 파일
filesystems==이용할수 있는 파일 시스템의 리스트가 기술된 파일
fnrc==폰터렌더링 라이브러리 fnlib의 설정 파일
fstab==파일 시스템과 마운트 포인터를 기술하는 파일
ftpaccess==ftp서버의 설정 파일
ftpconversions==ftp서버에서 압축/아카이브 전송시의 명령어와 확장자의 설정파일
ftpgroups==ftp서버의 설정 파일
ftphosts==ftp서버에 액세스를 허가/금지하는 호스트를 설정하는 파일
ftpusers==ftp 액세스를 금지하는 유저를 설정하는 파일
gated.conf.sample==동적경로 설정 데몬 gated의 설정 파일 견본
gettydefs==getty가 이용되는 시리얼의 설정 일람
gnome/==GTK+의 국제화 대응 캐릭터 세트 정의 파일을 저장하는 디렉토리
gpm-root.conf==컷&페이스트와 마우스서버(gpm)의 디폴터핸들러의설정파일
group==유저그룹을 정의한 파일
group-==그룹파일의 백업
gshadow==암호화된 그룹 패스워드를 기술한 파일
gshadow-==gshadow의 백업
gtk/==The Gimp Toolkit(GTK+)의 국제화 대응 캐릭터세트 정의 파일을 저장하는 데렉토리
host.conf==name resolve 에 사용되는 방법.우선순위의 설정파일(libc5)
hosts==로컬에서 이름을 해결하기 위한 호스트명,IP 어드레스 정의 파일
hosts.allow==inetd 경유에서 기동된 서버의 액세스 제어 파일,접속 허용 호스트를 기록
hosts.deny==inetd 경유에서 기동ㄷ횐 서버의 액세스 제어파일,접속 불허 호스트를 기록
httpd/==웹서버 Apache의 설정파일 등을 저장하는 디렉토리
identd.conf==개인 인증에 사용되는 identd의 설정 파일
im_palette-small.pal,im_palette-tiny.pal,im_palette.pal,imrc==
화상이미지 묘사 라이브러리 imlib의 파레트 설정 파일
inetd.conf==인터넷 수퍼서버 inetd 설정 파일
info-dir==info명령어가 디폴트로 표시하는 파일
initlog.conf==init가 출력하는 로그인에 관한 설정 파일
inittab==기동시의 런 레벨과 init설정을 기술하는 파일
inputrc==bash등이 이용한느 행입력 컬러 라이브러리의 Readline의 설정 파일
ioctl.save==싱글유저 모드에서 이용하는 콘솔 디바이스 설정(init가 작성한다)
irda/==적외선 통신을 하기위한 irda-utils 패키지의 초기화 스크립트 저장 디렉토리
isapnp.gone==ISA plug&play로 인식할수 없는 리소스를 기술하는 파일
isdn/==ISDN카드 지원 설정 파일을 저장하는 디렉토리
issue==로컬에서 로그인 시 표시하는 메시지
issue.net==리모트에서 로그인 할때 표시하는 메시지
krb5.conf==케로베로스의 설정 파일
ld.so.cache==공유라이브러리를 검색할 떄 이용하는 캐시파일
ld.so.conf==공유라이브러리를 저장하는 디렉토리를 기술하는 파일
ldap.conf==LDAP(Lightweight Directory Access Protocol)모듈 nss_ldap 설정 파일
lilo.conf==lilo 설정 파일
linux-terminfo/==사용되고 있는 콘솔에 대한 데이타가 저장되어 있다
lmhosts==Samba가 NetBios명 해결에 이용하는 호스트명,IP 어드레스 정의 파일
localtime== 머신의 타임존이 쓰여져 있는 바이너리 파일
login.defs==로그인의 설정
logrotate.conf==로그 관리 유틸리티 logrotate의 설정 파일
logrotate.d/==RPM파일에서 인스톨한 데몬을 위한 logrotate설정 파일을 저장한다
ltrace.conf==라이브러리 트레이서의 설정 파일
lvs.cf==레드햇 클러스트링 서비스의 데몬 콘솔 설정 파일
lynx.cfg==텍스트 베이스 웹 브라우저lynx의 설정 파일
mail/==Send mail이 이용한 데이타베이스 파일 등을 저장한다
mail.rc==메일 명령어의 설정 파일
mailcap==metamail 설정 파일
mailcap.vga==metamail 설정 파일(멀티미디어 메일 처리)
man.config==man 명령어의 설정 파일
mc.global==파일 매니저 GNU Midnight Commander의 설정 파일
mesa.conf==OpenGL호환 3D 라이브러리 mesa의 설정 파일
mgetty+sendfax/==mgetty+sendfax 패키지의 설정 파일을 저장하는 디렉토리
midi/==MIDI플레이어의 playmidi 등이 이용한느 음색파일 저장 디렉토리
mime-magic==파일 내용에서 마임 형식을 판단하기 위한 정의 파일
mime-magic.dat==mime-magic에서 만들어진 데이타베이스 파일
mime.types==웹서버 아파치(Apache)가 이용하는 MIME 정의 파일
minicom.users==시리얼통신 프로그램 minicom의 유저 설정 파일
motd==로그인할 때 표시되는 메시지를 기술하는 파일
mtab==마운트 되어있는 파일 시스템의 일람이 쓰여져 있는 파일
mtftpd.conf==리모트 부트 데몬 pxe에서 이용하는 MTFTP서버의 설정 파일
mtools.conf==도스의 패키지를 읽고 쓰는 툴 패키지의 mtools의 설정 파일
named.boot==DNS서버 BIND4의 설정 파일
named.conf==DNS server BIND8의설정 파일
news/==net news server inn의 설정 파일을 저장한다
nmh/==MH를 베이스로 한 메일 툴 패키지 mtools의 설정 파일
nscd.conf==네임서비스 참조개시 데몬 nscd의 설정 파일
nsswitch.conf==시스템데이타베이스와 네임서비스 스위치 설정 파일
ntp/==Network Time Protocol서버 xntp3 패키지가 데이타를 저장
ntp.conf==Network Time Protocol서버 xntpd의 설정 파일
newserv.conf==mars(Netware 에뮬레이터) 설정 파일
newserv.stations==mars용 네트웨어 설정 파일을 저장한다
openldap/==OpenLDAP(Light Weight Directory Access Protocol) 설정 파일 등을 저장
pam.d/==PAM(Pluggable Authentication Modules)의 설정 파일을 저장한다
paper.config==용지 크기의 정의 파일
passwd==모든 유저의 유저명,유저id,그룹id등이 기술되어 있는 파일
passwd-==passwd의 백업
pbm2ppa.conf==portable bitmap 이미지 파일을 HP프린터로 사용하는 PPA 파일로 변환하는 툴의 설정 파일
pcmcia/==pcmcia의 설정 파일을 저장하는 디렉토리
phhttpd.conf==http 엑셀레이터 phhttpd의 설정파일
pine.conf==메일/뉴스 리더 pine의 설정 파일
pine.conf.fixed==메일/뉴스리더 pine의 설정 파일
pnm2ppa.conf==portable anymap 이미지 파일을 HP프린터로 사용하는 PPA 파일로 변환하는 툴의 설정 파일
ppp/==ppp데몬의 설정 파일을 저장하는 디렉토리
printcap==프린터의 설정 파일
profile==bash가 로그인 할떄 실행되는 설정 파일
profile.d/==로그인시 프로파일에서 불려나와 실행된 스크립트의 저장 디렉토리
protocols==프로토콜 설정 파일 (변경 불가)
pwdb.conf==pwdb의 설정 파일
pxe.conf==리모트 부트 데몬 pxe의 설정 파일
rc.d/==기동시에 데몬 등을 기동하는 스크립트를 저장하는 디렉토리
redhat-release등==디스트리뷰션의 릴리스명.issue로 전송된다.
resolv.conf==이름 해결 수단의 우선순위 등 리졸버의 설정 파일
rmt@==/sbin/rmt로의 링크,백업때 사용된다
rpc==RPC(Remote Procedure Call)서버 명과 번호의 대응이 기술된 파일
rpm/==RPM명령어 패키지에 이용하는 디렉토리
rpm2html.config==RPM 레포지터리에서 HTML 데이타베이스를 작성하는 rpm2html 설정파일
rpbfind.conf==인터넷상의 RPM 파일을 검색하는 rpm2html 설정파일
rpmlint/==RPM파일의 에러를 체크하는 rpmlint의 설정파일을 저장한다
screenrc==화면관리 프로그램,스크린의 설정파일 템플릿
security/==PAM(pluggable authentication modules)에서 이용하는 모듈을 저장
sendmail.cf==sendmail의 동작 설정 파일
sendmail.cw==sendmail에서 호스트 명을 이용하는 경우 별명을 정의 하는 파일
sendmail.mc==sendmail.cf를 만들기 위한 매크로 정의 파일,매크로 프로세서 m4로 이용
services==네트웍 서비스명으로 사용하는 포트,프로토콜의 대응을 정의 하는 파일
shadow==각 유저의 새도우 패스워드에 관한 저옵를 기술하는 파일
shadow-==shadow의 백업 파일
shells==로그인 쉘로서 설정 가능한 쉘을 기술하는 파일
skel/==도트파일의 템플릿을 저장하는 디렉토리
slip/==SLIP(Serial Line Internet Protocol)로그인을 위한 설정 파일 저장
smb.conf==삼바의 설정 파일
smbpasswd==삼바의 패스워드 파일
smbusers==리눅스 유저명과 삼바 유저명을 대응 시키는 설정 파일
smrsh/==sendmail용 제한 쉘로 이용할 수 있는 프로그램을 저장한다.
snmp/==SNMP(Simple Network Management Protocol)에이전트의 설정 파일
sound/==GNOME의 이벤트에 나누어 붙인 사운드 파일의 설정 파일을 저장한다
squid/==웹캐시프록시 Squid의 설정 파일을 저장한다
sysconfig/==기동시에 참조된 디바이스 등의 설정 파일을 저장한다
sysctl.conf==기동시에 네트웍을 설정하는 파일
syslog.conf==syslog데몬의 설정 파일
termcap==이전에 사용되어진 단말 정의 데이타베이스 화일
up2date.conf==up2date설정 파일
uucp/==UUCP(Unix To Unix Copy)의 설정파일을 저장한다
vfontcap@==Vflib에서 사용하는 트루타입 폰트의 설정 파일
vga==SVGALIB가 이용하는 트루타입 폰트의 설정 타입
wegtrc==HTTP/FTP대응 파일 다운로드 툴 wfget의 설정 파일
yp.conf==NIS의 설정 파일
ypserv.conf==NIS 서버의 옵션을 기술하는 파일
ytalkrc==ytalk 설정 파일
zlogin,zlogout,zprofile,zshenv,zshrc==zsh의 설정 파일

[Linux] egrep

egrep

# egrep '(a|A)d+' /etc/passwd // ad 또는 Ad가 포함된 라인 찾기
# egrep 'Oracle|purpose' grep_test // Oracle 또는 purpose 가 포함된 라인 찾기

[Linux] system backup

dump -0f /dev/st0 /

1. 백업에 대하여
백업은 자료를 보호하는 하나의 방법으로 시스템관리자가 최우선적으로 해야할 작업이다. 여러 개의
자료 복사본을 만들어 놓고 자료를 잃어버릴 경우를 대비하는 것이다. 백업을 실행하는 가장 안전한
방법은 테이프, 제거가능한 드라이브, 기록가능한 씨디 등 시스템과 떨어진 위치에 저장하는 것이다.


2. 자료가 손실되는 경우
(1) 하드웨어의 결함
(2) 소프트웨어의 버그
(3) 사람의 실수나 오동작
(4) 천재지변등의 자연재해

3. 백업전에 고려할 사항
(1) 백업 데이터 선택 여부 : 어떠한 데이터를 백업할 지를 결정해야 한다. 예를 들면 /home 디렉토
리만을 백업할 것인지, /var 디렉토리를 할 것인지 아니면 전체 백업을
할 것인지를 결정해야 한다.
(2) 백업 주기 : 얼마나 자주 백업할 것인지를 결정해야 한다. 또한 증분백업(Incremental Backup)
을 할 것인지, 전체백업(Full Backup)를 할 것인지도 결정해야 한다. 증분백업이란
말 그대로 백업할 대상중에서 추가된 부분만을 백업하는 것을 말하고 전체백업이란
전체를 그대로 백업하는 것을 말한다. 실제로는 이 두가지 백업형태를 적절히 이용
하는 것이 중요하다. 예를 들면 월요일부터 토요일까지는 추가된 부분만을 증분백
업하고, 일요일날에는 전체백업을 실시한다. 또한 매월 1일에는 전체백업을 실시하
여 한달의 데이터, 1주의 데이터 등의 단위로 백업이 가능하다.
(3) 매체(Media) 선택 여부: 어떠한 백업 매체를 사용할 것인지를 결정해야 한다. 이 매체 선택은
경제적인 면과 효율적인 면, 편리성 등을 고려하여 선택한다.
(4) 백업 방법: 어떠한 프로그램을 선택하냐는 것이다. 리눅스에서 사용가능한 백업방법으로는 tar,
dd, dump, dpio 등이 있고, 이외에도 많은 백업 유틸리티들이 있다. 편리성과 안전성
, 효율성 등을 고려하려 선택하도록 한다.

4. 백업의 미디어
(1) 개요: 백업할 경우 가장 중요하게 고려하는 것이 예비 매체의 선택이다. 비용, 신뢰성, 처리속
도, 가용도를 생각해야 한다.
(2) 백업매체
1) 플로피디스크: 매우 싸며 어느 정도 신뢰할 만하다. 하지만 별로 빠르지 못하고 매우 유동적
이다. 또한 대용량의 데이터 저장시에는 적당치 않다.
2) 테이프: 다소 비싸고 충분히 신뢰할 만하다. 속도도 충분히 빠르다. 테이프의 크기에 따라
편리하게 이용할 수 있다.
3) MOD(Magnetic Optical Drive: 광자기 드라이브) : 대용량의 데이터를 랜덤하게 접근하고 한
부분만 빨리 복원할 수 있다. Giga급의 용량
을 가진다.
4) DAT(Digital Audio Tape) : 카세트 테이브보다 더 작은 크기의 미디어로 Giga급 용량을 갖
는다.

5. 리눅스에서 지원가능한 백업장치
(1) /dev/cdrom: CD-ROM드라이브
(2) /dev/fd0: 플로피디스크
(3) /dev/ht0, /dev/nht0 : IDE 테이프 장치 (예를 들면 Iomega drives)
(4) /dev/nst0, /dev/st0 : DAT(Digital Audio Tape) 나 DDS(Digital Data Storage) 계열의 SCSI
테이프 장치
(5) /dev/nrft0, /dev/nftape, /dev/rft0, /dev/ftape : 플로피 테이프 장치 (예를 들면 QIC-80)

6. 백업툴의 선택

(1) 개요: 전통적인 유닉스툴들에는 tar, dd, cpio, dump등이 있다. tar와 cpio는 유사하고 둘 다
테이프상에서 복원할 수 있고, 거의 모든 미디어를 사용할 수 있다.
(2) 백업툴
1) tar: Unix와 리눅스시스템 모두에서 사용되는 유틸리티로 파일이나 디렉토리들을 하나의 파일
로 묶어주는 역할을 한다. 사용이 쉽고 소수의 파일백업에 좋고, 원본파일을 남겨두므로
안전하다. 전통적인 유닉스의 tar는 압축기능을 하는 옵션이 없지만, 리눅스의 GNU tar는
압축도 지원한다.
2) cpio: tar와 비슷한 유틸리티로 많은 양의 데이터에 대해서는 tar보다 빠르다. 장치파일이나
네트워크 파일등의 특수 파일도 백업이 가능하고 백업본의 크기도 작고, 백업본에 손상된
부분이 있더라도 손상된 부분을 제외하고 나머지 부분을 복구한다. 그러나, 증분백업기능
을 지원하지 않는다.
3) dump: ext2 나 ext3 파일시스템만 지원하고, 파일들을 백업하지않고 파일시스템 자체를 직접
읽어내는 방법을 사용한다. 전체백업과 증분백업이 가능하다.
4) dd : data dump의 약자로 파티션 전체의 백업등이 가능하다. 실제적으로는 백업보다는 다른 경
우에 더욱 더 많이 쓰인다.
5) 기타: amanda, Arkeia, Bru, Veritas(client), UniBACK, ArcServe 등

7. tar를 이용하여 백업하기
(1) 전체백업
1) tar cvfp home.tar /home
=> /home 디렉토리를 퍼미션을 그대로 유지하면서 home.tar라는 파일로 묶는다.
2) tar cf /dev/st0 /home
=> /home디렉토리를 SCSI 테이프장치인 /dev/st0에 백업한다.
3) tar zcf /dev/st0 /home
=> /home디렉토리를 SCSI 테이프장치인 /dev/st0에 압축해서 백업한다.
4) tar zxf /dev/st0
=> SCSI 테이프장치인 /dev/st0 에서 압축을 풀어 현재 디렉토리에 푼다.
5) tar -g list -cvpf home.tar /home
=> -g는 증분백업(Increment backup)에 사용하는 옵션으로 /home 디렉토리를 퍼미션을 그대로
유지하면서 home.tar로 묶는 것은 1번 예제와 같지만 list라는 백업시에 저장되는 파일이나
디렉토리들을 목록화하는 파일을 생성한다. 처음시도할 경우에는 첫번째 예제와 같은 파일
로 생성된다. 그러나 그 다음 시도시에는 list파일과 비교하여 추가된 것만 백업하므로 백
업하여 생성되는 파일명을 같게 해서는 안된다.
(2) 증분백업
1) tar -g list -cvpf home1.tar /home
=> 기존의 list파일을 내용을 보고 그 이후에 변경되거나 추가된 파일들을 home1.tar로 백업
한다. list파일을 편집기로 열어보면 파일의 용량을 숫자로 관리한다. 이 값을 비교하여
변화시에 증분백업을 시도한다. 따라서, 이 파일을 삭제되면 전체백업을 한다.

8. cpio를 이용하여 백업하기
(1) 설명: cpio는 Copy Input ot Output의 약자로 입력받은 것을 출력에 복사한다는 뜻이다. 보통
find명령의 출력을 입력으로 받아 백업디바이스에 저장하는 역할을 한다.
(2) 사용법
[find 명령 | ] cpio options ' > 또는 < ' 디바이스명
(3) options
-o : 표준출력으로 보내어 사용한다. (--extract)
-i : 표준입력으로 받을 때 사용한다. 즉, 백업한 자료를 불러올 때 사용한다.
-v : 과정을 자세히 보여준다.
-c : 데이터 형식을 ASCII형태로 한다.
-d : 필요하면 디렉토리를 생성한다. (--make-directories)
-B : 입출력 블록사이즈를 5120bytes로 한다. 기본 블록사이즈는 512bytes이다.
(4) 사용예
1) find /home | cpio -ocv > /dev/nst0
=> /home 디렉토리의 내용을 SCSI 테이프장치인 /dev/nst0 장치에 백업한다.
2) cpio -icdv < /dev/nst0
=> /dev/nst0에 백업된 데이터를 현재디렉토리에 복원한다. 필요하면 디렉토리도 생성한다.

9. dump를 이용하여 백업하기
(1) 설명: dump는 파일들이 아닌 파일시스템 전체를 백업한다. 보통 파티션단위로 백업할 때 사용
하면 편리하다. dump는 0-9단계의 레벨을 가지고 증분 백업을 지원한다. 레벨 0이 전체
백업이고 나머지 레벨들은 부분백업을 하게 된다. 백업시에 /etc/fstab파일을 참조하며
백업된 데이터 복원은 restore명령을 사용한다.
(2) 사용법
dump options 백업미디어 백업하고자하는 대상
(3) options
-0~9 : 덤프의 레벨을 지정한다. 0은 전체백업이고, 나머지는 부분백업을 한다. 기본레벨은 9이
다.
-f 파일명 또는 디바이스명 : 백업할 미디어를 지정하거나 파일명을 적는다.
-u : dump 를 통해 백업한 후에 /etc/dumpdates라는 파일에 작업에 대한 정보를 기록한다.
(4) 사용예
1) dump -0f /dev/nst0 /home
=> /home 디렉토리 전체를 /dev/nst0 장치에 전체 백업한다.
2) dump -0u -f /dev/nst0 /dev/hda7
=> /dev/hda7 파일시스템 전체를 /dev/nst0 장치에 전체 백업하며 그 작업 정보를 /etc/dumpd
ates라는 파일에 기록한다.
3) dump -0u -f home /home
=> /home 디렉토리 전체를 home이라는 이름으로 전체백업한다. 또한 그 작업정보를 /etc/dump
dates 라는 파일에 기록한다.
4) dump -4u -f /dev/nst0 /dev/hda7
=> level4 수준 또는 그 이하의 백업을 한 뒤에 바뀐 내용을 증분백업한다. 또한 그 작업정보
를 /etc/dumpupdates에 기록한다.
(5) 복원: dump명령으로 백업한 경우에는 restore 명령을 이용하여 복원해야 한다.
1) 사용법
restore options 디바이스명 또는 백업파일명
2) options
-i : 대화식(interactive)으로 복구할 파일을 선택한 후에 복원이 가능하다.
-f 디바이스명 또는 백업파일명 : 백업되어진 파일이나 장치를 지정한다.
-r : 전체백업시에 사용한다. 이 옵션사용시에 파일시스템이 미리 생성되어 있어야 하고, 마운트
도 되어 있어야 하며 해당 디렉토리안에서 작업해야 한다.
3) 사용예
ㄱ. restore -if /dev/st0
=> /dev/st0에 백업된 데이터를 하나씩 확인하면서 복원한다.
ㄴ. restore -rf /dev/nst0
=> /dev/nst0에 백업된 데이터를 전체복원한다. 단 복원하고자 하는 파일시스템이 생성되어
있어야 하며 마운트되어 있어야 하고 해당 디렉토리안에서 작업해야 한다.
예) mke2fs /dev/sda1
mount /dev/sda1 /mnt
cd /mnt
ㄷ. restore -if home
=> home이라는 이름으로 백업된 파일을 복구한다. 실행시키면 다음과 같이 프롬프트가 나타
난다. 지원가능한 명령을 확인해야 한다.
restore > // ? 나 help라고 입력하면 사용가능한 명령을 보여준다.
restore > help
Available commands are:
ls [arg] - list directory
cd arg - change directory
pwd - print current directory
add [arg] - add `arg' to list of files to be extracted
delete [arg] - delete `arg' from list of files to be extracted
extract - extract requested files
setmodes - set modes of requested directories
quit - immediately exit program
what - list dump header information
verbose - toggle verbose flag (useful with ``ls'')
prompt - toggle the prompt display
help or `?' - print this list
If no `arg' is supplied, the current directory is used
restore > ls // 백업된 내용을 보여준다.
.:
bluemountain/ minory/ nanajjang/ quota.user zzang/
lost+found/ mkk737/ posein/ xitem/
restore > add quota.user // 특정한 파일을 선택한다. add뒤에 파일명을 기입하지
않으면 전부선택된다.
restore > ls
.:
bluemountain/ minory/ nanajjang/ *quota.user zzang/
lost+found/ mkk737/ posein/ xitem/
restore > extract
You have not read any volumes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1 // 볼륨넘버를 입력한다.
set owner/mode for '.'? [yn] y // y라고 입력한다.

10. dd를 이용하여 백업하기

(1) 설명: 전체파티션 단위로 백업할 때 용이하다.
(2) 사용법: 특정파티션을 다른 하드디스크의 파티션으로 백업한다고 가정해보자. 만약 /dev/hda1
을 /dev/hdb1으로 백업한다고 할 때, /dev/hdb1을 /dev/hda1과 같은 사이즈의 파티션으
로 생성한다.
(3) 사용예
1) dd if=/dev/hda1 of=/dev/hdb1 bs=1k
=> /dev/hda1을 /dev/hdb1으로 백업한다.
2) dd if=/dev/hda of=/dev/hdb
=> /dev/hda를 /dev/hdb로 백업한다.

11. 백업의 종류와 복원
(1) 개요: 모든 것을 한번에 백업하는 풀백업(Full Backup)이 있고 부분 부분을 백업하는 부분 백업
(Incremental Backup)이 있다.
(2) 풀백업
1) 설명: tar를 이용하여 쉽게 할 수있다.
2) 사용예
ㄱ. tar cvf /dev/ftape /usr/src
=> /usr/src디렉토리를 /dev/ftape라는 테이프에 백업한다.
ㄴ. tar -cMf /dev/fd0H1440 /usr/src
=> /usr/src디렉토리를 -M(Multi Volume)옵션으로 플로피에 연속 백업한다. 백업하기 전에
플로피는 포맷을 해야 한다.
(3) 부분백업
1) 설명: 특정한 날짜 이후로 바뀐 파일 부분만 백업한다.
2) 사용예
ㄱ. tar -c -v -N '15 June 2002' -f /dev/st0 /usr/src
=> /usr/src 에서 2002년 6월 15일 이후로 변경된 파일만을 DAT에 부분백업한다.
(4) 복원
1) 설명: tar의 x옵션을 이용하여 복원한다.
2) 사용예
tar xvf /dev/fd0H1440

12. 백업의 대상
(1) 개요: 가능한 많은 백업을 하는 것이 좋다. 그러나 쉽게 재설치가 가능한 프로그램은 백업을 원
하지 않을 수도 있다. 또한 시스템상의 이유로 백업을 원치않는 데이터도 있을 것이다. 예
를 들면 커널이 항상 자동으로 생성하는 데이터들은 백업할 필요가 없다. 백업을 해야할지
하지 말아야 할지 잘 구분이 안되는 것이 /var디렉토리 이하의 파일들이다. 무엇이 중요한
가를 고려하여 백업해야 한다.
(2) 백업해야할 대상 : 보통 /home과 /etc(이 디렉토리는 설정파일들이 들어있는 디렉토리이다. 경
우에 따라서는 시스템의 다른 위치에도 설정파일이 있을 수도 있으니 잘 찾아
백업을 해야함)는 꼭 해야한다. 아울어 어떤 프로그램의 소스를 /usr/local
밑에 설치하였다면 이 디렉토리도 백업대상으로 고려해야 한다.

13. 압축백업
(1) 개요: 백업은 많은 공간을 요구하게 되는데 그것은 많은 경제적인 비용을 초래할 수 있다. 이러
한 비용적 부담의 대처방법으로 압축을 들 수 있다. 압축백업은 문제점을 발생시킬 수도
있다. 자연적으로 어떤 환경때문에 만약 하나의 비트가 잘못 되었다면 모든 나머지 데이터
가 사용 못하게 될 수 있다. 어떤 백업프로그램은 에러를 교정해주지만 많은 수의 에러는
어찌할 수 없는 경우가 많다. 백업은 안전해야 되므로 그리 좋은 생각만은 아니다.
(2) 사용예
tar zcvf etc_backup.tar.gz /etc
=> /etc디렉토리를 압축하여 etc_backup.tar.gz파일을 만든다.

14. 테이프 관련 유틸리티- mt
(1) 설명: mt는 테이프(Magnetic Tape)의 작동을 제어하는 유틸리티이다.
(2) 사용법
mt [option] command
(3) option
-h : 사용가능한 command를 보여준다.
-v : mt의 버전을 보여준다. (--version)
-f 디바이스명: 제어하고자하는 디바이스명을 지정한다.
(4) 주요 commnad
status : 테이프의 상태를 보여준다.
fsf 파일수: 테이프를 지정한 파일 수 만큼 앞으로 이동시킨다.
rewind : 테이프를 처음으로 되감는다.
bsf 파일수 : 테이프를 지정한 파일 수 만큼 되감는다.
erase : 테이프의 내용을 지운다.
offline : 테이프를 꺼낸다.
rewoff : 테이프를 처음으로 되감은 뒤에 꺼낸다.
(5) 사용예
1) mt -f /dev/st0 status
=> 테이프의 상태를 보여준다.
2) mt -f /dev/st0 rewind
=> 테이프를 처음으로 되감는다.
3) mt -f /dev/st0 fsf 50
=> 파일 수 50만큼 테이프를 앞으로 이동시킨다.
4) mt -f /dev/st0 erase
=> 테이프의 내용을 지운다.
5) mt -f /dev/st0 offline
=> 테이프를 꺼낸다.
6) mt -f /dev/st0 rewoff
=> 테이프를 처음으로 되감은 뒤 꺼낸다.

[Linux] history access denied

여러사람이 사용하는 리눅스의 예입니다. 한사람이 들어온다 리눅스에.. 이상한 작업하고 ..

unset HISTFILE [엔터] 친다.. 그리고 종료한다.. 그럼 히스토리에 파일에 기록이 안남는다..

이걸 막는 방법:

/etc/bashrc 이나 /etc/profile 에서..

끝에...

declare -r HISTFILE

하면 막을수는 있다...

[Linux] nfs

리눅스 - NFS 서버

1. NFS 서버의 정의
네트워크 파일 시스템 (Network File System)의 약자로 정보 통신 네트워크에 접속 되어 있는 다른 컴퓨터의 파일 시스템을 고용하기 위한 분산 파일 공유 시스템 소프트웨어 이다. 컴퓨터의 기종이나 운영체제가 다른 환경의 컴퓨터에 분산되어 있는 파일을 공용하기 위한 것이다. 네트워크 파일 시스템이 탑재되어 있는 다른 컴퓨터상의 파일 시스템을 마치 자기의 컴퓨터에 있는 파일처럼 접근할 수 있으므로 파일 전송을 하고 나서 파일을 조작할 필요가 없다. 1985년에 미국의 썬 마이크로시스템즈 사가 개발 하였는데, 그 유용성 때문에 많은 시스템에서 이용할 수 있어 업계 표준과 같이 되었다. NFS는 개발사인 썬 마이크로시스템즈 사의 등록 상표이다.

NFS 서비스를 제공하기 위해서는 NFS 서버와 클라이언트 간의 기보적인 요소를 갖추어야 하는데, 먼저 사용자 시스템에 NFS 클라이언트가 있어야하며, 원격지 컴퓨터에는 NFS 서버가 설치되어 있어야 한다. 둘 모두 TCP/IP 프로토콜이 설치 되어 있어야 한다. 초기에는 TCP 대신 UDP를 사용하기도 하였다. NFS 서버는 컴퓨터 간의 통신 방법으로 RPC(Remote Procedure Call)를 사용한다.

NFS는 여러명이 같이 사용되는 대용량 프로그램이나 테이터들을 하나의 호스트에 넣어두고 단지 마운트를 통해서 서버의 자원을 자기 자원이양 똑같이 사용하는 것이 가능하다. 그러나 네트워크의 트래픽이 걸려 속도가 느려진다던지 혹은 보안의 허점이 생길 수도 있다는 것을 염두해 두어야 한다.

2 서버 구축에 필요한 사항
*protmap
RPC프로그램을 TCP/IP 포트에 연결해주는 역할을 한다. RPC를 이용하는 프로그램이 시작되면 그 프로그램은 자신이 제공하는 서비스와 자신이 사용하는 포트를 portmap에 등록을 한다. 클라이언트는 portmap에 문의해 원하는 서버에 접근할 수 있는 방법을 알아 낼 수가 있다.

*rpc.mountd
rpc.mountd는 NFS 마운트 프로토콜이다. 외부에서 클라이언트의 요청이 들어오게 되면 nfs서버는 자신의 한부분을 다른 host들이 사용할 수 있도록 공유를 시켜주어야 한다. BSD계열에서는 export를 기타 다른 유닉스 계열에서는 share라는 말을 사용한다. 물론 리눅스는 export 를 사용한다.
rpc.mount는 어떤 클라이언트가 요청이 들어오게 되면 /etc/export 의 설정에 따라 마운트 요청을 처리한다. 이 마운트쭻 접속유지를 하지 않는다. 접속요청이 들어오게 되면 일단 처리해주고 난 후 접속을 끊었다가 다시 연결한다.

*rpc.nfsd
일단 rpc.mountd에 의해 마운트가 되었다면 /etc/exports의 내용에 따라 클라이언트는 다양한 작업을 할 수가 있게된다. 이때 클라이언트가 작업을 수행하면서 서버쪽 파일시스템상에 무언가를 요구한다면 rpc.nfsd 데몬이 맡아서 처리 해준다.rcp.nfs는 우리가 흔히 알고 있는 fork() 함수를 만들어내어 들어오는 요청을 처리한다.

*rpc.rquotad
원격 쿼터 서버 이다. 이 쿼터 서버는 원격 NFS 서버의 파일 시스템을 마운트한 로컬 유저의 쿼터를 리턴한다.

*rpc.lockd
파일 잡금을 통해 여러 명이 동시에 한 파일을 수정하는 것을 막아준다.

*rpc.statd
rpc.lockd와 함께 사용된다. 이 데몬은 NFS서버가 크래시 되거나 리부팅 되었을 때 잠겻던 것을 다시 복구 시키는 역할을 한다. 파일 잠금 해제와 복구를 담당한다.

3.NFS 서버 설정
*exports
공유할 디렉토리에 대한 설정을 하는 주 설정 파일이 /etc/exports 파일이다.

*exports 설정
exports 파일에 어던 디렉토리를 누구한테 공유 시킬것인지 설정하면된다. 기본 설정 형식은 아래와 같다
디렉토리 머신(옵션1,옵션2) 머신(옵션1.옵션2)
예>/home/iflu wooky.iflu.net (ro) iyagi.iflu.net (rw)

디렉토리 - 자신의 공류할 디렉토리를 의미한다. 이 필드에서 하나의 파티션을 고유시키면 같은 파일 시스템 안에 있는 모든 디렉토리가 공유될 것이다.

머신(클라이언트) - 클라이언트들은 서버에서 공유한 디렉토리를 엑세스 할 수 있으므로 최대한 인증된 호스트에 대해서 구체적으로 설정해야한다. 호스트를 지정할 때는 도메인이나 ip 둘 다 가능하다.

옵션(옵션1.옵션2)
클라이언트를 지정한 수 각 클라이언트들이 공유되어 있는 디렉토리에 접근할 수 있는 권한을 설정하는 것이다.
-ro : 옵션으로 설정된 클라이언트는 단지 디렉토리 읽기만 가능하다. 쓸 수는 없다. 기본 옵션이라 할 수 있다.
-rw : 클라이언트 머신은 공유 디렉토리에 읽고 쓰고 둘다 가능하다.
-no_root_squash : 클라이언트 머신의 루트는 서버의 시스템 루트와 같은 레벨의 권한을 얻게된다.
-root_squash : 클라언트의 루트를 서버상의 nobody 사용자로 매핑
-insecure : 인증되지 않은 엑세스도 가능하도록 함
-link_relative : 절대 심볼릭 링크를 상대 심볼릭 링크로 변경시 사용

4 데몬 가동하기
#/etc/rc.d/init.d/portmap start
#/etc/rc.d/init.d/nfs start
portmap 스크립트를 실행하면 /usr/bin/portmap이 실행된다.
nfs 스크립트를 확인해보면 /etc/exports 파일의 내용이 없을 때는 exit 되고 start시키면 익스포트 리스트를 다시 읽어 들이고 rpc.rquotad, rpc.mountd, rpc.nfs가 실행된다.

*데몬 확인 - rcpinfo
RPC 정보를 리포트 해주는 프로그램이다. 서버에서 현재 가동되고 있는 rpc 서비스가 어떤 것들이 있는지 알려준다.
#rpc -p

5.NFS 클라이언트 사용하기
5.1 클라이언트 마운트
NFS서버에서 권한을 받은 클라이언트는 mount를 사용해서 디렉토리를 공유한다. 마운트 형식은 아래와 같다

#mount -t nfs <서버>:<디렉토리> <마운트위치>
예) #mount -t nfs wooky.iflu.net:/home/iflu /mnt/iflu

마운트를 해제 하려면. 다음과 같다

#umount <마운트위치>
예) #umount /mnt/iflu

-옵션 사용하기

여기에 추가적인 옵션은 일반적인 mount 옵션과 더불어 nfs에만 적용이 되는 것도 있는데 이러한 옵션은 -o의 명령행 인자 뒤에 기술하게 된다
예) #mount -t nfs wooky.iflu.net:/home/iflu /mnt/iflu -o rsize=1024, wsize=1024

rsize=n
NFS 서버로부터 읽어 들이는 바이트 수를 지정한다. 기본값은 커널에 따라 다른데 현재로서는 1024 바이트이다.

wsize=n
NFS 서버에 쓰기를 할 때 사용하는 바이트 수를 정한다. 기본 값은 커널에 따라 다른데 현재로서는 1024 바이트이다.

timeo=n
RPC 타임아웃이 발생한 이후 첫 번째 재전송 요구를 보낼 때 사용되는 시간으로서 1/10 초 단위이다. 기본 값은 7 * 1/10 초이다. 첫 번째 타임아웃이 생기고 나서 타임아웃 시간이 최대치인 60 초에 이르거나 너무 많은 재전송 요구가 벌어질 때까지 타임아웃 시간이 2 배로 변화한다. 만약 파일 시스템이 하드(hard) 옵션으로 마운트되어 있다면 각각의 타임아웃 시간은 2 배로 증가하고 재전송 시도가 일어날 때도 2 배로 증가한다.

retry=n
백그라운드에서 진행 중인 NFS 마운트 작업이 포기하기 전까지 실행할 횟수를 정한다. 기본 값은 10000 번이다.

bg
만약 첫 번째 NFS 마운트 시도가 타임아웃 걸리면 백그라운드에서 실행을 계속한다. 기본값은 백그라운드로 실행하지 않고 그냥 포기한다.

fg
첫 번째 NFS 마운트 시도에서 타임아웃이 걸리면 그 즉시 포기해 버린다. 기본 값이다.

oft
NFS 파일 작업에서 주 타임아웃이 걸리면 프로그램에게 I/O 에러를 보고한다. 기본값은 NFS 파일 작업을 무한히 재시도하는 것이다.

hard
NFS 파일 작업에서 주 타임아웃이 걸리면 콘솔 상에 서버가 반응하지 않음(server not responding)"이라고 출력하고 무한히 재시도한다. 이것이 기본값이다.

intr
타임아웃이 생기고 하드 옵션으로 마운트된 상태라면 파일 작업을 중지하도록 시그널을 보내도록 허용하고 EINTR 신호를 보내다. 기본 값은 파일 작업을 인터럽트 하지 않는 것이다. 주의해야 할 것은 기본 값으로 되어 있는 hard 옵션이 적용된 상태일 경우, 서버가 다운되어 있는 상태라면 서버가 정상 작동할 때까지 계속 대기 상태가 되어 부팅 도중에 그대로 멈춰 버리는 경우가 생긴다는 점이다.

5.2 부팅시 자동으로 NFS 파일 시스템 마운트 하기
리눅스 파일 시스템 정보를 갖고 있는 /etc/fstab 파일을 이용한다. 이 파일에 NFS 파일 시스템 정보를 추가하면 부팅시 자동으로 마운트 할 수 있다.

예)
#vi /etc/fstab
~
.
.
/dev/hda5 swap swap defalts 0 0
ahan.iflu.net:/home/iflu /mnt/iflu nfs intr 0 0

설명)
/etc/fstab 파일은 6개의 필드로 구성 되어 있다. 각 필드는 filesystem, mountpoint, type, options,dump,pass의 6개 항목이 있다.
-filesystem : 마운트할 디바이스다. 원격의 NFS 서버의 디렉토리가 디바이스이기 때문에 :<디렉토리>와 같은 형식으로 적어준다.
-mountpoint : 마운트할 위치이다. NFS파일 시스템일 경우는 새롭게 마운트할 디렉토리를 지정하면 된다.
-type : 각 파일 시스템에 대한 종류를 지정하면 된다. ext3.iso9660,swap,nfs등이 있을것이다. NFS 파일 시스템이므로 당연 nfs 이다.
-options : 마운트할 때 들어갈 각종 옵션을 지정한다. 위에 설명한 옵션중 필요한 옵션을 적으면 된다.
-dump : 시스템에 dump라는 프로그램에 의해 덤프할 파일 시스템인지 여부를 적는다. 0은 해당 파일 시스템이 덤프되 필요 없다는 것이다.
-pass : fsck 프로그램에 의해 부팅시 어떤 파일 시스템을 점검할 것인지 기재 한다. 0인 경우 fsck은 주어진 파일 시스템을 점검할 필요가 없다고 생각한다.

6. NFS 사용되는 유틸리티
6.1 showmount
NFS 서버에서 마운트 정보를 얻을 수 있다

# showmount -옵션
예)# showmount -a ahan.iflu.net

-a ,--all
클라이언트의 호스트 이름과 마운트된 디렉토리를 호스트:디렉토리 포멧으로 출력한다

-d, directories
클라이언트에서 사용하는 디렉토리 이름만 출력한다.

-e, --export
NFS 서버의 export 항목의 리스트를 출력한다.

-h, --help
간단한 도움말을 출력하낟.

-v, --version
현재 사용중인 showmount의 버전 정보를 출력한다

--no-headers
출력에서 요약 정보를 생략하고 출력한다.

6.2 nfsstat
NFS 서버와 클라이언트의 동작 상태를 보여주는 유틸리티이다.

-c
클라이언트의 상태만 보여주는 옵션

-s
서버측의 상태만을 보여주는 옵션

-W
넓은 포멧으로 출력을 조정하는 옵션으로 일반적으로 -c -s옵션과 함께 사용된다.

-w
일정한 시간을 가지고 간단한 nfs 서버와 클라이언트의 상태를 보여주는 옵션이다.

6.3 nhfsstone
NFS를 벤치마킹하기 위한 프로그램이지만 시간당 부하의 수, 전송률, 실패율 등의 관련 데이타를 제공한다.

-v
자세한 출력을 제공 하는 옵션

-t
초 실행시간에 대한 초단위로 설정한다.

-c
NFS에 방생시킬 요청의 총 갯수이다.

-I
초당 NFS에 호출을 방생시킬 부하의 갯수 이다.

7.기타
NFS는 상당히 오버헤드가 많은 프로토콜이다. 그렇기 때문에 속도가 상당히 느리다는 것을 인식해야한다. NFS의 속도는 다른 프로토콜과 비교해 볼 때 kermit과 비슷한 속도이다. 우리가 일반적으로 알고 있고, 인터넷에서 사용하는 ftp, http, rcp, ssh 등의 프로토콜들도 NFS 보다 빠르다. 따라서 네트워크 대역폭이 낮은 네트워크에서 사용하기 힘들며 또한 한 네트워크에 많은 수의 클라이언트가 빈번하게 트랜젝션을 수행하는 경우에는 그리 적합하지 않다. 이런 많은 수의 클라이언트가 트랜젝션을 수행하는 경우에는 네트워크 대역폭을 늘리거나, 아니면 NFS 서버에 복수의 네트워크 카드를 부착하여 물리적으로 클라이언트들을 하부 네트워크로 분할하여 네트워크 대역폭에 따른 트래픽을 분산시키는 방법 등을 사용 해야 한다.

[Linux] awk command

awk

# ls -l | awk '{print $1 , $9}' // 1번과 9번 필드만 나타나도록..
# ls -l | awk '{print $3 "\t" $4 "\t" $9}' // TAB 키가 적용된 결과
# ls -l | awk '{print $9, "is using", $5, "bytes"}' // text 추가
# ls -lt | awk '$5 <= 200 {print $0}' // 5번 필드가 200이하일 경우 출력

[Linux] rsync

#!/bin/sh
rsync -arvul --exclude-from=exclude.txt --exclude=erms supp1webapps -e ssh wlogic81@100.253.55.33:/supp1/webapps rsync-`date +%y%m%d`.log



rsync -arvul --exclude-from=exclude.txt --exclude=erms /supp1/pkg/jStar2.2_02/server/sslife1/ServiceFiles -e ssh wlogic81@100.253.55.33:/supp1/pkg/jStar2.2_02/server/sslife1/ServiceFiles jstar-`date +%y%m%d`.log


Open file
jStar.xml
web.xml
weblogic.xml
cfxjava.lic
chg_code.txt
chartfx.jar
ChartFX.Internet.config
jai_codec.jar
jai_core.jar
jndi-service.xml
jdbc-service.xml
domain-service.xml
service.properties
connectorconfig.xml
basketEnv.properties
constant.jsp
global_ac.jsp
parameter.jsp
index1.jsp
sqlMap.xml
PcmsResources.properties
properties.xml
workingDir
lost\+found
lost+found
chartfx.map.jar
chartfx.annotation.jar
chartfx6

--------------------------------------------------------------------------------------
1. 원격지 서버에 rsync 서버 설정하기

- /etc/xinet.d/rsync 파일생성
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

2. /etc/service 파일에 추가

rsync 873/tcp # rsync
rsync 873/udp # rsync

3. /etc/rsyncd.conf 파일생성

#motd = /etc/rsync.motd # file : message of the day
uid = nobody
gid = nobody
use chroot = no
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid

[HOME]
path = /home
comment = home directory
read only = false
uid = apache
gid = apache
auth users = wangsy
secrets file = /etc/rsyncd.secrets

4. /etc/rsyncd.secrets 파일 생성

name:password
chmod 0600 /etc/rsyncd.secrets

5. xinet.d 리스타트

/etc/rc.d/init.d/xinetd restart


=========================================================================

클라이언드 사용하기

=========================================================================

형식 : rsync [option] [src] [target]

ex) rsync -av test.net::HOME /home
rsync -av test.net:/home /home

rsync -av /home test.net::HOME
rsync -av /home test.net:/home

옵션 설명


-v, --verbose 상세하게 출력하기
-q, --quiet 에러및 기타 어떠한 메시지도 출력 하지 말것
-a, --archive 아카이브 보드로 가져오기(퍼미션 소유주 및 위치까지 그대로 가져온다.)
-r, --recursive 하위 구조의 디렉토리 모두 재귀적으로 가져온다.
-z, --compress 압축하여 전송하기
-R, --relative use relative path names
--no-implied-dirs don't send implied dirs with --relative
-b, --backup make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
--inplace update destination files in-place
--append append data onto shorter files
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the tree
-k, --copy-dirlinks transform symlink to dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links preserve hard links
-p, --perms preserve permissions
-E, --executability preserve executability
--chmod=CHMOD affect file and/or directory permissions
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve times
-O, --omit-dir-times omit directories when preserving times
--super receiver attempts super-user activities
-S, --sparse handle sparse files efficiently
-n, --dry-run show what would have been transferred
-W, --whole-file copy files whole (without rsync algorithm)
-x, --one-file-system don't cross filesystem boundaries
-B, --block-size=SIZE force a fixed checksum block-size
-e, --rsh=COMMAND specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that exist on receiver
--remove-source-files sender removes synchronized files (non-dir)
--del an alias for --delete-during
--delete delete extraneous files from dest dirs
--delete-before receiver deletes before transfer (default)
--delete-during receiver deletes during xfer, not before
--delete-after receiver deletes after transfer, not before
--delete-excluded also delete excluded files from dest dirs
--ignore-errors delete even if there are I/O errors
--force force deletion of dirs even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at end
-m, --prune-empty-dirs prune empty directory chains from file-list
--numeric-ids don't map uid/gid values by user/group name
--timeout=TIME set I/O timeout in seconds
-I, --ignore-times don't skip files that match size and time
--size-only skip files that match in size
--modify-window=NUM compare mod-times with reduced accuracy
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
--compare-dest=DIR also compare received files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
-C, --cvs-exclude auto-ignore files in the same way CVS does
-f, --filter=RULE add a file-filtering RULE
-F same as --filter='dir-merge /.rsync-filter'
repeated: --filter='- .rsync-filter'
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE
-0, --from0 all *from/filter files are delimited by 0s
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
--blocking-io use blocking I/O for the remote shell
--stats give some file-transfer stats
-8, --8-bit-output leave high-bit chars unescaped in output
-h, --human-readable output numbers in a human-readable format
--progress show progress during transfer
-P same as --partial --progress
-i, --itemize-changes output a change-summary for all updates
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
--password-file=FILE read password from FILE
--list-only list the files instead of copying them
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating dest
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
--checksum-seed=NUM set block/file checksum seed (advanced)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
(-h) --help show this help (see below for -h comment)