시간 출력하기와 시계 맞추기

데비안 시스템에서는, /etc/localtime이라는 심볼릭 링크가 어디에 걸려있느냐에 따라 시스템 time zone이 결정된다. 이 링크는 지역 시간대 정보가 있는 time zome 데이터 파일로 링크되어 있으며, time zone 데이터 파일은 /usr/lib/zoneinfo 에 위치해 있다. 아마 다른 리눅스 배포본은 이와는 좀 다를 것이다.

사용자들의 개별적인 지역 시간대는 TZ 환경변수를 통해 설정할 수 있다. 이 환경변수가 설정되어 있지 않다면 해당 시스템의 지역시간대가 적용된다. TZ 변수의 설정 방법은 tzset 매뉴얼 페이지에 설명되어 있다.

현재 시간을 알려면 date 명령을 쓴다. 예를 들어, [1]
$ date
Sun Jul 14 21:53:41 EET DST 1996
$
이렇게 나온다면, 현재 시간은 1996년 7월 14일이며 대략 밤 10시 10분전 쯤 된 것이다. 그리고 이 시간은 `EET DST'(이것은 동부 유럽 일광 절약시간일 것이다)라는 지역시간대에 따른 것이라는 점도 알 수 있다. 또한 date 프로그램은 세계 표준시로도 시간을 알려줄 수 있다.
$ date -u
Sun Jul 14 18:53:42 UTC 1996
Sun Jul 14 18:53:42 UTC 1996
$
date는 커널의 소프트웨어 시계를 맞추는 데도 사용할 수 있다.
# date 07142157
Sun Jul 14 21:57:00 EET DST 1996
# date
Sun Jul 14 21:57:02 EET DST 1996
#
date 명령은 사용법이 좀 헷갈리기 쉬우므로, 좀더 상세한 내용은 해당 매뉴얼 페이지를 살펴보기 바란다. 시간은 오직 root만이 변경할 수 있고, 각 사용자들은 단지 자신의 시간대만 변경할 수 있을 뿐이다. 그러므로 결국 모두 같은 시계를 보고 있는 셈이다.

date는 단지 소프트웨어 시계만을 다룰 수 있다. clock 명령은 하드웨어 시계와 소프트웨어 시계를 동기화 시켜주는데, 이것은 부팅때 하드웨어 시간을 읽어서 소프트웨어 시계를 맞추는 데 쓰인다. 만일 두가지 시계를 모두 맞춰야 한다면, 우선 date로 소프트웨어 시계를 맞추고 clock -w 명령으로 하드웨어 시계를 소프트웨어 시간에 맞추면 된다.

clock-u 옵션을 쓰게 되면 하드웨어 시계가 세계 표준시에 맞춰져 있는 것으로 간주하게 된다. 따라서 -u 옵션은 주의해서 사용해야 한다. 안그러면 컴퓨터가 시간을 상당히 헷갈려할 것이다.

또한 유닉스 시스템의 많은 구성요소들은 시계를 보고 일을 처리하므로, 시간을 변경할 때는 주의를 기울여야 한다. 예를 들어 cron 같은 것은 명령을 주기적으로 실행시키는 데몬인데, 만일 시간을 바꾸게 되면 cron은 언제 명령을 실행시켜야 하는지 혼란스럽게 된다. 유닉스 시스템 초창기에는, 누군가가 시계를 12년 미래로 맞춰놓는 바람에 cron이 12년간 할일을 한번에 해내느라고 버벅여야만 했던 적이 있었다. 물론 지금의 cron은 이런 문제가 없지만, 그래도 역시 주의하여야만 한다. 특히 너무 먼 미래로 시간을 바꾸거나, 과거로 시간을 돌려놓는 일은 아주 위험하다.

Notes

[1]

time 명령과 혼동하지 말자. 이것은 현재 시간을 보여주는 명령이 아니다.