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

来源:互联网 发布:数据蒙特卡洛 编辑:程序博客网 时间:2024/05/17 18:43
一.信息说明
其实写这个东西的朋友应该也很多啦,但是为了让自己更加有映像同时也能按照自己的习惯去看的话,还是自己结合网上各位朋友的写法和自己的理解来写一下咯!稍微废话有点多了,写这个文章主要是因为最近一个备份策略的需求。居然才发现原来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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头顶头发稀少怎么办头顶头发稀 遇见无赖的人该怎么办 扶了老人被讹诈怎么办 遇见碰瓷讹人的怎么办 假机油用了4年怎么办 苹果6手机变砖头怎么办 苹果8升级变砖头怎么办 苹果id锁变砖头怎么办 钥匙断在锁里了怎么办? u型锁忽然打不开怎么办 密码门锁没电了怎么办 智能门锁没电了怎么办 十字锁钥匙丢了怎么办 罐头的拉环断了怎么办 锁坏了 打不开了怎么办 门锁锁不起来了怎么办 卧室门锁舌断了怎么办 锁舌头坏了怎么办自救 门锁斜舌头断了怎么办 锁把手断了半截怎么办 门锁那一块掉了怎么办 qq动态密码忘了怎么办 小三怀孕了原配该怎么办 我当了小三怎么办 被降职后在单位怎么办 领导故意整我该怎么办 小孩怎么教育都不听怎么办 赵本山怎么办的刘涌 起诉离婚被告不出庭怎么办 安装u盘进入系统怎么办 思讯加密狗坏了怎么办 村主任选不出来怎么办 你的id已被停用怎么办 车牌摇号中签后怎么办 北京车卖了指标怎么办 车的电脑板坏了怎么办 饭卡消磁了怎么办妙招 有好项目没资金怎么办 买的股票涨停了怎么办 考研没过国家线怎么办 中石化的油卡怎么办