Linux系统的日期和时间命令(date)

date 命令在 Linux(包括 CentOS)中用于显示和设置系统的日期和时间

我们在下面这些场景中经常会用到:

  1. 系统日志记录: 在系统日志中,时间戳是非常重要的信息。date 命令可以用于在脚本或命令中生成当前时间戳,并将其写入日志文件。

    # 在日志文件中带时分秒的标记
    [root@aleng ~]# date +"%Y%m%d%H%M%S"
    20231210223024
    # 以天为单位的日志中只需要保留年月日
    [root@aleng ~]# date +"%Y%m%d"
    20231210
    # 如果我们需要在批量解压一个压缩包的文件到同一个目录,同时压缩包不同目录可能还有同名的文件时
    # 在压缩包解压后,可能需要在文件后面添加一个时间戳,但是由于移动文件的速度很快,可能还需要精确到毫秒
    # 那么就需要在串上毫秒值
    [root@aleng ~]# date +"%Y%m%d%H%M%S%N"
    20231210223607439382638
    # 如果感觉太长了,还可以裁切自己需要的部分,确保不会出现重名文件
    [root@aleng ~]# date +"%Y%m%d%H%M%S%N"|cut -b 1-18
    202312102236038490
    
  2. 定时任务和计划任务: 在编写定时任务或计划任务时,可能需要获取当前的日期和时间,以便根据时间执行不同的操作。date 命令可以用于在脚本中获取当前的日期和时间信息。

    #!/bin/bash
    
    # 获取当前小时
    current_hour=$(date +"%H")
    
    # 打印当前小时
    echo "当前小时:$current_hour"
    
    # 根据当前小时执行不同的操作
    if [ "$current_hour" -lt 12 ]; then
        echo "早上好!"
        # 在这里添加早上的任务或操作
    else
        echo "下午好!"
        # 在这里添加下午的任务或操作
    fi
    
  3. 备份和归档: 在进行备份或归档操作时,通常会在备份文件名或目录名中包含时间戳,以便轻松追踪备份的时间。date 命令用于生成这样的时间戳。

    # 备份文件的时候也可以使用第一点的时间戳方式,或者是拼接成易读的格式
    # 不建议在文件或者目录中使用空格,可能会出现难以预料的情况,可以使用下划线拼接
    [root@aleng ~]# date +"%Y-%m-%d_%H:%M:%S"
    2023-12-10_22:40:54
    
  4. 文件或目录的时间戳修改: 有时,需要更改文件或目录的时间戳,以反映某些操作的发生时间。date 命令可以用于设置文件的访问时间、修改时间或创建时间。

    [root@aleng ~]# stat upload_file.sh 
      File: ‘upload_file.sh’
      Size: 14044     	Blocks: 32         IO Block: 4096   regular file
    Device: fd01h/64769d	Inode: 788711      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-12-10 22:22:34.682381932 +0800
    Modify: 2023-12-08 19:42:00.000000000 +0800
    Change: 2023-12-10 22:22:30.647252256 +0800
    # 我们这里修改文件的 Modify 时间
    [root@aleng ~]# touch -m -t `date +"%Y%m%d%H%M.%S"` upload_file.sh 
    [root@aleng ~]# stat upload_file.sh 
      File: ‘upload_file.sh’
      Size: 14044     	Blocks: 32         IO Block: 4096   regular file
    Device: fd01h/64769d	Inode: 788711      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-12-10 22:22:34.682381932 +0800
    Modify: 2023-12-10 22:47:40.000000000 +0800
    Change: 2023-12-10 22:47:40.504716571 +0800
    # 同样可以修改 Access 和 Change
    [root@aleng ~]# touch -a -t `date +"%Y%m%d%H%M.%S"` upload_file.sh 
    [root@aleng ~]# stat upload_file.sh 
      File: ‘upload_file.sh’
      Size: 14044     	Blocks: 32         IO Block: 4096   regular file
    Device: fd01h/64769d	Inode: 788711      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-12-10 22:49:26.000000000 +0800
    Modify: 2023-12-10 22:49:23.000000000 +0800
    Change: 2023-12-10 22:49:26.835127351 +0800
     Birth: -
    
    

    扩展一下 Access Modify Change 三个的区别

    1. Access 时间戳:
      • 表示文件最后一次被访问的时间。
      • 在你的例子中,Access 时间戳是 2023-12-10 22:49:26.000000000 +0800,即文件最后一次被访问的时间。
    2. Modify 时间戳:
      • 表示文件内容最后一次被修改的时间。
      • 在你的例子中,Modify 时间戳是 2023-12-10 22:49:23.000000000 +0800,即文件最后一次被修改的时间。
    3. Change 时间戳:
      • 表示文件元数据(metadata)最后一次被修改的时间。
      • 在你的例子中,Change 时间戳是 2023-12-10 22:49:26.835127351 +0800,即文件元数据最后一次被修改的时间。
    # 新创建一个文件,这三个时间是一样的。
    [root@aleng ~]# touch 1
    [root@aleng ~]# stat 1 
      File: ‘1’
      Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
    Device: fd01h/64769d	Inode: 788698      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-12-10 22:57:08.126924294 +0800
    Modify: 2023-12-10 22:57:08.126924294 +0800
    Change: 2023-12-10 22:57:08.126924294 +0800
     Birth: -
     # 当你查看这个文件的内容,Access 时间会修改为查看的时间
    [root@aleng ~]# more 1 
    [root@aleng ~]# stat 1 
      File: ‘1’
      Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
    Device: fd01h/64769d	Inode: 788698      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-12-10 22:57:20.813331239 +0800
    Modify: 2023-12-10 22:57:08.126924294 +0800
    Change: 2023-12-10 22:57:08.126924294 +0800
     Birth: -
    # 往文件里面写点东西 Modify 变了,因为文件元数据变了,所有 Change 也变了。
    [root@aleng ~]# echo "ceshi" >> 1 
    [root@aleng ~]# stat 1 
      File: ‘1’
      Size: 6         	Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d	Inode: 788698      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-12-10 22:57:20.813331239 +0800
    Modify: 2023-12-10 23:02:45.407743298 +0800
    Change: 2023-12-10 23:02:45.407743298 +0800
     Birth: -
    # 如果需要单独修改 Change ,可以修改文件的权限,这样就只有 Change 会改变
    [root@aleng ~]# chmod o+w 1 
    [root@aleng ~]# stat 1 
      File: ‘1’
      Size: 6         	Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d	Inode: 788698      Links: 1
    Access: (0646/-rw-r--rw-)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-12-10 22:57:20.813331239 +0800
    Modify: 2023-12-10 23:02:45.407743298 +0800
    Change: 2023-12-10 23:05:13.588496438 +0800
     Birth: -
    
  5. 日志文件的轮转: 在日志管理中,经常需要对日志文件进行定期轮转。date 命令可以用于生成包含时间戳的新日志文件名,以便进行轮转。

    #!/bin/bash
    
    # 指定日志文件路径
    log_file="/path/to/your/logfile.log"
    
    # 获取当前日期作为时间戳(格式为YYYYmmdd)
    timestamp=$(date +"%Y%m%d")
    
    # 在日志文件名中添加时间戳并创建新日志文件
    new_log_file="${log_file%.log}_${timestamp}.log"
    
    # 将日志文件进行轮转(例如,将旧日志文件备份或删除,然后将新日志文件用于记录)
    # 这里只是一个示例,具体的轮转操作取决于你的需求和日志管理策略
    mv "$log_file" "$new_log_file"
    touch "$log_file"
    
    # 在新日志文件中写入一些示例日志
    echo "日志轮转于 $(date)" >> "$log_file"
    
    # 打印消息
    echo "日志已轮转,新日志文件为: $new_log_file"
    
    
  6. 构建脚本: 在软件开发中,构建脚本可能需要生成包含构建时间信息的版本号或构建编号。date 命令可以用于生成这样的信息。

    #!/bin/bash
    
    # 指定软件版本号的前缀(可以根据实际情况调整)
    version_prefix="1.0"
    
    # 获取当前日期作为构建日期,格式为YYYYMMDD
    build_date=$(date +"%Y%m%d")
    
    # 生成版本号,例如:1.0.20231210
    software_version="$version_prefix.$build_date"
    
    # 打印生成的版本号
    echo "生成的软件版本号为: $software_version"
    
    # 在构建过程中,你可以使用这个版本号进行后续操作,比如将其写入代码中、生成可执行文件等
    
  7. 监控和性能分析: 在监控和性能分析场景中,可能需要记录事件的发生时间。date 命令可以帮助生成时间戳,以便进行分析。

    #!/bin/bash
    
    # 模拟事件的名称或描述
    event_name="Example Event"
    
    # 获取当前时间戳
    timestamp=$(date +"%Y-%m-%d %H:%M:%S")
    
    # 记录事件到日志文件,包含事件名称和时间戳
    echo "[$timestamp] $event_name" >> event_log.txt
    
    # 打印消息
    echo "事件 '$event_name' 已记录到日志文件."
    
    
  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛秋_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值