2013. 12. 26. 17:43

[Linux/Ubuntu 시스템 관리] 시간 관리하기 (date, cal, hwclock, ntp)

linux에서는 system clock과 hardware clock, 두개로 나눠진다.

system clock은 file 생성, process 실행, 그리고 날자와 시각이 필요한 곳에 쓰인다. date 명령 혹은 ntpd service를 통해 수동 혹은 자동으로 설정 혹은 조회가 가능하다.

hardware clock은 motherboard의 CMOS 설정과 관련있다. hwclock 명령으로 설정할 수 있다.

이외에도 clockdiff나 uptime등의 명령이 있다.


system clock 정보 표시하고 설정하기


다음과 같이 timezone을 설정할 수 있다.

~$ sudo cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime

~$


현재의 날자와 시각, 그리고 timezone을 표시한다.

~$ date

Thu Dec 26 17:12:37 KST 2013

~$


주, 월, 일, 년을 표시한다.

~$ date '+%A %B %d %G'

Thursday December 26 2013

~$


date 출력에 메시지를 추가한다.

~$ date '+The date today is %F.'

The date today is 2013-12-26.

~$


오늘로 부터 4주뒤를 표시한다.

~$ date --date='4 weeks'

Thu Jan 23 17:13:09 KST 2014

~$


오늘로 부터 8개월 3일 뒤를 출력한다.

~$ date --date='8 months 3 days'

Fri Aug 29 17:13:28 KST 2014

~$


7월 4일의 요일을 표시한다.

~$ date --date='4 Jul' +%A

Thursday

~$


다음과 같이 cal 명령을 사용할 수 있다.

~$ cal

   December 2013      

Su Mo Tu We Th Fr Sa  

 1  2  3  4  5  6  7  

 8  9 10 11 12 13 14  

15 16 17 18 19 20 21  

22 23 24 25 26 27 28  

29 30 31              

                      

~$


다음과 같이 1년치를 볼 수 있다.

~$ cal 2014

                            2014

      January               February               March          

Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  

          1  2  3  4                     1                     1  

 5  6  7  8  9 10 11   2  3  4  5  6  7  8   2  3  4  5  6  7  8  

12 13 14 15 16 17 18   9 10 11 12 13 14 15   9 10 11 12 13 14 15  

19 20 21 22 23 24 25  16 17 18 19 20 21 22  16 17 18 19 20 21 22  

26 27 28 29 30 31     23 24 25 26 27 28     23 24 25 26 27 28 29  

                                            30 31                 

...


Julian 달력이 표시된다.

~$ cal -j

       December 2013         

 Su  Mo  Tu  We  Th  Fr  Sa  

335 336 337 338 339 340 341  

342 343 344 345 346 347 348  

349 350 351 352 353 354 355  

356 357 358 359 360 361 362  

363 364 365                  

                             

~$


다음과 같이 날자와 시각을 변경한다.

~$ sudo date 122801012013

Sat Dec 28 01:01:00 KST 2013

~$


7분 뒤로 설정한다.

~$ date

Thu Dec 26 17:30:56 KST 2013

~$ sudo date --set='+7 minutes'

Thu Dec 26 17:38:00 KST 2013

~$


한달 전으로 간다.

~$ date

Thu Dec 26 17:39:11 KST 2013

~$ sudo date --set='-1 month'

Tue Nov 26 17:39:15 KST 2013

~$


hardware clock 정보 표시하고 설정하기


다음과 같이 hwclock을 사용하여 hardware clock 정보를 가져온다.

~$ date

Thu Dec 26 17:45:05 KST 2013

~$ sudo hwclock -r

Thu 26 Dec 2013 05:31:08 PM KST  -1.043171 seconds

~$


위와 같은 상황에서 hardware clock으로 부터 system clock을 맞추면 다음과 같다.

~$ sudo hwclock --hctosys

~$ date

Thu Dec 26 17:32:09 KST 2013

~$ sudo hwclock -r

Thu 26 Dec 2013 05:32:14 PM KST  -1.041147 seconds

~$


이와 반대로 system clock으로 부터 hardware clock을 맞추면 다음과 같다.

~$ sudo hwclock --systohc

~$


hardware clock은 보통 정확하지 않고, 약간의 오차가 있는데, 이를 보정한다. /etc/adjtime이 사용된다.

~$ sudo hwclock --adjust

~$


다음과 같이 hardware clock을 설정할 수 있다.

~$ sudo hwclock --set --date="12/26/13 17:40:00"

~$ date

Thu Dec 26 17:38:56 KST 2013

~$ sudo hwclock -r

Thu 26 Dec 2013 05:40:08 PM KST  -1.042400 seconds

~$


시간 설정을 위한 Network Time Protocol(NTP) 사용하기


시스템 reboot일 때, 현재 날자와 시각 정보를 Network Time Protocol(NTP) 서버로 부터 가져와 자동으로 설정할 수 있다. 해당 옵션을 사용하는 경우, ntpd daemon을 설치하고, 동기화를 시도한다. 만일, ntpd를 linux 설치 이후에 추가하려고 한다면, sudo apt-get install ntp 명령이 필요할지 모른다.


ntpd를 수동이든 linux 설치시 자동이든, 설치가 되었다면, UDP 123번 port를 listen하는데, 특별한 필요(GPS 수신기가 있다던지, atomic 시계가 있다던지)가 아니라면, 자원의 낭비 혹은 보안 취약점이 발생할 수 있다. 이러한 이유로, 관리자들은 보통 ntpdate(보통 daily cronjob에 포함됨)를 선호한다.


다음과 같이 NTP를 통한 시간 설정이 가능하다.

~$ sudo ntpdate pool.ntp.org

27 Dec 09:31:39 ntpdate[4212]: step time server 143.248.25.208 offset 49.378673 sec

~$


sudo ntpd -qg가 사용되기도 하는데, -q는 첫 시간 설정이후 ntpd를 종료하는 것이며, -g는 1000초를 벗어나는 특별한 경우, 종료되도록 한다.