stat
stat 概述
1 2 3 4 5 6 7 8 9 10
| [root@localhost ~]# stat /etc/passwd File: ‘/etc/passwd’ Size: 2309 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 34179165 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:passwd_file_t:s0 Access: 2023-11-08 11:30:30.944003508 +0800 Modify: 2023-11-08 11:30:30.939003508 +0800 Change: 2023-11-08 11:30:30.939003508 +0800 Birth: -
|
stat 常用命令
1 2 3 4 5 6
| root@localhost ~]# stat -f /etc/passwd File: "/etc/passwd" ID: fd0000000000 Namelen: 255 Type: xfs Block size: 4096 Fundamental block size: 4096 Blocks: Total: 9201265 Free: 8047984 Available: 8047984 Inodes: Total: 18411520 Free: 18277571
|
1 2
| [root@localhost ~]# stat -t /etc/passwd /etc/passwd 2309 8 81a4 0 0 fd00 34179165 1 0 0 1699414230 1699414230 1699414230 0 4096 system_u:object_r:passwd_file_t:s0
|
Linux 文件时间戳
- 在文件系统中,atime、ctime 和 mtime 是与文件相关的时间戳。它们分别表示文件的访问时间、状态改变时间和修改时间。
- 当一个文件被创建时,atime、ctime、mtime 均为当前时间:
1 2 3 4 5 6 7 8 9 10
| [root@localhost ~]# touch demo ; stat demo File: ‘demo’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2023-11-09 02:39:31.048447277 +0800 Modify: 2023-11-09 02:39:31.048447277 +0800 Change: 2023-11-09 02:39:31.048447277 +0800 Birth: -
|
atime
- atime 是文件系统中的一个时间戳属性,表示文件的访问时间(Access Time),即最后一次读取文件内容的时间。
- 每当一个文件被打开并读取时,文件系统会更新该文件的 atime。这包括对文件内容的读取操作,如查看文件内容、复制文件等。但是,仅仅查看文件的元数据(例如文件权限、大小等)而没有读取文件内容时,atime 不会被更新。
- atime 可以用于跟踪文件的访问情况,了解文件的使用频率和活动。它在一些应用场景中很有用,例如:
- 系统监控:通过检查文件的 atime,可以确定哪些文件最近被访问过,从而了解系统中哪些文件是活跃的。
- 安全审计:atime 可以用于审计和监测文件的访问情况,特别是对于敏感文件或系统关键文件的访问记录。
注:更新文件的 atime 会导致文件系统的额外开销,因为每次读取文件时都要更新该属性。为了提高性能,某些操作系统和文件系统可能会延迟或禁用 atime 的更新。
1 2 3 4 5 6 7 8 9 10 11
| # cat 查看 [root@localhost ~]# cat demo ; stat demo File: ‘demo’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2023-11-09 02:39:44.135448054 +0800 Modify: 2023-11-09 02:39:31.048447277 +0800 Change: 2023-11-09 02:39:31.048447277 +0800 Birth: -
|
ctime
- ctime 是文件系统中的一个时间戳属性,表示文件的状态改变时间(Change Time),也称为 inode 改变时间。
注:inode 包含了文件或目录的元数据,包括文件的权限、所有者、大小、时间戳以及文件的实际数据块的位置等信息。inode 的主要作用是提供文件系统对文件的索引和管理,它记录了文件系统中每个文件的详细信息。
- ctime 记录的是文件的元数据(metadata)最后一次发生变化的时间,包括以下情况:
- 修改文件的权限、所有者、组等元数据。
- 修改文件的链接数目。
- 重命名文件或移动文件到不同的目录。
- 更改文件的大小。
- 修改文件的扩展属性或ACL(访问控制列表)。
- 需要注意的是,ctime 的更新与文件内容的修改无关。即使只是修改文件的权限或所有者,ctime 也会被更新。
- ctime 在以下场景中有一些常见的应用:
- 审计和安全:通过检查文件的 ctime,可以确定文件的元数据最近是否发生了变化,从而监控文件被更改的情况,以及检测潜在的安全问题。
- 文件备份:在备份文件时,可以使用 ctime 来判断文件是否在备份前发生过更改。这可以帮助决定是否需要重新备份文件,以确保备份的数据是最新的。
1 2 3 4 5 6 7 8 9 10
| [root@localhost ~]# chmod u=rw demo ; stat demo File: ‘demo’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2023-11-09 02:39:44.135448054 +0800 Modify: 2023-11-09 02:39:31.048447277 +0800 Change: 2023-11-09 02:44:57.479466653 +0800 Birth: -
|
mtime
- mtime 是文件系统中的一个时间戳属性,表示文件的修改时间(Modification Time),即文件内容最后一次被修改的时间。
- 每当文件的内容被修改时,文件系统会更新该文件的 mtime。这包括对文件内容进行写入、编辑、附加等操作。但仅仅改变文件的元数据(例如权限、所有者等)而不修改文件内容时,mtime 不会被更新。
- mtime 在许多情况下非常有用,例如:
- 文件同步和备份:通过比较文件的 mtime,可以确定文件是否在上次同步或备份后发生了修改,从而有选择性地更新或备份文件。
- 文件版本控制:在版本控制系统中,mtime 可以用作确定文件是否已被修改,并在提交修改时记录相应的版本信息。
- 文件恢复:当文件意外损坏或丢失时,可以使用 mtime 来确定最近修改的备份或快照,并进行文件恢复。
注:ls -l 中时间戳表示的是文件的 mtime(Modification Time,修改时间),也就是文件内容最后一次被修改的时间。
1 2 3 4 5 6 7 8 9 10 11 12 13
| [root@localhost ~]# echo 1 > demo ; stat demo File: ‘demo’ Size: 2 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2023-11-09 02:39:44.135448054 +0800 Modify: 2023-11-09 02:46:42.621472894 +0800 Change: 2023-11-09 02:46:42.621472894 +0800 Birth: - [root@localhost ~]# ls -l demo -rw-r--r--. 1 root root 2 Nov 9 02:46 demo
|
- 这里可以发现 ctime,也发生了改变,因为写入内容后大小发生了变化。
注:mtime 的改变必然导致 ctime 的改变,但是 ctime 不一定导致 mtime 的更改。
touch
touch 概述
- touch 是一个常用的命令行工具,可在许多操作系统上使用,用于创建新文件或更新已存在文件的访问时间和修改时间。
- 主要功能:
- 创建新文件:如果指定的文件不存在,touch 命令可以创建一个新的空文件。可以通过指定文件名作为参数来创建文件,例如:touch example.txt 将创建一个名为 “example.txt” 的空文件。
- 更新时间戳:touch 命令还可以用于更新已存在文件的时间戳。默认情况下,touch 命令会将文件的访问时间(atime)和修改时间(mtime)设置为当前时间。这对于需要手动更新文件时间戳的情况非常有用。
touch 常用命令
- 使用 touch 命令时,可以使用以下参数来控制其行为。
- touch:指定的文件不存在,touch 命令可以创建一个新的空文件:
1 2 3 4 5 6 7 8 9 10
| [root@localhost ~]# touch demo ; stat demo File: ‘demo’ Size: 2 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2023-11-09 03:03:02.077531030 +0800 Modify: 2023-11-09 03:03:02.077531030 +0800 Change: 2023-11-09 03:03:02.077531030 +0800 Birth: -
|
- touch -t:使用指定的时间戳来设置文件的时间戳:
1 2 3 4 5 6 7 8 9 10
| [root@localhost ~]# touch -t 202312120000.00 demo ; stat demo File: ‘demo’ Size: 2 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2023-12-12 00:00:00.000000000 +0800 Modify: 2023-12-12 00:00:00.000000000 +0800 Change: 2023-11-09 03:03:32.007532807 +0800 Birth: -
|
注:在使用 touch -t 命令时,实际上修改了文件的时间戳信息,这被视为文件的元数据更改,因此 ctime 会被更新为当前时间。
- touch -at:仅更新访问时间(atime),而不修改修改时间(mtime):
1 2 3 4 5 6 7 8 9 10
| [root@localhost ~]# touch -at 202412120000.00 demo ; stat demo File: ‘demo’ Size: 2 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2024-12-12 00:00:00.000000000 +0800 Modify: 2023-12-12 00:00:00.000000000 +0800 Change: 2023-11-09 03:05:10.353538644 +0800 Birth: -
|
- touch -mt:仅更新修改时间(mtime),而不修改访问时间(atime):
1 2 3 4 5 6 7 8 9 10
| [root@localhost ~]# touch -mt 202512120000.00 demo ; stat demo File: ‘demo’ Size: 2 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 67764339 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2024-12-12 00:00:00.000000000 +0800 Modify: 2025-12-12 00:00:00.000000000 +0800 Change: 2023-11-09 03:05:25.730539557 +0800 Birth: -
|
find
1 2 3 4 5 6 7 8
| # 查找近7天被访问的文件 find / -atime -7
# 查找7天前被修改的文件 find / -mtime +7
# 查找第7天被修改的文件 find / -mtime 7
|