'리눅스 동기화'에 해당되는 글 1건

  1. 2010.12.13 [명령어] 날짜와 시간관련 명령어의 3형제 (date, rdate, hwclock, ntp)
시스템/LinuxSystem2010. 12. 13. 02:59
[명령어소개]

1. date 명령어

date명령어는 현재 서버의 날짜와시간을 확인하거나 설정할 수 있는 명령어이다.
가끔씩 서버의 날짜와시간이 조금씩 틀리게되어 있는 경우가 있다.
이런겨우에 이 명령어를 이용하여 현재서버의 날짜와시간을 확인하고 정확하게 설정하는 작업을 하기위해 사용한다.  이 명령어는 rdate와 비교를 하시면 좀 더 정확한 이해를 할 수 있다.

사용형식
       date  [-u]  [-d  datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr]
       [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]


2. rdate 명령어

rdate는 지정한 원격지의 타임서버로 부터 날짜시간정보를 받아와 보여주거나 날짜시간설정을 하는 명령어이다. 이 명령어는 date와 clock명령어와 함께 공부를 하면 학습효과가 좋다.


3. ntp 명령어

NTP(Network Time Protocol)는 각 장비 간 시간을 동기화 시켜주는 프로토콜이다.
NTP Server를 두어 각 장비 간 동기화를 하는데 NTP 정보는 UDP 123번 포트를 이용하여 전달된다.


[포트번호]

rdate(RFC 868 time server over a TCP/IP network, remote time server date)

UDP 37번포트 사용

ntp(Network Time Protocol)
UDP 123번포트 사용

[사용방법]

1. clock

# clock - CMOS의 시간 설정

clock은 CMOS의 시각을 설정할 수 있는 명령어이다. CMOS의 시각을 가져와 시스템운영체제 시각으로 설정할 수 있으며, 반대로 시스템 운영체제 시각을 CMOS의 시각으로 설정할 수 있다. date명령어는 단순히 시스템 즉, 시스템 운영체제의 시각을 설정하는 것이며 서버의 CMOS시각을 설정할 수는 없다. 시스템이 부팅될 때에는 CMOS의 시각이 시스템 운영체제시각에 넘겨져서 부팅 시 초기시간으로 설정된다. 따라서 부팅시마다 지속적으로 정확한 시각설정이 필요하다면 clock명령어로 CMOS의 시각을 정확하게 설정해 두어야 한다.

clock애서 사용되는 옵션은 아래와 같다.

-u : CMOS의 시각을 국제시각으로 조정한다.
-r : CMOS의 시각을 출력한다.
-w : 리눅스시스템 시각으로 CMOS시각을 조정한다.
-s : CMOS의 시각으로 리눅스시스템시각을 조정한다.
-a : CMOS의 시각으로 리눅스시스템시각으로 조정하고 다시 CMOS에 조정한다.


아래는 CMOS의 시간과 운영체제의 시간에 대해 비교설명한 것이다.

    구분                            CMOS 시간        운영체제시간
    의미  메인보드에 있는 ROM-BIOS에서 인식하고 있는 시간.
 즉, 하드웨어적인 의미의 시간. 
 운영체제에서 인식하는 시간
 리눅스에서 인식하는 시간
 커널에서 인식하는 시간
    구분  하드웨어적인 의미의 시간  소프트웨어적인 의미의 시간
    관계  운영체제(리눅스)가 부팅시 마다 CMOS의 시간을 가져와서 운영체제에 적용함.
 따라서 운영체제의 시간이 CMOS시간에 다소 종속됨.
 변경방법 clock(hwclock)명령어로 CMOS시간을 변경할 수 있음.  data명령어로 운영체제의
 시간을 변경할 수 있음.


* CMOS의 시각과 시스템 시각을 가각 확인하기

CMOS의 시각을 확인하고자 할때에는 clock명령어에 -r옵셕을 사용한다.

[root@inter-devel ~]# clock -r
2009년 10월 14일 (수) 오후 11시 09분 45초  -0.091976 seconds
[root@inter-devel ~]#


리눅스서버의 시스템(운영체제)시각을 확인하고자 한다면 date 명령어를 사용한다.

[root@inter-devel ~]# date
2009. 10. 14. (수) 23:11:33 KST
[root@inter-devel ~]#


* 리눅스시스템시각으로 CMOS시각 설정하기

대부분의 리눅스시스템의 시각은 cron에서 주기적으로 맞추는 설정을 해두게 되므로 리눅스시스템의 시각이 CMOS의 시각보다는 정확하다고 생각하므로 리눅스시스템의 시각으로 CMOS의 시각을 설정하기 위하여 "clock -w"로 CMOS 시각을 수정하였다.

 [root@inter-devel ~]# clock -w


* CMOS의 시각으로 리눅스시스템 시각을 설정한다.

이번에는 반대로 CMOS시각으로 리눅스시스템의 시각을 설정한 것이다.

 [root@inter-devel ~]# clock -s


* CMOS로 시스템시각설정 후 다시 CMOS시각을 설정하기

clock명령어에서  -a옵션을 사용하면 /etc/adjtime파일에서 3가지의 숫자를 읽어서 그 값을 참조하여 CMOS의 시각으로 리눅스시스템의 시각을 설정한 후에 다시 CMOS의 시각을 설정한다. 

 [root@inter-devel ~]# clock -a


2. date

사용예 #1

[root@host1 root]# date
2003. 09. 09. (화) 15:58:42 KST
[root@host1 root]#

위의 예는 현재 서버의 날짜와 시간을 확인한 것이다.

사용예 #2

다음은 현재 서버의 날짜와 시간을 새롭게 설정한 것이다.

[root@host1 root]#
date 050601012003
2003. 05. 06. (화) 01:01:00 KST
[root@host1 root]#
[root@host1 root]# date
2003. 05. 06. (화) 01:01:06 KST
[root@host1 root]#

위의 예에서 새롭게 설정한 날짜와시간은 2003년 5월 6일 01시 01초입니다. 그리고 date라는 명령어로 새롭게 설정된 날짜와 시간을 확인한 것이다.

위와 같이  date로 날짜와시간을 새롭게 설정할 때에는  "date MMDDhhmmYY" 와 같은 형식을 사용하면 된다. 그리고 각 인수들은 아래와 같은 의미를 가지고 있다. 서버의 날짜와 시간을 새롭게 설정할 수 있는 권한은 오로지 root만이 할 수 있다.

       MM     월
       DD      월 중 일
       hh        시
       mm      분
       CC      연도의 처음 두 숫자 (선택적)
       YY      연도의 나중 두 숫자 (선택적)
       ss         초 (선택적)


또한 date는 지정된 형식에 맞는 출력을 할 수 있다. 즉 형식에 맞는 출력을 하고자 한다면 "%"지시자를 사용하여 아래 설정된 문자를 앞에 붙여 사용한다.

       시간 필드:

       %H     시 (00..23)
       %I     시 (01..12)
       %k     시 ( 0..23)
       %l     시 ( 1..12)
       %M     분 (00..59)
       %p     로케일의 AM 또는 PM
       %r     시간, 12-시간제 (hh:mm:ss [AP]M)
       %s     1970-01-01 00:00:00 UTC (비표준 확장기능)로 부터 경과된 초
       %S     초 (00..61)
       %T     시간, 24-시간 (hh:mm:ss)
       %X     로케일에서 정의한 시간 표현(%H:%M:%S)
       %Z     시간대 (에, EDT), 시간대를 결정할 수 없는 때는 아무 값도 출력하지 않는다.

       날짜 필드:

       %a     로케일의 약식 요일 이름 (Sun..Sat)
       %A     로케일의 완전한 요일 이름, 가변 길이 (Sunday..Saturday)
       %b     로케일의 약식 월 이름 (Jan..Dec)
       %B     로케일의 완전한 월 이름, 가변 길이 (January..December)
       %c     로케일의 날짜와 시간 (Sat Nov 04 12:02:33 EST 1989)
       %d     월 중 일 (01..31)
       %D     날짜 (mm/dd/yy)
       %h     %b 와 동일
       %j     연 중 일 (001..366)
       %m     월 (01..12)
       %U     연 중 주 번호, 일요일을 주의 첫번째 날로 생각 (00..53)
       %w     요일 번호 (0..6), 0 은 일요일
       %W     연 중 주 번호, 월요일을 주의 첫번째 날로 생각 (00..53)
       %x     로케일의 날짜 표현식 (mm/dd/yy)
       %y     연 중 일의 마지막 두 숫자 (00..99)
       %Y     연 (1970...)

 

또한 date는 다음과 같은 옵션을 이용하여 다양한 출력형식을 표현할 수 있다. 

       -d datestr, --date datestr

위의 옵션은 datestr에 지정된 형식대로 출력을 하게된다. 쉬운 예부터 보도록 하자.

아래의 예는 지금으로 부터 5일전의 날짜와 시간정보를 확인하고할때 사용하는 옵션이다.

[root@host1 root]# date --date '5 days ago'
2003. 09. 04. (목) 17:02:51 KST
[root@host1 root]#

다음의 예는 5개월하고 3일전의 날짜와 시간정보를 출력하는 예이다.

[root@host1 root]# date --date '5 months 3 day'
2004. 02. 12. (목) 17:03:48 KST
[root@host1 root]#

 

올해 크리스마스 날짜를 출력하는 예입니다.

[root@host1 root]# date --date '25 Dec' +%j
359
[root@host1 root]#


3. rdate

[root@host1 root]# rdate -p time.bora.net
rdate: [time.bora.net]  Tue Sep  9 11:44:25 2003


그리고 다음은 date명령어로 현재 시스템의 날짜시간정보가 맞는가를 확인하였다.
그리고 현재 시스템의 날짜시간정보가 틀리다는 것을 확인하고 원격지의 타임서버에서 날짜시간정보를 가져와서 현재 시스템에 적용을 한 것이다
날짜시간설정을 하려면 -s옵션을 사용해야한다. 아래는 그 예이다.

[root@host1 root]# date                                    (현재시스템의 날짜시간정보 확인)
2003. 09. 07. (일) 01:30:01 KST
[root@host1 root]#
[root@host1 root]# rdate -s time.bora.net          (타임서버에서 날짜시간정보를 가져와 적용함)
[root@host1 root]#
[root@host1 root]# date                                    (현재시스템의 변경적용된 날짜시간정보 확인)
2003. 09. 09. (화) 11:45:40 KST
[root@host1 root]#

참고로 사용할 수 있는 타임서버(Time Server)의 종류로는 다음과 같은 것들이 있다.
time.bora.net
time.kriss.re.kr

참고로 date명령어는 현재시스템의 날짜와 시간정보를 확인하고 직접 변경할 수 있는 명령어이다.  date의 자세한 설명은 date명령어편을 참고바란다.

그리고 서버를 직접 관리하시는 분들께서는 매번 이런 시간을 직접 맞추어야하는 번거로움이 있을 것이다. 이런 경우에는 다음과 같이 /etc/rc.d/rc.local 파일에 명령어를 넣어 두거나 주기적인 시간설정을 위해 cron에 넣어두기도 한다.

/etc/rc.d/rc.local 파일에 넣는 예

  ## Set the date & time ##
/usr/bin/rdate -s time.kriss.re.kr
/sbin/clock -w

다음은 cron파일에 설정하는 예이다.

 00 01 * * * su - root /usr/bin/rdate -s time.bora.net && /sbin/clock -w


4. ntp

NTP는 Network Time Protocol 약자로서 rdate와 비슷한 기능을 제공한다. ntpdate는 rdate를 이용한 방법보다 시간을 0.01초 이하의 오차로 맞출 수 있다.

 ntpdate는 rdate와 다르게 별도 설치 작업이 필요하다.


# rpm -qa | grep ntp 명령으로 "ntp-버젼"이 출력되지 않으면

# yum install ntp   또는 
   
http://rpmfind.net 에서 "ntp" 로 검색해서 배포판에 해당하는 패키지를 설치한다.

ex1) OS : Fedora Core 3 
#wget
ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm

#rpm -Uvh ntp-4.2.0.a.20040617-4.i386.rpm

ex2) #rpm -Uvh ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm



동기화하는 방법은 rdate와 같으며, rdate 명령부분에 아래와 같이 입력하면 된다.

 # ntpdate time.kriss.re.kr

 
* 재부팅시 자동 날짜시간정보 사용하기

## Set the date & time ##
/usr/sbin/ntpdate time.kriss.re.kr

/sbin/clock -w


 * 주기적으로 cron에 의한 날짜시간정보 적용

  00 01 * * * su - root /usr/sbin/ntpdate time.kriss.re.kr && /sbin/clock -w


어느 것을 사용하시든 시간이 동기화 되어 local time 이 바뀌게 된다.

다음은 cron파일에 설정하는 예이다.

[사내서버 NTP 시간동기화 crontab 설정]
55 23 * * * /sniper/ntp/bin/ntpdate 100.1.110.10 && /sbin/hwclock --systohc 1>/dev/null 2>/dev/null
[사외서버 NTP 시간 동기화 crontab 설정]
55 23 * * * /sniper/ntp/bin/ntpdate 168.78.201.102 && /sbin/hwclock --systohc 1>/dev/null 2>/dev/null


[참조]
고수가 되기위한 리눅스실무기술 - 박성수 저(수퍼유저코리아), 745page 시스템날짜와 시간관리편

[자료출처]
date명령어 - http://www.linux.co.kr/home/lecture/index.php?cateNo=1&secNo=28&theNo=&leccode=244
rdate명령어 - http://www.linux.co.kr/home/lecture/index.php?cateNo=1&secNo=28&theNo=&leccode=245
ntp명령어 - http://blog.naver.com/kwi3094/120042965234
rdate활용 - http://nobless_05.blog.me/50084815034
ntp관련 - http://kldp.org/node/94853
종합 - http://blog.naver.com/yswon72/91139665

Posted by @dmin @dmin

댓글을 달아 주세요