Linux 系统提供了多种日历命令,用于显示当前日期、时间、月历或年历,甚至可以查看特定年份的日历,这些命令虽然功能看似简单,但在 shell 脚本、任务调度或日志分析中非常实用,以下将详细介绍 Linux 中常用的日历命令,包括 date、cal、ncal 等命令的用法及其选项。

date 命令:显示和设置系统时间
date 是 Linux 中最基础的时间命令,默认显示当前系统的日期和时间,格式为“星期 月 日 时分秒 时区 年”。
基本用法
直接输入 date,输出类似:
Wed Nov 15 14:30:25 CST 2023
CST 表示中国标准时间(东八区)。
自定义格式输出
date 支持通过 加格式字符串自定义输出,常用格式符包括:

%Y:四位年份(如 2023)%m:两位月份(01-12)%d:两位日期(01-31)%H:24小时制小时(00-23)%M:分钟(00-59)%S:秒(00-60,60 表示闰秒)%A:完整星期名称(如 Wednesday)%B:完整月份名称(如 November)
示例:
date "+%Y-%m-%d %H:%M:%S" # 输出:2023-11-15 14:30:25 date "+%A, %B %d, %Y" # 输出:Wednesday, November 15, 2023
设置系统时间
需 root 权限,使用 sudo date --set 修改时间:
sudo date --set="2023-12-31 23:59:59" # 设置系统时间为 2023-12-31 23:59:59
cal 命令:显示月历和年历
cal(calendar)用于显示日历,默认显示当前月份的日历,包含星期表头(Su Mo Tu We Th Fr Sa)。
基本用法
cal # 显示当前月历(如 2023 年 11 月)
显示指定月份的日历
格式:cal 月份 年份,月份范围 1-12,年份为 4 位数。

cal 11 2023 # 显示 2023 年 11 月日历 cal 2 2024 # 显示 2024 年 2 月(闰月)
显示整年日历
cal -y 2023 # 显示 2023 年全年日历
其他选项
-j:显示一年中的第几天(Julian 日期),11 月 15 日是第 319 天。-m:以星期一为每周第一天(默认为星期日)。
ncal 命令:增强版日历工具
ncal 是 cal 的增强版,支持更多格式选项,部分系统(如 macOS)默认使用 ncal。
基本用法
ncal # 功能与 `cal` 类似,但默认以星期一为第一天
显示年历并突出当前日期
ncal -y 2023 # 显示 2023 年年历,当前日期高亮(需终端支持)
显示星期和 ISO 周数
-w:显示 ISO 周数(每年 1-52 或 53 周)。-W:仅显示周数,不显示日期。ncal -w 11 2023 # 显示 2023 年 11 月的日历及每周周数
日历命令对比
以下表格总结了三个常用日历命令的核心功能差异:
| 命令 | 主要功能 | 常用选项 | 特点 |
|---|---|---|---|
date |
显示/设置系统时间 | +格式、--set |
支持自定义时间格式 |
cal |
显示月历/年历 | -y、-j、-m |
简单直观,默认周日为第一天 |
ncal |
增强版日历 | -y、-w、-M(周一为第一天) |
支持周数、ISO 日期格式 |
实际应用场景
- 日志分析:结合
date和grep按时间筛选日志,grep "$(date "+%Y-%m-%d")" /var/log/syslog # 查看今天的系统日志
- 任务调度:在 shell 脚本中使用
cal判断月末或闰年,cal $(date +%m) $(date +%Y) | grep -q "31" && echo "本月有31天"
- 时间格式化:使用
date生成符合特定格式的文件名,touch backup_$(date "+%Y%m%d_%H%M%S").log
相关问答 FAQs
Q1:如何让 date 命令显示 Unix 时间戳(Epoch 时间)?
A:使用 date +%s 可显示当前时间的 Unix 时间戳(从 1970-01-01 00:00:00 UTC 到现在的秒数)。
date +%s # 输出:1700123456
若需将时间戳转换为日期,可使用 date -d:
date -d @1700123456 # 输出:Wed Nov 15 14:30:56 CST 2023
Q2:cal 和 ncal 在显示星期顺序上有何区别?如何修改?
A:cal 默认以星期日(Su)为每周第一天,ncal 默认以星期一(Mo)为第一天,若需修改 cal 的星期顺序,可使用 -m 选项(周一为第一天):
cal -m 11 2023 # 2023 年 11 月日历,以星期一为第一天
ncal 可通过 -M 选项切换为周日为第一天:
ncal -M 11 2023 # 2023 年 11 月日历,以星期日为第一天
