Linux中文件的时间属性(涉及touch、stat命令)

一.信息说明
其实写这个东西的朋友应该也很多啦,但是为了让自己更加有映像同时也能按照自己的习惯去看的话,还是自己结合网上各位朋友的写法和自己的理解来写一下咯!稍微废话有点多了,写这个文章主要是因为最近一个备份策略的需求。居然才发现原来touch命令不只是我自己曾经用的那些功能(当然研究下,会发现很多命令都会有这种感觉啊!)。

需求信息:生成一定命名规则的50个文件,且这些文件的最后修改日期为最近50天的每一天。然后再通过find命令去删除30天以前的文件。

二.命令说明
1.ls命令查看时间
通常情况下我们通过ls看到的文件的各种时间,说明如下:
ls -lt:t参数默认表示以最后修改时间排序;
ls -lut:u结合lt参数使用表示以最后访问时间排序;
ls -ltc:参数c结合lt使用表示按照文件状态最后修改时间排序

2.stat命令
stat命令用来查看文件/文件系统的状态,语法和常用参数如下:
stat [option] ... FILE ...
-f:显示文件系统状态(如果指定文件则为该文件所在文件系统的状态);
-t:表示以精简模式显示(如果通过shell编程进行取值会更方便)

范例1:通过touch新建一个文件并查看各个状态
[root@node110 ~]# touch xxx
[root@node110 ~]# stat xxx
   File: `xxx'-->文件名
  Size: 0              Blocks: 0          IO Block: 4096   regular empty file
文件大小(KB)            块数                 IO块的大小       文件属性(本例为:普通空文件)
Device: 803h/2051d     Inode: 2241272     Links: 1
设备编号:十六进制h/十进制d Inode号            硬链接数量
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
访问权限                     文件所有者的ID及用户名     所在的组ID及组名
Access: 2015-07-11 10:35:26.917403840 +0800
文件上次访问时间
Modify: 2015-07-11 10:35:26.917403840 +0800
上次文件内容修改时间
Change: 2015-07-11 10:35:26.917403840 +0800
上次文件状态变更时间

范例2:cat查看文件引起-atime发生变化:
[root@node110 ~]# cat xxx
[root@node110 ~]# stat xxx
  File: `xxx'
  Size: 0              Blocks: 0          IO Block: 4096   regular empty file
Device: 803h/2051d     Inode: 2241272     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access:  2015-07-11 10:35:44.898405321 +0800
Modify: 2015-07-11 10:35:26.917403840 +0800
Change: 2015-07-11 10:35:26.917403840 +0800
范例3:echo写入内容仅引起mtime/ctime发生变化(这种写入不会引起atIme发生变化)
[root@node110 ~]# echo xxx>xxx
[root@node110 ~]# stat xxx
  File: `xxx'
  Size: 4              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d     Inode: 2241272     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-11 10:35:44.898405321 +0800
Modify: 2015-07-11 10:36:00.291384045 +0800
Change: 2015-07-11 10:36:00.291384045 +0800
范例4:修改权限引起ctime发生变化
[root@node110 ~]# chmod 777 xxx
[root@node110 ~]# stat xxx
  File: `xxx'
  Size: 4              Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d     Inode: 2241272     Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2015-07-11 10:35:44.898405321 +0800-->上次访问时间
Modify: 2015-07-11 10:36:00.291384045 +0800-->数据内容发生变化
Change:  2015-07-11 10:39:23.237384355 +0800-->文件状态发生改变
范例5:以-t参数输出简明模式:
[root@node110 ~]# stat -t xxx
xxx 4 8 81ff 0 0 803 2241272 1 0 0 1436582144(修改时间) 1436582160(内容变化时间) 1436582363(状态变化时间) 4096


范例6:查看文件系统状态:
[root@node110 ~]# stat -f xxx
  File: "xxx"
    ID: 5093d08d2d86512 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 11482116   Free: 6937618    Available: 6354361
Inodes: Total: 2916352    Free: 2763908
[root@node110 ~]# stat -f Desktop/
  File: "Desktop/"
    ID: 5093d08d2d86512 Namelen: 255     Type: ext2/ext3
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 11482116   Free: 6937618    Available: 6354361
Inodes: Total: 2916352    Free: 2763908

3.touch命令修改文件时间戳
书读得太少,以前一直简单的认为touch命令就是拿来新建一个空文件的。直到今天手欠去man了一下才发现:touch - change file timestamps,豁然开朗,触摸一下嘛(有的时间自然要发生变化)。语法如下:
touch [OPTION] ... FILE( 如果指定的文件不存在会创建一个空文件) ...
-a 仅修改文件的访问时间(atime)
-c 不创建文件,即使文件不存在;
-d 将字符串指定的日期设定为文件的时间属性(同--date=STRING);
-m 仅修改文件的mtime;
-t 设置为指定的时间([[CC]YY]MMDDhhmm[.ss])
DATE STRING
The --date=STRING is a mostly free format human readable date string such as "Sun, 29 Feb 2004 16:21:42 -0800" or "2004-02-29 16:21:42" or even "next Thursday".  A date string may contain items indicating calendar date, time of day, time zone, day of week, relative time, relative date, and numbers.  An empty string indicates the  beginning of  the day.  The date string format is more complex than is easily documented here but is fully described in the info documentation.

4.find命令删除指定天数以前的文件
此处写出范例语句了(找到并删除/app/backup目录下符合"*dmp*"命名规则且上次修改时间为30天以前的普通文件,删除时通过-print打印到标准输出):
find /app/backup/ -name "*dmp*" -type f -mtime +31 -exec rm -rf  {} \; -print

三.实现方法
上面第四点说明了怎么删除,但是就在今天突然要删除这些测试环境中间没有的文件。怎么办呢?
#!/bin/sh
for ((i=0; i<=50; i++))
do
day_time=$(date -d "$i day ago" "+%Y%m%d%H%M")
touch -m -t $day_time /app/backup/after$day_time.dmp
done
如果不愿意vi一个文件,您也可以直接从for开始执行哦(别忘啦路径是不是存在)。 大笑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值