Linux 時間校正

查詢日期與時間

1. 顯示當前時間與日期

使用 date 指令:

date

2. 顯示月曆

使用 cal 指令:

cal           # 顯示當前年月份月曆
cal 2010      # 顯示 2010 年年曆
cal 6 2010    # 顯示 2010 年 6 月月曆

3. 啟動簡易型計算機

使用 bc 指令:

bc
  • 加法:1 + 2
  • 減法:5 - 3
  • 乘法:4 * 6
  • 除法:7 / 3
  • 餘數:10 % 3
  • 次方:2 ^ 3
  • 開根號:sqrt(9)
  • 小數位設定:scale=2(如 scale=2; 10/3
  • 定義變數:a=10,可再輸入 a+5
  • 離開:輸入 quit

4. 查看指令說明文件

使用 man 指令,例如:

man date

man 模式常用快捷鍵:

  • 空白鍵 / PageDown:下一頁
  • PageUp:上一頁
  • /字串?字串:搜尋字串
  • q:退出說明頁

5. 使用簡易文字編輯器 nano

進入編輯模式:

nano filename

常用快捷鍵:

  • Ctrl + G:顯示說明
  • Ctrl + X:離開
  • Ctrl + O:儲存檔案
  • Ctrl + R:插入其他檔案內容
  • Ctrl + W:搜尋文字
  • Ctrl + C:顯示游標位置
  • Ctrl + -:跳至指定行
  • Ctrl + V / Y:下一頁 / 上一頁
  • Alt + M:啟用滑鼠定位

6. 關機與重啟指令(需 root 權限)

shutdown -h now      # 立即關機
shutdown -r now      # 立即重新開機
shutdown -c          # 取消已設定但尚未執行的關機
shutdown -r 15:30    # 在 15:30 時重新開機
shutdown -h +10      # 十分鐘後關機
reboot               # 立即重新開機

7. 查詢作業系統資訊

uname -a

時間校正(Chrony)

手動調整系統時間

使用 datetimedatectl 查詢時間

date
timedatectl

範例輸出:

Local time: Sun 2022-10-23 14:19:11 CST
Universal time: Sun 2022-10-23 06:19:11 UTC
RTC time: Sun 2022-10-23 14:19:09
Time zone: Asia/Taipei (CST, +0800)
System clock synchronized: no
NTP service: inactive

使用 date 設定時間

date 010112002020    # 設定為 2020-01-01 12:00:00

使用 timedatectl 設定時間

timedatectl set-time "2022-01-10 11:00:00"

使用網路自動校時

安裝並啟用 Chrony

dnf install -y chrony      # RHEL / Rocky / AlmaLinux
systemctl enable --now chronyd

查看校時狀態

chronyc sources

常見狀態符號:

  • ^*:目前同步中且效果良好
  • ^+:可用,但非首選來源
  • ^?:無法聯繫來源

設定校時伺服器

編輯 /etc/chrony.conf

vi /etc/chrony.conf
  • 註解原本的 pool 行:

    ​​# pool 2.cloudlinux.pool.ntp.org iburst
    
  • 新增台灣時間伺服器:

    ​​server watch.stdtime.gov.tw iburst
    

重啟服務並確認:

systemctl restart chronyd
chronyc sources

修改時區

查詢可用時區

timedatectl list-timezones

搜尋特定時區:

timedatectl list-timezones | grep Taipei

設定時區

timedatectl set-timezone Asia/Taipei

Date 格式化輸出

date "+%Y"              # 輸出:2025
date "+%Y%m"            # 輸出:202506
date "+%Y%m%d"          # 輸出:20250623
date "+%Y%m%d_%H%M%S"   # 輸出:20250623_121045

# 將日期儲存成變數
mydate=$(date "+%Y%m%d_%H%M%S")
echo $mydate

系統時間與硬體時間(hwclock)

sudo hwclock                # 顯示硬體時間
sudo hwclock --systohc      # 將系統時間同步至硬體時間
sudo hwclock --hctosys      # 將硬體時間同步至系統時間
sudo hwclock -w             # 寫入硬體時鐘

解決排程與系統時間不同步問題

可能原因:時區設定錯誤或變更後未重啟相關服務。

# 變更時區後重新啟動 cron
sudo systemctl restart cron

# 若仍有問題,重啟 rsyslog 並確認排程紀錄
sudo systemctl restart rsyslog
sudo tail /var/log/syslog | grep CRON