(二)rdate
(a) 該公用程式的所在系統及路徑

/usr/bin/rdate

(b) 該公用程式所使用的 shared library:

[sssun][/root] ldd /usr/bin/rdate
libc.so.6 => /lib/libc.so.6 (0x4002d000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

(c)該公用程式的主要用途說明:

經由網路上的主機查詢時間

語法:rdate [-p] [-s] [host...]

rdate經由TCP/IP網路來連接某個RFC 868的time server,之後印出傳回的時間,並/或 設定本機的系統時間。

最早使用的網路時間協定是RFC-867(port 13)和RFC-868(port 37)。 Day Time Protocol送出的碼都是ASCII碼,直接表示日期、年份、時間及時區。Time Protocol 送的是32 bits的binary number,以二進位表示自西元1900年1月1日0時開始的秒數, 時區都是格林威治時區。而Day Time Protocol和Time Protocol都只能表示到秒,而 且並沒有估算網路的延遲。

rdate這個指令,可向其他UNIX工作站取時間,如果的要求不是很高,在區域網路中有 一定的方便性。

Network Time Protocol使用port 123,64 bits的binary number,前32 bits和Time Protocol一樣,後32 bits用以表示秒以下的部份,並加上網路傳遞延遲量的估計。理 論上可以精確到2的-32次方秒,實際使用上大約只能有50 ms(廣域網路)左右,在區 域網路可達1ms。

(d)該公用程式所支援的參數及其意義:

-p 印出由遠端主機所傳回的時間。
-s 將系統時間設為傳回的時間。

(e)各種使用範例:

[sssun][/root] rdate -p -s clock.nthu.edu.tw
[clock.nthu.edu.tw] Sun Sep 30 00:25:48 2001
將我的主機與clock.nthu.edu.tw這部主機校時。

(f)其他:

台灣區的校時主機為:time.stdtime.gov.tw / clock.stdtime.gov.tw ,位於新竹的

〝時間與頻率國家標準實驗室〞所設置的,而我常用的主機是clock.nthu.edu.tw,位

於清大的機器。

rdate用處是校時,校時後呢,Linux的系統時間會和校時主機相同,但是BIOS內的 clock並不會做改變,在下次開機後Linux又會回到BIOS的時間了。

要將Linux校時所得的值寫入RealTimeColck,可用clock -w這個指令。

因此,我在我的Linux下將/etc/rc.d/rc.local加入這兩行:
rdate -s clock.nthu.edu.tw
clock -w
在每次一開機後,就會自動向clock.nthu.edu.tw要標準時間,並寫入我的BIOS內。

之後,我可以要我的機器每天校時一次,可以用crontab -e寫下:

0 4     /usr/bin/rdate -s clock.nthu.edu.tw
1 4     /sbin/clock -w
每天4點整查詢標準時間,並於4點1分寫入BIOS。

或者可在/etc/cron.daily這個目錄下寫個clock.cron的檔,內容為: /usr/bin/rdate -s clock.nthu.edu.tw && /sbin/clock -w
如果一來,每天跑的crond就會幫你校時並寫入BIOS內了。

校時的工作看來也許不重要,但在分散式系統上的時間同步就不得不注意了,許多NFS 的應用系統,也是使用rdate基本的觀念,以某一個 master server 的 clock 為主, 其它的client端定時跑rdate,將時間調整成和這個server的一樣的時間,分散式系統 誤差就會在一的誤差範圍內了(在前面有說明,區域網路內可達1ms)。