在使用Linux服务器的过程中,经常会涉及到文件一些时间参数的处理。比如,当存储空间不够时,我们需要删除或移走一些过时的旧文件(比如业务化模式中,旧的中间文件),这时需要查看一些文件的最后修改时间(比如数值模式的namelist)。
在Linux下操作命令分别为:
ls -l : 获取文件最后一次内容修改的时间(modification time(mtime))
ls -lu : 获取文件最后一次访问的时间(change time(ctime))
ls -lc : 获取文件最后一次状态的改变时间(access time(atime))
首先我们需要创建好一个test.c文件: touch test.c
1.用ls -l命令:该命令显示的是文件的详细信息。在文件名的前面有一列显示的是时间,这个时间是创建/修改时间。
admin@marvin:~/workspace/test$ ls -l
total 0
-rw-rw-r-- 1 admin admin 0 Aug 16 00:13 test.c
# Linux下其实是无法通过一般命令查看到创建事件的,但是可以通过atime、mtime、ctime来得到。
# 当没有访问过文件时,atime即为文件的创建时间
# 当没有修改文件内容时,mtime即为文件的创建时间
# 当文件状态没有改变时,ctime为创建时间
2.用stat命令: $stat 文件名
admin@marvin:~/workspace/test$ stat test.c
File: test.c
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 1592057 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ admin) Gid: ( 1000/ admin)
Access: 2022-08-16 00:13:58.649364945 +0800
Modify: 2022-08-16 00:13:58.649364945 +0800
Change: 2022-08-16 00:13:58.649364945 +0800
Birth: -
其中,
我们可以看出,在执行这行指令后,不仅仅显示了Atime(Access)、Mtime(Modify)、Ctime(Change),还有其他的一些信息,比如:文件的大小(Size)、所占块数、文件类型、Inode号、文件权限、以及UID和GID等等。
补充:
- 由于Linux下块的大小是512字节,所占块数 = Block显示数字 / 512
- GID:GroupID,即组ID,用来标识用户组的唯一标识符(每个组用户也有唯一的组id)
- UID:UserId,即用户ID,用来标识每个用户的唯一标识符(每个用户都有唯一的用户id)
下面的几行表示文件的atime、mtime、ctime,最后有一个Birth是看不到的,这个需要用其他方法得到。
再往下看还有三行信息,这就是文件的三种时间,既然已经给出了这三种时间的概念,那我们就举个例子来解释说明一下:
Atime:
admin@marvin:~/workspace/test$ stat test.c
File: test.c
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 1592057 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ admin) Gid: ( 1000/ admin)
Access: 2022-08-16 00:13:58.649364945 +0800
Modify: 2022-08-16 00:13:58.649364945 +0800
Change: 2022-08-16 00:13:58.649364945 +0800
Birth: -
admin@marvin:~/workspace/test$ cat test.c
admin@marvin:~/workspace/test$ stat test.c
File: test.c
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 1592057 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ admin) Gid: ( 1000/ admin)
Access: 2022-08-16 00:22:44.049744198 +0800
Modify: 2022-08-16 00:13:58.649364945 +0800
Change: 2022-08-16 00:13:58.649364945 +0800
Birth: -
我们可以看到,cat之后,文件的Access时间便发生了变化。
Mtime:
admin@marvin:~/workspace/test$ stat test.c
File: test.c
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 1592057 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ admin) Gid: ( 1000/ admin)
Access: 2022-08-16 00:22:44.049744198 +0800
Modify: 2022-08-16 00:13:58.649364945 +0800
Change: 2022-08-16 00:13:58.649364945 +0800
Birth: -
admin@marvin:~/workspace/test$ echo "hello" > test.c
admin@marvin:~/workspace/test$ stat test.c
File: test.c
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 1592057 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ admin) Gid: ( 1000/ admin)
Access: 2022-08-16 00:22:44.049744198 +0800
Modify: 2022-08-16 00:24:35.492976183 +0800
Change: 2022-08-16 00:24:35.492976183 +0800
Birth: -
Ctime:
admin@marvin:~/workspace/test$ stat test.c
File: test.c
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 1592057 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ admin) Gid: ( 1000/ admin)
Access: 2022-08-16 00:22:44.049744198 +0800
Modify: 2022-08-16 00:13:58.649364945 +0800
Change: 2022-08-16 00:13:58.649364945 +0800
Birth: -
admin@marvin:~/workspace/test$ echo "hello" > test.c
admin@marvin:~/workspace/test$ stat test.c
File: test.c
Size: 6 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 1592057 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ admin) Gid: ( 1000/ admin)
Access: 2022-08-16 00:22:44.049744198 +0800
Modify: 2022-08-16 00:24:35.492976183 +0800
Change: 2022-08-16 00:24:35.492976183 +0800
Birth: -
Birth
文件创建时间存储在ext4文件系统的inode中。早期版本的ext文件系统不支持文件创建时间。debugfs stat输出中有一个crtime(创建时间)时间戳。最后,ext4支持创建时间,就像在ntfs窗口中btime一样。
可以按照以下说明查找文件创建时间。选个例子,我使用的是一个现择现有文件或创建新文件进行测试。对于这有的文件。
步骤1:查找inode文件编号
首先,在终端上使用以下命令查找任何文件的inode编号。
$ ls -i /var/log/secure
13377/var/log/syslog
步骤2:查找文件创建时间(crtime)
获取文件的inode编号后,使用带有inode编号统计信息的debugfs命令跟随磁盘路径。
debugfs -R 'stat <inode_number>' /dev/sda1
使用touch指令,不仅可以创建一个文件,还可以修改文件的时间:
格式:touch 参数 文件名
参数:
-a:或--time=atime或--time=access或--time=use
-c:或--no-creat,如果棉花地文件不存在,也不创建任何文档
-d:使用指定的日期时间,可以使用不同的格式
-m:或--time=mtime或--time=modify,改变修改时间
-r:把指定的文件日期更设成和参考文档或目录日期相同的时间
-t:使用指定的日期时间,格式与date指令相同
以下会通过实例来讲解这些命令的用法:
touch -d 时间 文件名
touch -d "时间" 文件名