서버와 운영체제, 네트워크 장비를 비롯하여 거의 모든 하드웨어 장비들에 있어서 시간 동기화는 매우 중요합니다.

현재는 주로 NTP(Network Time Protocol) 프로토콜을 이용하고 있으나, 정밀 시각 설정과 동기화가 필요할 경우에는 PTP(Precision Time Protocol) 프로토콜을 이용하기도 합니다.


장비 운영에 있어 실시간 연동이 이루어지고, 장애 처리나 디버깅 등에 있어 OS 운영체제의 시간 동기화는 기본이 되는 항목이며, NTP나 PTP등 시간 동기화를 실행하기 어려운 경우 아래와 같이 하드웨어나 운영체제의 시간을 수동으로 설정하는 방법에 대해 알려드리도록 하겠습니다.


윈도우10에서 멀티 OS로 리눅스가 설치되어 있지 않은 PC에서 bash 로만 실행해 보았습니다.

학습용 또는 기본적인 리눅스 운영체제를 학습하기에는 우분투나 데비안, 센토스 등을 설치하지 않고도 bash 쉘로 공부가 가능하니 참고하시기 바랍니다.


다들 아시다시피 리눅스에서 시간을 확인하는 명령어는 date 이며, 프롬프트에서 date 명령을 실행하면 아래와 같이 현재 시간이 출력됩니다.


리눅스 date


리눅스 bash 쉘에서 date 명령을 실행하자 현재 시간이 표시되었습니다.

자, 여기서 date 명령 옵션값을 이용하여 시간을 수동으로 맞춰보도록 하겠습니다.


date -s 옵션을 이용합니다.


date -s


운영체제의 시간은 위와 같이 설정 가능하고, 현재 bash 쉘로 설정되어 윈도우10 운영체제에서 설정된 기본 시간으로 다시 되돌아가게 되지만, 독립적인 운영체제에서는 시간이 수동으로 제어됩니다.


date 명령의 여러 기능과 옵션을 확인하기 위해서는 --help 또는 man 을 실행하시면 됩니다.


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

root@DESKTOP-65DF1I8:/# date --help

사용법: date [옵션]... [+포맷]

  또는:  date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Display the current time in the given FORMAT, or set the system date.


Mandatory arguments to long options are mandatory for short options too.

  -d, --date=STRING          display time described by STRING, not 'now'

  -f, --file=DATEFILE        like --date; once for each line of DATEFILE

  -I[FMT], --iso-8601[=FMT]  output date/time in ISO 8601 format.

                               FMT='date' for date only (the default),

                               'hours', 'minutes', 'seconds', or 'ns'

                               for date and time to the indicated precision.

                               Example: 2006-08-14T02:34:56-0600

  -R, --rfc-2822             output date and time in RFC 2822 format.

                               Example: Mon, 14 Aug 2006 02:34:56 -0600

      --rfc-3339=FMT         output date/time in RFC 3339 format.

                               FMT='date', 'seconds', or 'ns'

                               for date and time to the indicated precision.

                               Example: 2006-08-14 02:34:56-06:00

  -r, --reference=FILE       display the last modification time of FILE

  -s, --set=STRING           set time described by STRING

  -u, --utc, --universal     print or set Coordinated Universal Time (UTC)

      --help     이 도움말을 표시하고 끝냅니다

      --version  버전 정보를 출력하고 끝냅니다


FORMAT controls the output.  Interpreted sequences are:


  %%   a literal %

  %a   locale's abbreviated weekday name (e.g., Sun)

  %A   로케일의 전체 요일 이름 (예., 일요일)

  %b   로케일의 줄인 월 이름 (예., Jan)

  %B   로케일의 전체 월 이름 (예., January)

  %c   로케일의 날짜와 시간 (예., 2005년 3월 3일 목요일 23시 05분 25초)

  %C   century; like %Y, except omit last two digits (e.g., 20)

  %d   day of month (e.g., 01)

  %D   date; same as %m/%d/%y

  %e   day of month, space padded; same as %_d

  %F   전체 날짜; %Y-%m-%d와 같음

  %g   ISO 주 번호의 년도의 마지막 두 숫자 (%G 참조)

  %G   ISO 주 번호의 년도 (%V 참조); 보통 %V만으로도 유용함

  %h   %b와 같음

  %H   시 (00..23)

  %I   시 (01..12)

  %j   연 중 일 (001..366)

  %k   hour, space padded ( 0..23); same as %_H

  %l   hour, space padded ( 1..12); same as %_I

  %m   month (01..12)

  %M   minute (00..59)

  %n 새 행

  %N 나노 초 (000000000..999999999)

  %p 로케일에 정의한 AM 또는 PM과 같은 값; 없으면 공란

  %P %p와 같으나 소문자로

  %r 로케일에 정의한 12시간제 시간 (예, 11:11:04 PM)

  %R 24시간제 시와 분; %H:%M 와 같음

  %s 1970-01-01 00:00:00 UTC 부터의 초 값

  %S 초 (00..60)

  %t  탭 문자

  %T 시간; %H:%M:%S와 같음

  %u 주 중 일 (1..7); 1은 월요일

  %U   주의 시작일을 일요일로 할 때, 연 중 주 번호 (00..53)

  %V   주의 시작일을 월요일로 할 때, ISO 주 번호 (01..53)

  %w   주 중 일 (0..6); 0은 일요일

  %W   주의 시작일을 월요일로 할 때, 연 중 주 번호 (00..53)

  %x 로케일의 날짜 표현 (예., 99/12/31)

  %X 로케일의 시간 표현 (예., 23:13:48)

  %y 연도의 끝 두자리 (00..99)

  %Y 연도

  %z   +hhmm numeric time zone (e.g., -0400)

  %:z  +hh:mm numeric time zone (e.g., -04:00)

  %::z  +hh:mm:ss numeric time zone (e.g., -04:00:00)

  %:::z  numeric time zone with : to necessary precision (e.g., -04, +05:30)

  %Z   alphabetic time zone abbreviation (e.g., EDT)


By default, date pads numeric fields with zeroes.

The following optional flags may follow '%':


  -  (hyphen) do not pad the field

  _  (underscore) pad with spaces

  0  (zero) pad with zeros

  ^  use upper case if possible

  #  use opposite case if possible


플래그들 다음에는 선택 필드 너비가 10진 숫자로 옴;

그 다음은 아래 중 하나의 선택 수정자가 옴

E 쓸 수 있다면 로케일의 또다른 표현 방식을 사용, 또는

O 쓸 수 있다면 로케일의 또다른 수치 기호들을 사용.


Examples:

Convert seconds since the epoch (1970-01-01 UTC) to a date

  $ date --date='@2147483647'


Show the time on the west coast of the US (use tzselect(1) to find TZ)

  $ TZ='America/Los_Angeles' date


Show the local time for 9AM next Friday on the west coast of the US

  $ date --date='TZ="America/Los_Angeles" 09:00 next Fri'


GNU coreutils online help: <http://www.gnu.org/software/coreutils/>

Report date translation bugs to <http://translationproject.org/team/>

Full documentation at: <http://www.gnu.org/software/coreutils/date>

or available locally via: info '(coreutils) date invocation'

root@DESKTOP-65DF1I8:/#

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


이 외에 아래와 같이 하드웨어의 시간도 운영체제와 동기화를 시켜주는 것이 일반적인데요, 이때에는 hwclock 명령을 이용하시면 됩니다.


# hwclock -r (현재 하드웨어 시간 확인)

# hwclock -s (하드웨어 시간으로부터 시스템 시간을 수동으로 설정)

# hwclock -w (시스템 시간으로부터 하드웨어 시간을 수동으로 설정)


--help 명령으로 명령어 기능과 여러 옵션을 확인할 수 있으니 도움말 페이지를 적극 활용하시기 바랍니다.


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

#root@DESKTOP-65DF1I8:/# hwclock --help

Usage:

 hwclock [function] [option...]

Query or set the hardware clock.

Functions:

 -h, --help           show this help text and exit

 -r, --show           read hardware clock and print result

     --get            read hardware clock and print drift corrected result

     --set            set the RTC to the time given with --date

 -s, --hctosys        set the system time from the hardware clock

 -w, --systohc        set the hardware clock from the current system time

     --systz          set the system time based on the current timezone

     --adjust         adjust the RTC to account for systematic drift since the clock was last set or adjusted

 -c, --compare        periodically compare the system clock with the CMOS clock

     --getepoch       print out the kernel's hardware clock epoch value

     --setepoch       set the kernel's hardware clock epoch value to the value given with --epoch

     --predict        predict RTC reading at time given with --date

 -V, --version        display version information and exit


Options:

 -u, --utc            the hardware clock is kept in UTC

     --localtime      the hardware clock is kept in local time

 -f, --rtc <file>     special /dev/... file to use instead of default

     --directisa      access the ISA bus directly instead of /dev/rtc

     --badyear        ignore RTC's year because the BIOS is broken

     --date <time>    specifies the time to which to set the hardware clock

     --epoch <year>   specifies the year which is the beginning of the hardware clock's epoch value

     --update-drift   update drift factor in /etc/adjtime (requires --set or --systohc)

     --noadjfile      do not access /etc/adjtime; this requires the use of either --utc or --localtime

     --adjfile <file> specifies the path to the adjust file; the default is /etc/adjtime

     --test           do not update anything, just show what would happen

 -D, --debug          debugging mode

root@DESKTOP-65DF1I8:/#

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