在Linux系统中,命令行设置时间是一项基础且重要的操作,涉及系统时间、硬件时间的同步以及时区配置等多个方面,本文将详细介绍如何通过Linux命令行工具进行时间设置、同步及管理,涵盖常用命令、操作步骤及注意事项。

查看当前时间与硬件时间
在设置时间前,需先确认系统时间和硬件时间的状态,系统时间(Software Clock)由Linux内核维护,重启后会丢失;硬件时间(Hardware Clock,即BIOS时间)由主板电池供电,重启后仍保留。
- 查看系统时间:使用
date命令date
输出示例:
Wed Mar 15 14:30:25 CST 2023,显示当前系统时间及时区(CST为中国标准时间)。 - 查看硬件时间:使用
hwclock命令hwclock --show
输出示例:
Wed 15 Mar 2023 02:30:25 PM CST -0.283522 seconds,显示硬件时间及与系统时间的偏差。 
设置系统时间
手动设置系统时间
使用date命令结合格式化字符串设置时间,格式为:date 月日时分年.秒(注意年份需放在最后,且秒为可选)。  

# 设置系统时间为2023年3月15日15:30:00 date 0315153023.00
设置后可通过date命令验证。  
使用timedatectl命令(推荐,适用于systemd系统)
现代Linux发行版(如Ubuntu 16+、CentOS 7+)推荐使用timedatectl管理时间,功能更全面。  
- 设置系统时间:  
timedatectl set-time "2023-03-15 15:30:00"
 - 设置日期和时间:  
timedatectl set-time 2023-03-15 timedatectl set-time 15:30:00
 
设置硬件时间
硬件时间需与系统时间同步,避免重启后时间错误。
- 同步硬件时间与系统时间:  
hwclock --systohc # 将系统时间写入硬件时间
 - 手动设置硬件时间:  
hwclock --set --date="2023-03-15 15:30:00"
 - 查看硬件时间详情:  
hwclock --debug
 
同步网络时间(NTP)
手动设置时间可能存在误差,推荐使用网络时间协议(NTP)自动同步。

使用ntpd或chrony服务
- 安装chrony(推荐,轻量且高效):  
# CentOS/RHEL yum install chrony # Ubuntu/Debian apt install chrony
 - 启动并设置开机自启:  
systemctl start chronyd systemctl enable chronyd
 - 同步时间:  
chronyc -a makestep # 强制同步
 - 查看同步状态:  
chronyc sources
 
使用ntpdate(已逐渐被淘汰)
# 安装ntpdate yum install ntpdate # CentOS apt install ntpdate # Ubuntu # 同步时间(需指定NTP服务器) ntpdate -s time.pool.ntp.org
时区设置
正确的时区是时间准确显示的前提。
查看当前时区
timedatectl status
设置时区
- 使用
timedatectltimedatectl set-timezone Asia/Shanghai
 - 手动修改时区文件  
# 复制对应时区文件到/etc/localtime cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 
时间同步工具对比
| 工具名称 | 特点 | 适用场景 | 
|---|---|---|
date | 
基础命令,手动设置时间 | 简单临时调整 | 
hwclock | 
管理硬件时间,同步系统与硬件时间 | 解决重启后时间错误问题 | 
timedatectl | 
systemd工具,支持时间、时区、NTP管理 | 现代Linux发行版(推荐) | 
chrony | 
轻量级NTP客户端,支持低精度时钟 | 服务器、虚拟化环境 | 
ntpdate | 
简单NTP同步工具,已废弃 | 旧系统临时同步 | 
常见问题与注意事项
- 权限问题:设置时间需root权限,普通用户需使用
sudo。 - 时间偏差大:若硬件时间与系统时间偏差过大,需先同步硬件时间:
hwclock --hctosys(硬件时间→系统时间)。 - NTP同步失败:检查网络连接及防火墙规则(如
iptables需放行UDP 123端口)。 - 虚拟机时间漂移:虚拟机可能因时间同步机制导致时间漂移,建议启用
chrony或VMware Tools的时间同步功能。 
相关问答FAQs
Q1: 为什么使用timedatectl设置时间后,date命令显示的时间仍不正确?
A: 可能原因包括:  
- 未保存设置:
timedatectl修改后需确保服务正常运行(systemctl status chronyd或ntpd)。 - 时区未生效:检查
/etc/localtime是否为正确时区文件,或使用timedatectl set-timezone重新设置。 - 硬件时间未同步:执行
hwclock --systohc将系统时间写入硬件时间。 
Q2: 如何批量设置多台Linux服务器的时间同步?
A: 可通过以下方式实现:  
- 配置NTP服务器:在某一台服务器上搭建NTP服务(如
chrony或ntpd),其他服务器配置该服务器为NTP源。 - 使用Ansible等自动化工具:编写Playbook,通过
command模块批量执行timedatectl或chrony命令。 - Puppet/Chef配置管理:定义时间同步模块,确保所有服务器统一时区和NTP配置。
示例(Ansible): 
- name: Set timezone to Asia/Shanghai command: timedatectl set-timezone Asia/Shanghai
 - name: Install and start chrony yum: name=chrony state=present service: name=chronyd state=started enabled=yes
 
