stat指令:文件/文件系统的详细信息显示。
stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:
-f 不显示文件本身的信息,显示文件所在文件系统的信息
-L 显示符号链接
-t 简洁模式,只显示摘要信息
事实上,stat命令显示的是文件的I节点信息。Linux文件系统以块为单位存储信息,为了找到某一个文件所在存储空间的位置,用I节点对每个文件进行索引。
所谓的I节点,是文件系统管理的一个数据结构,是一个64字节长的表,包含了描述文件所必要的全部信息,其中包含了文件的大小,类型,存取权限,文件的所有者==
查询rc.d文件的信息
[root@redhat rc.d]# stat rc0.d/ //可以清楚的分析文件或目录的信息
File: `rc0.d/‘
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1309217 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2014-06-26 21:02:26.776082938 +0800
Modify: 2014-06-12 15:16:57.848087079 +0800
Change: 2014-06-12 15:16:57.848087079 +0800
[root@redhat rc0.d]# du -sh //这个目录下的所有文件共4K和上面大小差不多
4.0K .
查询ec.d文件所在文件系统的信息:
[root@redhat rc.d]# stat -f rc0.d/ //这个显示的跟当前系统的文件系统信息一样,因为rc.0就在当前系统的文件系统
File: "rc0.d/"
ID: 303116b72802c784 Namelen: 255 Type: ext2/ext3
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 7558388 Free: 5545748 Available: 5161800
Inodes: Total: 1921360 Free: 1850717
也可以查看硬盘的信息
[root@redhat rc.d]# stat /dev/sda
File: `/dev/sda‘
Size: 0 Blocks: 0 IO Block: 4096 block special file
Device: 5h/5d Inode: 6308 Links: 1 Device type: 8,0
Access: (0660/brw-rw----) Uid: ( 0/ root) Gid: ( 6/ disk)
Access: 2014-06-27 20:57:07.213940088 +0800
Modify: 2014-06-27 20:57:05.037938949 +0800
Change: 2014-06-27 20:57:05.037938949 +0800
sda硬盘文件系统的信息
[root@redhat rc.d]# stat -f /dev/sda
File: "/dev/sda"
ID: 0 Namelen: 255 Type: tmpfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 61793 Free: 61734 Available: 61734
Inodes: Total: 61793 Free: 61080
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据块总数
- IO Block:IO块大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid。
1.atime(访问时间)的更新
2.mtime(修改时间)的更新
这里我使用echo指令向hello.cpp文件中写入了一行内容,惊讶的发现,不止mtime被更新了,而且ctime也被更新了。这是问什么呢?原因很简单,前面说过,ctime在文件大小,Blocks发生变化时也会被更新,所以仔细观察上图,这两项信息是否发生变化了呢?
3.ctime(状态时间)的更新
使用chmod指令修改hello.cpp的文件权限后,状态时间再次更新。
那如果不采取这些操作导致系统自己更新这三个时间,有没有办法人为改变这三个时间呢?答案是有的,请继续往下看~
touch命令
我们都知道touch命令是用来创建文件的,其实它的用法还有一个,就是修改文件的时间戳。
用法:
-a 或–time=atime或–time=access或–time=use 只更改访问时间。
-m 或–time=mtime或–time=modify 只更改修改时间
-d、-t 使?指定的?期时间,??现在的时间
我们来试一试:
通过上图可以发现,我只是通过-a选项试图修改hello.cpp的访问时间,结果ctime(状态时间)也发生了改变。虽然实际上我用touch操作只改变了atime,但是由于文件的状态发生了变化,所以ctime就自己更新了。
没错,和上面一样,我只是通过-m选项改了文件的修改时间,ctime依然更新了。touch指令依然只是修改了修改时间,而状态时间是系统自己更新的。为什么会这样呢?想一下,我们每次使用touch指令其实都是修改了文件的inode信息,所以状态时间就会自己更新。