时间命令date,你真的会用了吗?

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 时间命令date,你真的会用了吗?

在linux操作系统中,时间命令 date 是用得比较频繁,例如在收集日志,同步服务器集群,包括在大数据开发领域,对于date命令的使用都是很常见的。下面我们就来简单看一下该命令的语法规则。

语法

格式化

  • 使用%Y进行格式化
  • 使用%m进行格式化
  • 使用%d进行格式化
  • 小时
  • 使用%H进行格式化
  • 分钟
  • 使用%M进行格式化
  • 使用%S进行格式化
  • 星期
  • 使用%A进行格式化

-d实现日期的加减

-d选项允许你指定一个日期,然后进行加减操作。可以使用类似"tomorrow"、"next week"、"2 days ago"等相对描述,也可以指定具体的日期。

同时,指定日期的支持的加减操作支持连续加减。-1 month +1 day这样的形式,执行顺序为从左到右依次执行。

使用$()嵌套执行date命令

可以嵌套执行date命令,因为有一些时间无法直接由当前的时间一次执行完成,就需要使用$()执行嵌套版的date命令。

应用实例

首先我们定义一个shell,用于测试我们的应用实例,下面是定义的初始shell

#!/bin/sh
# 输入一个日期参数
if [ $# -lt 1 ];then
        echo "retCode:-1"
        echo "未输入日期参数"
        exit 1
fi
current_day=$1 
ans=`占位命令`
echo ${ans}

获取当前日期上一年的最后一天

date -d "${current_day} -1 year" "+%Y1231"

给日期加上横线

date -d "${current_day}" "+%Y-%m-%d"

获取当前月份

date -d "${current_day}" "+%Y%m"

获取上月的第一天

date -d "${current_day} -1 month" "+%Y%m01"

获取当前年

date -d "${current_day}" "+%Y"

可以发现,活动这些日期主要都是通过改变我们输出的格式,即%Y%m%d和参数-d来实现的,其中,参数-d后面可以跟加减号,从而得到对应的日期。让我们接着练习。

获取下个月的第一天

date -d "${current_day} +1 month" "+%Y%m01"

获取本月的最后一天

last_month_first_day=`date -d "${current_day} +1 month" "+%Y%m01"`
this_month_last_day=`date -d "${last_month_first_day} -1 day" "+%Y%m%d"`

也可以缩写为:

date -d "$(date -d "${current_day} +1 month" "+%Y%m01") -1 day" "+%Y%m%d"

获取上个月的最后一天

date -d "$(date -d "${current_day}" "+%Y%m01") -1 day" "+%Y%m%d"

获取本年的最后一天

date -d "$(date -d "${current_day} +1 year" "+%Y0101") -1 day" "+%Y%m%d"

或者

date -d "${current_day}" "+%Y1231"

结果一样,这说明,每一种时间其实都有多种表示方式,就拿本年的最后一天为例,它既可以是下一年第一天的上一天也可以直接用当前年截断格式化后加上1231。我们需要找到简便一些的方法,减少维护的成本。

date命令的应用场景

以下是一些常见的用途:

  1. 日志记录和时间戳: 在大数据处理中,日志记录是非常重要的。date命令可以用来生成时间戳,将其添加到日志文件中,以便在分析和调试时了解事件发生的时间。
# 生成当前日期和时间的时间戳
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "Event occurred at $timestamp" >> logfile.txt

2.调度任务: 在大数据处理中,任务调度是一个常见的操作。date命令可用于生成定时器,以便在特定的日期和时间执行任务。例如,使用Cron作业调度系统。

# 每天凌晨执行数据处理任务
0 0 * * * /path/to/data_processing_script.sh

3.备份和归档: 在运维中,定期备份是确保系统可靠性和数据完整性的关键操作。date命令可用于创建备份文件名,以确保每个备份都有一个唯一的标识符。

# 创建带有日期的备份文件
backup_filename="backup_$(date +"%Y%m%d").tar.gz"
tar -czf $backup_filename /path/to/data

性能分析: 在运维中,对系统性能进行分析和调优是常见的任务。date命令可用于测量脚本或命令的执行时间,以便确定性能瓶颈。

# 测量命令执行时间
start_time=$(date +%s)
# 执行一些操作
end_time=$(date +%s)
execution_time=$((end_time - start_time))
echo "Script executed in $execution_time seconds."
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
11月前
|
人工智能 运维 监控
智能运维在现代数据中心的应用与挑战
随着云计算和大数据技术的迅猛发展,现代数据中心的运维管理面临着前所未有的挑战。本文探讨了智能运维技术在数据中心中的应用,包括自动化监控、故障预测与诊断、资源优化等方面,并分析了当前面临的主要挑战,如数据安全、系统集成复杂性等。通过实际案例分析,展示了智能运维如何帮助数据中心提高效率、降低成本,并提出了未来发展趋势和建议。
|
12月前
|
Ubuntu Linux 程序员
交叉编译valgrind在嵌入式设备上调试程序
交叉编译valgrind在嵌入式设备上调试程序
|
12月前
|
Linux
Linux Crontab 查看定时任务启动没
【10月更文挑战第20天】在Linux系统中,crontab用于设置周期性执行的任务。查看当前用户的Crontab任务列表,使用`crontab -l`;查看所有用户任务,使用`sudo crontab -l`或指定用户`sudo crontab -u username -l`。
550 5
|
SQL 关系型数据库 MySQL
MySQL删除表数据、清空表命令(truncate、drop、delete 区别)
MySQL删除表数据、清空表命令(truncate、drop、delete区别) 使用原则总结如下: 当你不需要该表时(删除数据和结构),用drop; 当你仍要保留该表、仅删除所有数据表内容时,用truncate; 当你要删除部分记录、且希望能回滚的话,用delete;
|
存储 Linux
在Linux中,如何在Linux中设置磁盘配额?
在Linux中,如何在Linux中设置磁盘配额?
|
网络协议 程序员
什么是回环地址
【5月更文挑战第16天】什么是回环地址
1687 0
|
测试技术 PyTorch 算法框架/工具
魔搭开源推理引擎 DashInfer,助力CPU服务器解锁大模型超强推理
ModelScope推出了预训练大语言模型(LLM)推理引擎DashInfer,采用C++ Runtime编写,提供C++和Python语言接口,具有生产级别的高性能表现,适用于多种CPU架构,包括x86和ARMv9。DashInfer支持连续批处理(Continuous Batching)和多NUMA推理(NUMA-Aware),能够充分利用服务器级CPU的算力,为推理14B及以下的LLM模型提供更多的硬件选择。该项工作已开源。
|
存储 网络协议 文件存储
使用Serv-U FTP服务器共享文件,实现无公网IP环境下远程访问-1
使用Serv-U FTP服务器共享文件,实现无公网IP环境下远程访问
281 2
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU服务器租用费用_NVIDIA A10、V100、T4、P4、P100 GPU卡
阿里云GPU云服务器提供NVIDIA A10、V100、T4、P4、P100等多种GPU卡,结合高性能CPU,单实例计算性能高达5PFLOPS。支持2400万PPS及160Gbps内网带宽。实例规格多样,如A10卡GN7i(3213.99元/月)、V100-16G卡GN6v(3830.00元/月)等。适用于深度学习、科学计算、图形处理等场景。GPU软件如AIACC-Training、AIACC-Inference助力性能优化。购买方式灵活,客户案例包括深势科技、流利说、小牛翻译。
2561 0
|
数据安全/隐私保护 Windows
使用Serv-U FTP服务器共享文件,实现无公网IP环境下远程访问-2
使用Serv-U FTP服务器共享文件,实现无公网IP环境下远程访问
271 0