按照自定义修改系统文件修改时间(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