Linux常用基础指令-date指令

1.date 命令概述

date 命令用于打印或设置系统的日期和时间,能够显示当前时间,支持多种时间格式的自定义输出,可以设置系统时间(需要管理员权限)。

1.1.基本语法

date [选项]... [+格式]
date [选项] [MMDDhhmm[[CC]YY][.ss]]
  • 显示当前时间:直接输入 date 即可显示当前的系统时间。
  • 设置系统时间:通过 [MMDDhhmm[[CC]YY][.ss]] 格式可以设置具体的日期和时间。

1.2.date 命令的常用选项

以下是一些常用选项和参数,可以大大提高 date 命令的灵活性和实用性:

选项 功能描述
-d, --date=STRING 显示由 STRING 指定的时间,而不是当前时间。例如:date -d "next Monday"
-f, --file=DATEFILE 针对 DATEFILE 文件中的每一行内容,逐行显示对应的时间(等价于多次 --date 的调用)。
-I, --iso-8601[=TIMESPEC] 以 ISO-8601 格式输出时间,TIMESPEC 可选值:date(默认)、hoursminutesseconds
-r, --reference=文件 显示指定文件的最后修改时间。例如:date -r /etc/passwd
-R, --rfc-822 按 RFC-822 格式显示日期(如:Mon, 07 Aug 2006 12:34:56 -0600)。
-s, --set=STRING 根据 STRING 设置系统时间(需要管理员权限)。例如:date -s "2024-12-01 12:00:00"
-u, --utc, --universal 以 UTC(协调世界时)显示或设置时间。
--help 显示帮助信息并退出。
--version 显示版本信息并退出。

1.3.时间格式化:灵活控制输出

date 命令支持通过格式符号自定义时间和日期的输出。以下是一些常见的格式符号及其用途:

格式符号 描述 示例输出
%% 字面上的 % %
%Y 年份(四位数) 2024
%m 月份(两位数) 11
%d 日期(两位数) 28
%H 小时(24 小时制,两位数) 14
%M 分钟(两位数) 30
%S 秒(两位数) 45
%F 完整日期(等价于 %Y-%m-%d 2024-11-28
%T 完整时间(等价于 %H:%M:%S 14:30:45
%a 星期的简写 Thu(周四)
%A 星期的全称 Thursday
%z 时区偏移量 +0800
%Z 时区名称 CST(北京时间)

2.使用示例

  1. 显示当前时间
date
  1. 自定义格式输出
date +"今天是:%Y年%m月%d日 %H:%M:%S"
  1. 显示未来日期
date -d "7 days"
  1. 从文件中读取每一行的日期字符串,解析为日期
2024-11-28
+7 days
next Monday
date -f date.txt

输出:

20241128日 星期四 00:00:00 CST
202412月 05日 星期四 13:57:41 CST
202412月 02日 星期一 00:00:00 CST
  1. 转换 Unix 时间戳
date -d "@2147483647"
  1. 查看文件的最后修改时间
date -r /var/log/syslog
  1. 时区设置
    通过环境变量 TZ 设置时区:
TZ='America/New_York' date

输出纽约时间。

  1. 脚本中的日期标签

在脚本中生成带时间戳的文件名:

filename="backup_$(date +'%Y%m%d_%H%M%S').tar.gz"

生成结果:backup_20241128_143045.tar.gz

  1. 设置系统时间

需要管理员权限:

sudo date -s "2024-12-01 12:00:00"

3.date -d 选项格式

3.1. 具体日期格式

date -d 支持多种标准日期格式:

格式 示例 描述
YYYY-MM-DD 2024-11-28 年-月-日,ISO 8601 格式(推荐)。
MM/DD/YYYY 11/28/2024 月/日/年,常见的美式格式。
YYYYMMDD 20241128 紧凑格式,无分隔符。
Month DD, YYYY November 28, 2024 月份全称(或简写)+ 日 + 年。
DD Month YYYY 28 November 2024 日 + 月份全称(或简写)+ 年。
date -d "2024-11-28"
date -d "11/28/2024"
date -d "November 28, 2024"

3.2. 时间格式

date -d 可以指定具体的时间,支持 24 小时制或 12 小时制。

格式 示例 描述
HH:MM 14:30 24 小时制,小时和分钟。
HH:MM:SS 14:30:45 24 小时制,小时、分钟和秒。
HH:MM:SS AM/PM 02:30:45 PM 12 小时制,带 AM/PM 标识。
date -d "2024-11-28 14:30"
date -d "11/28/2024 02:30:45 PM"

3.3. 相对时间描述

date -d 支持相对时间描述,允许基于当前时间前后偏移。

描述 示例 输出示例(假设当前时间为 2024-11-28)
now date -d "now" 当前时间
tomorrow date -d "tomorrow" 2024-11-29
yesterday date -d "yesterday" 2024-11-27
+N days date -d "+7 days" 2024-12-05(7 天后)
-N days date -d "-7 days" 2024-11-21(7 天前)
+N weeks date -d "+2 weeks" 2024-12-12(2 周后)
-N weeks date -d "-2 weeks" 2024-11-14(2 周前)
+N months date -d "+3 months" 2025-02-28(3 个月后)
-N months date -d "-3 months" 2024-08-28(3 个月前)
+N years date -d "+1 year" 2025-11-28(1 年后)
-N years date -d "-1 year" 2023-11-28(1 年前)
date -d "tomorrow"
date -d "+7 days"
date -d "-2 weeks"
date -d "+3 months"

3.4. 复杂的自然语言描述

date -d 支持更复杂的自然语言描述,例如时间点、下一个星期几等。

描述 示例 输出示例(假设当前时间为 2024-11-28)
next WEEKDAY date -d "next Friday" 2024-11-29(下一个星期五)
last WEEKDAY date -d "last Monday" 2024-11-25(上一个星期一)
WEEKDAY date -d "Monday" 2024-11-25(本周一,如果已过则下周一)
HH:MM next WEEKDAY date -d "09:00 next Friday" 2024-11-29 09:00
date -d "next Friday"
date -d "last Monday"
date -d "09:00 next Friday"

3.5. Unix 时间戳

date -d 支持通过 @TIMESTAMP 格式解析 Unix 时间戳。

格式 示例 描述
@TIMESTAMP date -d "@2147483647" 将 Unix 时间戳转换为日期时间。
date -d "@2147483647"

3.6. 混合日期和时间格式

可以结合日期和时间描述,加上相对时间偏移。

描述 示例 输出示例(假设当前时间为 2024-11-28)
YYYY-MM-DD +N days date -d "2024-11-01 +7 days" 2024-11-08
HH:MM yesterday date -d "23:59 yesterday" 2024-11-27 23:59
next WEEKDAY +N hours date -d "next Friday +12 hours" 2024-11-29 12:00
date -d "2024-11-01 +7 days"
date -d "23:59 yesterday"
date -d "next Friday +12 hours"

3.7. ISO 8601 格式

ISO 8601 是国际标准的日期和时间表示法,date -d 支持以下格式:

格式 示例 描述
YYYY-MM-DDTHH:MM:SS date -d "2024-11-28T14:30:45" 标准 ISO 8601 格式。
YYYY-MM-DDTHH:MM:SSZ date -d "2024-11-28T14:30:45Z" Z 表示 UTC 时间。
date -d "2024-11-28T14:30:45"
date -d "2024-11-28T14:30:45Z"

4.timedatectl工具常用选项和用途

命令/选项 用途 示例
-h, --help 显示帮助信息。 timedatectl --help
--version 显示 timedatectl 的版本信息。 timedatectl --version
--no-pager 禁止将输出通过分页器显示(如 less)。 timedatectl --no-pager status
--no-ask-password 禁止提示输入密码。 timedatectl --no-ask-password set-time "2024-12-01 10:00:00"
-H, --host=[USER@]HOST 远程操作指定主机的时间设置(需要 ssh权限)。 timedatectl [email protected] status
-M, --machine=CONTAINER 操作本地容器的时间设置。 timedatectl --machine=my-container status
--adjust-system-clock 更改 RTC 模式时调整系统时钟。 timedatectl --adjust-system-clock set-local-rtc 1
status 显示当前的时间设置,包括本地时间、UTC 时间、RTC 时间、时区和 NTP 状态。 timedatectl status
set-time TIME 设置系统时间(需要管理员限)。格式为 YYYY-MM-DD HH:MM:SS timedatectl set-time "2024-12-01 10:00:00"
set-timezone ZONE 设置系统时区。时区名称可以通过 list-timezones查看。 timedatectl set-timezone Asia/Shanghai
list-timezones 列出所有支持的时区名称。 timedatectl list-timezones
set-local-rtc BOOL 控制硬件时钟(RTC)是否使用本地时间。BOOL0 表示使用 UTC,1 表示使用本地时间。 timedatectl set-local-rtc 1
set-ntp BOOL 启用或禁用 NTP(网络时间协议)同步。BOOLtrue 表示启用,false 表示禁用。 timedatectl set-ntp true

5.timedatectldate适用场景对比

功能 date 命令 timedatectl 工具
显示当前时间 ✔ 显示当前时间。 ✔ 显示当前时间、时区、NTP 状态、RTC 配置等。
设置系统时间 ✔ 支持手动设置时间。 ✔ 支持手动设置时间。
格式化输出时间 ✔ 支持多种自定义格式化输出。 ✘ 不支持格式化输出。
管理时区 ✘ 不支持时区管理,需要通过环境变量 TZ 实现。 ✔ 支持列出和设置时区。
NTP 时间同步 ✘ 不支持 NTP 配置。 ✔ 支持启用或禁用 NTP。
管理硬件时钟(RTC) ✘ 不支持 RTC 配置。 ✔ 支持配置 RTC 是否使用本地时间或 UTC。
脚本中的临时操作 ✔ 更适合在脚本中快速处理时间。 ✘ 不适合脚本中的时间格式化任务。
现代系统集成 ✘ 仅限于单独运行,功能较简单。 ✔ 与 systemd 集成,功能全面,适合现代系统。

Ending

你可能感兴趣的:(Linux,linux,服务器,运维)