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

2023-07-30  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读