Linux stat命令用法
stat指令:文件/文件系统的详细信息显示。
stat命令主要用于显示文件或文件系统的详细信息,该命令的语法格式如下:
stat命令–>用来显示文件的详细信息,包括inode, atime, mtime, ctime
[root@localhost ~]# stat go1.15.5.linux-amd64.tar.gz
File: ‘go1.15.5.linux-amd64.tar.gz’
Size: 120900442 Blocks: 236136 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 100663373 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2021-05-12 02:14:43.488181955 -0400
Modify: 2020-11-12 14:54:27.000000000 -0500
Change: 2021-05-12 02:14:15.647499226 -0400
Birth: -
[root@localhost ~]#
- File:显示文件名
- Size:显示文件大小
- Blocks:文件使用的数据块总数
- IO Block:IO块大小
- regular file:文件类型(常规文件)
- Device:设备编号
- Inode:Inode号
- Links:链接数
- Access:文件的权限
- Gid、Uid:文件所有权的Gid和Uid。
- Access:atime 表示文件的访问时间。当文件内容被访问时,更新这个时间
- Modify:mtime,修改时间,注意这个不是建立时间,m不是make的意思。表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
- Change:ctime,改变时间。表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
atime:访问时间,读取文件或者执行文件时会更改,命令如cat,vi
mtime:修改时间,文件的内容被改变时,就会更改,如vi
ctime:改变时间,文件的标签如属性、用户、用户组、权限、内容等被改变时,就会更改,如chmod,chown,vi
atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息
最开始的三个时间是一模一样的,原因是我在创建它的同时修改了它的内容,所以它的大小,Blocks也发生变化,也相当于一次访问,所以,我退出保存后三个时间一致。
1) atime(访问时间)的更新
通过cat 查看文件内容,相当于访问了文件内容,所以访问时间会更新,其他2个时间不变。
- mtime(修改时间)的更新
这里我使用echo指令向test.txt 文件中写入了一行内容,发现,不止mtime被更新了,而且ctime也被更新了。
ctime在文件大小,Blocks发生变化时也会被更新。
3) ctime(状态时间)的更新
使用chmod指令修改test.txt的文件权限后,状态时间再次更新。 如下 状态时间发生了更新,修改时间没有变化。
touch命令 修改文件的时间戳
那如果不采取这些操作导致系统自己更新这三个时间,有没有办法人为改变这三个时间呢?
我们都知道touch命令是用来创建文件的,其实它的用法还有一个,就是修改文件的时间戳。
用法:
-a 或–time=atime或–time=access或–time=use 只更改访问时间。
-m 或–time=mtime或–time=modify 只更改修改时间
-d、-t 使⽤指定的⽇期时间,⽽⾮现在的时间
通过-a选项试图修改test.txt 的访问时间,结果ctime(状态时间)也发生了改变。虽然实际上touch操作只改变了atime,但是由于文件的状态发生了变化,所以ctime就自己更新了。
通过-m选项改了文件的修改时间,ctime依然更新了。touch指令依然只是修改了修改时间,而状态时间是系统自己更新的。
总结: 我们使用touch命令修改文件 atime、mtime,文件的ctime状态时间,系统会自动更新。
参考
Linux系统stat指令用法
参考URL: https://www.cnblogs.com/klb561/p/9241228.html