美文网首页
按照自定义修改系统文件修改时间(atime和mtime)

按照自定义修改系统文件修改时间(atime和mtime)

作者: 花生草 | 来源:发表于2023-07-30 16:56 被阅读0次

    为了保证磁盘空间,系统中都有日志清理的功能,所以会有测试日志清理的功能,是否可以正常工作的需求。
    为了满足这个测试需求,关键点是要支持修改系统文件的自定义的时间。原因在于日志清理基本原则,是依据日志的新旧,在达到保留日期期限、后者磁盘使用率的条件时,从旧到新按照顺序清理日志

    查询了一些资料,发现只支持对atime,mtime的修改成任意的值,不能实现对ctime的修改为一个较旧的时间。如果有方法,欢迎评论.
    通过stat命令可以查看这3个值

    stat testmodule.log.2023-07-26.0
      File: ‘testmodule.log.2023-07-26.0’
      Size: 0               Blocks: 0          IO Block: 4096   regular empty file
    Device: fd10h/64784d    Inode: 205898820   Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2023-07-26 01:00:00.000000000 +0800
    Modify: 2023-07-26 01:00:00.000000000 +0800
    Change: 2023-07-31 16:36:38.323777021 +0800
    
    名称 定义
    atime 文件中数据最后被访问时间
    mtime 文件中数据最后被修改时间
    ctime 文件的权限、拥有者、组、链接最后发生改变的时间

    以下是具体的脚本,传入1个参数,表示要产生几天前的数据

    if [ $# != 1 ];then
        echo "Wrong parameters"
        exit 0
    fi
    days=$1
    dirs=("log1" "log2")
    for((i =0; i < ${#dirs[@]};i++));do
        cd ${dirs[$i]}
        rm -f testmodule.log*
        touch testmodule.log
        for(( j=1; j <= $days;j++))do
            timestr=`date -d "$j days ago" +%Y-%m-%d`
            echo "touch -d \"$timestr 01:00\" testmodule.log.$timestr.0"
            touch -d "$timestr 01:00" testmodule.log.$timestr.0
            done
        cd -
    done
    

    实际效果为

    -rw-r--r-- 1 root root 0 Jul 31 16:36 testmodule.log
    -rw-r--r-- 1 root root 0 Jul 26 01:00 testmodule.log.2023-07-26.0
    -rw-r--r-- 1 root root 0 Jul 27 01:00 testmodule.log.2023-07-27.0
    -rw-r--r-- 1 root root 0 Jul 28 01:00 testmodule.log.2023-07-28.0
    -rw-r--r-- 1 root root 0 Jul 29 01:00 testmodule.log.2023-07-29.0
    -rw-r--r-- 1 root root 0 Jul 30 01:00 testmodule.log.2023-07-30.0
    

    相关文章

      网友评论

          本文标题:按照自定义修改系统文件修改时间(atime和mtime)

          本文链接:https://www.haomeiwen.com/subject/ppyspdtx.html