강좌
클라우드/리눅스에 관한 강좌입니다.
네트워크 분류

리눅스에서 시간개념과 date, hwclock으로 시간설정하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스에서 시간개념과 date, hwclock으로 시간설정하기 






리눅스시스템의 날짜와 시간관리 개념 잡기

 

 

 

 

 

리눅스시스템에는 하드웨어 시간과 운영체제의 시간이 별도로 존재한다.

 

 

 

 2가지 개념의시간이 존재한다.

 

 

 

 하드웨어의 시간은 메인보드에 있는 CMOS의 시간(ROM-BIOS에서 인식하고 있는 시간)을 의미하는 것으로 hwclock명령어로 확인하고 재설정한다.

 

 

 

 반면 운영체제의 시간은 리눅스시스템(리눅스커널)에서 인식하고 있는 시간을 의미하는 것으로서 date명령어로 확인하고 재설정할 수 있다.

 

 

 

 먼저 결론부터 말하자면 이번에 배울 내용은 hwclock date, 그리고 rdate에 대한 사용법이다.

 

 

 

 하지만 정확한 개념을 알고 사용하는 것과 그냥 사용법만을 알고 사용하는 것은 하늘과 땅 차이다.

 

 

 

 이제 그 하늘과 땅사이에 어떤 차이점이 있는가를 알려주겠다.

 

 

 

 

 

리눅스 시스템은 새로 부팅을 하거나 재부팅을 할 때에 하드웨어의 CMOS에서 날짜 및 시간정보를 가져와서 그 값을 그대로 인식한다.

 

 

 

 결론적으로 리눅스커널이 인식하고 있는 운영체제의 시간은 하드웨어(CMOS)의 시간값에 종속적이다.

 

 

 

 만약 CMOS의 시간이 틀리게 설정되어 있다면 부팅후에 커널(운영체제)이 인식하는 시간값도 그대로 틀리게 인식되어 진다.

 

 

 

 물론 이런 경우에 정확한 시간을 갖도록 하는 해결방법이 여러가지가 있다.

 

 

 

 이제 이런 해결방법에 대해서 알아볼 것이다.

 

 

 

 

 

리눅스시스템에서 시간에 관한 명령어는 hwclock date 2가지의 명령어가 있다고 앞에서설명하였다.

 

 

 

 hwclock명령어는 하드웨어의 시간(CMOS 또는 ROM-BIOS의 시간)을 관리(확인 및 설정)하는 명령어이고, date명령어는 운영체제(커널)의 시간을 관리(확인 및 설정)하기 위한 명령어이다.

 

 

 

 

 

hwclockCMOS의 시각을 설정 및 확인할 수 있는 명령어이다.

 

 

 

  하지만 hwclock은 하드웨어의 시간을 가져와서 운영체제의 시간을  재설정할 수도 있으며, 반대로 운영체제 시간을 가져와서  하드웨어(CMOS)의 시간을 재설정할 수도 있다.

 

 

 

 그리고  date명령어는 단순히 시스템(리눅스 운영체제) 즉 운영체제의 시각을 설정하는 것이며 서버의 CMOS시각을 설정할 수는 없다.

 

 

 

 리눅스시스템(운영체제)이 부팅될 때에는 CMOS의 시각이 운영체제에 넘겨져서 부팅시 초기시각으로 설정된다.

 

 

 

 따라서 부팅시마다 지속적으로 정확한 시각설정이 필요하다면 hwclock명령어로 CMOS의 시각을 정확하게 설정해 두어야한다.

 

 

 

 이상과 같이 설명한 내용을 깔끔하게 다음과 같이 표로 정리해 보았다.

 

 

 

 

 

 

[하드웨어 시간과 운영체제시간의 구분]

 

 

   

하드웨어시간

운영체제시간

 

   

메인보드에 있는 CMOS의 시간

ROM-BIOS에서 인식하고 있는 시간

리눅스시스템의 시간

리눅스 커널의 시간

   

하드웨어적인 의미의 시간

소프트웨어적인 의미의 시간

   

운영체제(리눅스)가 부팅시 마다 하드웨어의 시간을 가져와서 운영체제에 적용함. 따라서 운영체제의 시간이 하드웨어시간에 다소 종속됨.

변경방법

hwclock명령어로 하드웨어시간을 변경할 수 있음.

date명령어로 운영체제의 시간을 변경할 수 있음.

 

 

 

 

결론적으로 리눅스시스템의 정확한 시간관리를 하기위해서 하드웨어시간개념과 운영체제시간개념을 정확하게 인식하고 있어야한다.

 

 

 

 

 

 

 

 

하드웨어의 시간과 운영체제의 시간을 확인해 보자.

 

 

 

 

, 그렇다면 이제 하드웨어의 시간을 확인해 보도록 하자.

 

 

 

다음 예와같이 현재 시스템의 하드웨어 시간을 확인하려면 “hwclock -r”을 실행하면 된다.

 

 

 

 즉 아래 출력된 시간값은 하드웨어 메인보드에 있는 CMOS의 현재 시간값이다.

 

 

 

 

 

[root@sulinux ~]#hwclock -r

Fri Feb 27 16:28:10 2009  -0.642714 seconds

[root@sulinux ~]#

 

 

 

 

이번에는 운영체제의 시간을 확인해 보도록 하자.

 

 

 

다음 예와같이 운영체제의 시간을 확인하고자 할 때에는 “date”라고만 하면된다.

 

 

 

 

 

 즉 아래 출력된 시간값은 현재 운영체제인 리눅스커널이 인식하고 있는 시간값이다.

 

 

 

 

 

[root@sulinux ~]#date

Fri Feb 27 16:28:34 KST 2009

[root@sulinux ~]#

 

 

 

 

 

 

 

hwclock으로 하드웨어 시간과 운영체제 시간을 재설정하기

 

 

 

 

 

앞에서 hwclock을 이용하여 하드웨어 시간과 운영체제 시간을 모두 재설정할 수 있다고 배웠다.

 

 

 

 이에 대한 실제 예를 보도록 하자.

 

 

 

먼저, 현재 커널(운영체제)의 시간을 참조하여 CMOS의 시간을 재설정하는 예로서 hwclock명령어의 -w옵션을 사용한다.

 

 

 

 즉 다음은  hwclock을 실행하여 운영체제의 시간을 참조하여 하드웨어의 시간을 재설정한 예로서 운영체제의 현재시간과 동일하게 하드웨어의 시간을 재설정한 것이다.

 

 

 

 

 

[root@sulinux ~]#hwclock -w

[root@sulinux ~]#

 

 

 

 

그런 다음 다시 한번 하드웨어의 시간을 확인하기 위하여 “hwclock -r”을 실행해 보았다.

 

 

 

 

 

[root@sulinux ~]#hwclock -r

Fri Feb 27 16:32:46 2009  -0.944726 seconds

[root@sulinux ~]#

[root@sulinux ~]#date

Fri Feb 27 16:32:44 KST 2009

[root@sulinux ~]#

 

 

 

 

위의 두 결과가 출력된 포맷은 좀 다르지만 날짜와 시간값은 동일하다는 것을 알 수 있다.

 

 

 

즉 하드웨어의 시간값과 운영체제의 시간값이 동일해졌음을 알 수 있다.

 

 

 

 

 

이번에는 앞의 경우와 반대로 CMOS시간을 참조하여 운영체제(커널)의 시간을 변경하는 실제 예를 보도록 하자.

 

 

 

즉 다음 예와같이 hwclock -s옵션을 사용하면 CMOS의 시간을 가져와서 현재 운영체제의 시간을 재설정한다.

 

 

 

 

 

[root@sulinux ~]#hwclock -s

[root@sulinux ~]#

 

 

 

 

위의 실행결과를 확인하기 위하여 다음과 같이 다시한번 hwclock date를 실행해 보았다.

 

 

 

 당연한 결과이겠지만 운영체제의 시간값이 CMOS의 시간값과 동일해졌음을 알 수 있다.

 

 

 

 

 

[root@sulinux ~]#hwclock -r

Fri Feb 27 16:35:27 2009  -0.395301 seconds

[root@sulinux ~]#

[root@sulinux ~]#date

Fri Feb 27 16:35:28 KST 2009

[root@sulinux ~]#

 

 

 

 

 

커널(운영체제)의 날짜 및 시간을 확인하고 재설정하기

 

 

 

 

앞에서 우리는 hwclock의 사용방법과 그 목적에 대해서 알아보았다.

 

 

 

 이번에는 운영체제 날짜 시간관리 전용명령어인 date에 대해서 알아보자. date명령어에서 무엇보다 중요한 것은 hwclock명령어와의 정확하게 구분해야 한다는 점이다.

 

 

 

 date명령어는 운영체제(리눅스, 커널자체)의 시간을 설정하는 명령어라고 한다면 hwclock명령어는 서버자체(하드웨어) CMOS(ROM-BIOS)의 시간을 설정하고 적용하는 명령어이다.

 

 

 

 먼저 예를 보면서 실제 사용방법을 보도록 하자. 다음은 현재 커널(운영체제)의 시간을 확인한 것이다.

 

 

 

 

 

[root@sulinux ~]#date

Fri Sep 30 01:01:01 KST 2011

[root@sulinux ~]#



 

 

이제 커널의 현재 날짜시간을 다음과 같이 재설정해 보도록 하자. 물론 date로 커널의 시간을 재설정하는 것은 하드웨어의 시간에는 전혀 영향을 주지 않는다.

 

 

 

 

 

[root@sulinux ~]#date 071501012012

Sun Jul 15 01:01:00 KST 2012

[root@sulinux ~]#

[root@sulinux ~]#date

Sun Jul 15 01:01:01 KST 2012

[root@sulinux ~]#

 

 

 

 

위의 예에서 071501012012의 표기형식은 MMDDhhmmCCCC이다.

 

 

 

 MM은 월, DD는 일, hhmm은 시분이며 CCCC는 년도를 의미한다.

 

 

 

 표기방식이므로 크게 신경쓸 필요는 없다.

 

 

 

 표기방식을 모른다면 man페이지를 참고해보면 잘 설명되어 있다.

 

 

 

 중요한 것은 date로 시스템 날짜시간값을 변경하는 방법과 그 의미이다.

 

 

 

 

 

 

 

원격타임서버와 날짜시간 동기화 시키기

 

 

 

 

우리는 앞에서 설명한 방법을 이용하여 주기적으로 시간은 관리해야하는 것을 알았다.

 

 

 

 하지만 매번 직접 확인하고 날짜시간값을 변경해야 한다면 다소 귀찮은 일이 될 수도 있다.

 

 

 

 이런 경우에 자동으로 한번씩 운영체제의 시간을 정확하게 맞출 수 있다면 매우 효율적일 것이다.

 

 

 

 즉 각 나라 및 지역에는 타임서버라는 것이 있어서 그 서버의 시간값과 동기화를 시키면 애써 date명령어로 날짜시간을 재설정하지 않아도 자동으로 설정하도록 할 수 있다.

 

 

 

 

 

결론적으로 rdate라는 명령어를 이용하는 것인데 rdate는 지정한 원격타임서버의 시간과 현재 시스템의 운영체제 시간을 동기화하는 작업을 한다.

 

 

 

 즉 지정한 원격지의 타임서버로부터 날짜시간정보를 받아와 보여주거나 날짜시간을 재설정하는 역할을 한다고 정리할 수 있다.

 

 

 

 

 

먼저 다음 예와같이 rdate명령어에 -p옵션을 사용하면 지정한 원격지의 타임서버(아래의 예에서는 time.bora.net)에서 시간정보를 가져와서 보여준다.

 

 

 

 

 

[root@sulinux ~]#rdate -p time.bora.net

rdate: [time.bora.net]  Sat Feb 28 14:14:57 2009

 

[root@sulinux ~]#

 

위의 예는 원격지 타임서버의 시간값을 확인한 것이다.

 

 

 

 이번에는 원격지 타임서버의 시간값과 현재 시스템의 운영체제 시간을 동기화하는 작업을 해보자. 다음과 같이 현재 시스템의 날짜시간설정을 원격타임서버와 동기화하려면 rdate명령어에 -s옵션을 사용해야 한다.

 

 

 

 

 

[root@sulinux ~]#date

Sun Jul 15 01:10:02 KST 2012

[root@sulinux ~]#

[root@sulinux ~]#rdate -s time.bora.net

[root@sulinux ~]#

[root@sulinux ~]#date

Sat Feb 28 14:17:08 KST 2009

[root@sulinux ~]#

 

 

 

 

위의 예에서 원격지 타임서버인 time.bora.net의 시간정보와 현재 시스템의 운영체제시간정보가 동일해졌다는 것이다.

 

 

 

 잊지말아야 할 것은 하드웨어시간 즉 CMOS의 시간값은 변경되지 않는다는 점이다.

 

 

 

 즉 그냥 운영체제의 시간값만 변경이 된다는 점을 잊지마시라.

 

 

 

그리고 시스템을 재부팅할 때마다 이러한 동기화작업을 하려면 /etc/rc.d/rc.local 파일에 다음과 같은 설정을 해두면 된다.

 

 

 

 

 

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

 

 

 

 

결론적으로 위의 설정의미는 time.kriss.re.kr 타임서버로부터 시각정보를 가져와서 현재 운영체제의 시간을 재설정한다.

 

 

 

 (/usr/bin/rdate -s time.kriss.re.kr)  그리고 재설정된 운영체제의 시간을 참고하여 하드웨어의 시간정보를 재설정한다.

 

 

 

 (/sbin/hwclock -w) 즉 이와 같이 해두면 하드웨어(CMOS)의 시간정보를 재설정하였기 때문에 다음 재부팅시에는 현재 재설정된 시각정보를 그대로 적용하게 된다.

 

 

 

 

 

만약 약 1년에 한번정도 시스템을 재부팅한다면 위의 설정이 다소 무의미할 수 있다.

 

 

 

 이런 경우에는 크론설정을 약간 이용하면 된다.

 

 

 

 즉 시스템부팅과 관계없이 주기적으로 원격타임서버와 동기화하도록 크론(cron)설정해둔다.

 

 

 

 cron설정은 시스템의 계정사용자라면 누구나 사용할 수 있지만 시스템의 전체적인 날짜시간정보를 적용하려면 반드시 root권한으로 root cron설정을 해야한다.

 

 

 

 그냥 root권한으로 "crontab -e"하면 vi모드로 root cron파일(/var/spool/cron/root파일)을 직접 편집할 수 있다.

 

 

 



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



 

 

위의 설정의 의미는 매일 새벽 01시 정각에 time.bora.net타임서버와 동기화하게 된다.

 

 

 

 이렇게 설정해 두면 이 시스템의 운영체제 시간은 원격타임서버의 시간값과 동일하게 유지될 것이다.

 

 

 

 즉 시스템관리자가 직접 시간을 재설정하지 않아도 자동으로 재설정하게 된다.

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,031 명
  • 현재 강좌수 :  35,771 개
  • 현재 접속자 :  162 명