一、标题Linux中ls -l显示时间不全的问题
可以使用命令 ls -l --time-style=full 使时间完整显示。
export TIME_STYLE=’+%Y-%m-%d %H:%M:%S’
ll命令可以按照上述时间格式显示
ls实现列文件按时间排序
ls -lt 时间最近的在前面
ls -ltr 时间从前到后
利用sort
ls -l | sort +7 (日期为第8列) 时间从前到后
ls -l | sort -r +7 时间最近的在前面
二、查看文件时间
stat
stat 显示文件的详细信息
首先新建一个文件sh_rest,用stat查看文件的详细信息。
[root@cos7 app ]#
[root@cos7 app ]#touch "sh_rest`date "+%F %T"`"
[root@cos7 app ]#stat sh_rest2019-01-28\ 16\:11\:06
File: ‘sh_rest2019-01-28 16:11:06’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd02h/64770d Inode: 71 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-28 16:11:06.436203058 +0800
Modify: 2019-01-28 16:11:06.436203058 +0800
Change: 2019-01-28 16:11:06.436203058 +0800
Birth: -
1
2
3
4
5
6
7
8
9
10
11
12
Access : 最后一次文件的访问时间。
Modify :最后一次文件修改(内容)时间。
Change :最后一次文件状态改变(文件属性)的时间。
在windows下,一个文件有:创建时间、修改时间、访问时间。
而在Linux下,一个文件也有三种时间,分别是:访问时间、修改时间、状态时间
那么可以知道,在linux中是文件是没有创建时间的,只是如果刚刚创建一个文件,毋庸置疑它的三个时间是都等于创建时间的,就像刚才创建的‘sh_rest2019-01-28 16:11:06’文件,我们看到它的三个时间是相等的。那么在linux上这三个时间分别代表着什么,随着什么而改变:
修改时间:文件的内容被最后一次修改的时间,我们经常用的ls -l命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变;
访问时间:对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more等操作,但是像之前的state还有ls命令对atime是不会有影响的;
状态时间:当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的。
编辑sh_rest,不改变文件内容及属性,并查看文件的详细信息。
[root@cos7 app ]#cat > sh_rest2019-01-28\ 16\:11\:06
我是夜晚的萤火虫,不为黎明的曙光,只为身边万丈光芒的驱使,只因适者生存
[root@cos7 app ]#stat sh_rest2019-01-28\ 16\:11\:06
File: ‘sh_rest2019-01-28 16:11:06’
Size: 106 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 71 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-28 16:11:06.436203058 +0800
Modify: 2019-01-28 16:12:17.176204812 +0800 #改变
Change: 2019-01-28 16:12:17.176204812 +0800 #改变
Birth: -
[root@cos7 app ]#vim sh_rest2019-01-28\ 16\:11\:06
#添加了:再次添加文字测试时间
[root@cos7 app ]#stat sh_rest2019-01-28\ 16\:11\:06
File: ‘sh_rest2019-01-28 16:11:06’
Size: 138 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 75 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-28 16:15:29.074209570 +0800 #改变
Modify: 2019-01-28 16:15:29.074209570 +0800 #改变
Change: 2019-01-28 16:15:29.089209570 +0800 #改变
Birth: -
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
编辑文件,cat和vim有所不同,cat为编辑和修改时间,vim是3个时间
那么如果我只是用vim命令,没有进行文件内容的添加或者删除而是直接退出,就只有它的访问时间发生了改变,说明vim操作先对文件进行访问
[root@cos7 app ]#cat sh_rest2019-01-28\ 16\:11\:06
我是夜晚的萤火虫,不为黎明的曙光,只为身边万丈光芒的驱使,只因适者生存.
再次添加文字测试时间
[root@cos7 app ]#stat sh_rest2019-01-28\ 16\:11\:06
File: ‘sh_rest2019-01-28 16:11:06’
Size: 138 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 75 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-28 16:17:32.505212631 +0800
Modify: 2019-01-28 16:15:29.074209570 +0800
Change: 2019-01-28 16:15:29.089209570 +0800
Birth: -
1
2
3
4
5
6
7
8
9
10
11
12
13
与上次比较,Access 改变,其他不变。
更改文件的权限属性,查看文件详细信息。
[root@cos7 app ]#chmod 764 sh_rest2019-01-28\ 16\:11\:06
[root@cos7 app ]#stat sh_rest2019-01-28\ 16\:11\:06
File: ‘sh_rest2019-01-28 16:11:06’
Size: 138 Blocks: 8 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 75 Links: 1
Access: (0764/-rwxrw-r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-01-28 16:17:32.505212631 +0800
Modify: 2019-01-28 16:15:29.074209570 +0800
Change: 2019-01-28 16:18:05.123213439 +0800
Birth: -
1
2
3
4
5
6
7
8
9
10
11
与上次比较,Change改变,其他不变。
总结:
访问文件时,Access改变,Modify,Change不变。
更改文件状态时,Access,Modify不变,Change改变。
更改文件内容时,Access,Modifyv,Change,都改变。
三、linux下查看和修改文件时间
一、查看文件时间及相关命令
1、stat查看文件时间
[root@web10 ~]# stat install.log
File: “install.log”
Size: 33386 Blocks: 80 IO Block: 4096 一般文件
Device: fd00h/64768d Inode: 7692962 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-07-13 16:02:34.000000000 +0800
Modify: 2011-11-29 16:03:06.000000000 +0800
Change: 2011-11-29 16:03:08.000000000 +0800
说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat *查看这个目录所有文件的状态。
而我们想要查看某文件的三个时间中的具体某个时间,并以年月日时分秒的格式保存。我们可以使用下面的命令:
[root@web10 ~]# stat install.log|grep -i Modify | awk -F. ‘{print $1}’ | awk ‘{print $2$3}’| awk -F- ‘{print $1$2$3}’ | awk -F: ‘{print $1$2$3}’
20111129160306
2、ls查看文件时间
相应的通过ls 查看时也有三个时间:
• modification time(mtime,修改时间):当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性。
• status time(ctime,状态时间):当该文件的”状态(status)”改变时,就会更新这个时间,举例来说,更改了权限与属性,就会更新这个时间。
• access time(atime,存取时间):当“取用文件内容”时,就会更新这个读取时间。举例来说,使用cat去读取 ~/.bashrc,就会更新atime了。
[root@web10 ~]# ls -l --time=ctime install.log
-rw-r–r-- 1 root root 33386 2011-11-29 install.log
[root@web10 ~]# ls -l --time=atime install.log
-rw-r–r-- 1 root root 33386 07-13 16:02 install.log
注意:ls参数里没有–mtime这个参数,因为我们默认通过ls -l查看到的时间就是mtime 。
二、修改文件时间
touch
创建文件我们可以通过touch来创建。同样,我们也可以使用touch来修改文件时间。touch的相关参数如下:
-a : 仅修改access time。
-c : 仅修改时间,而不建立文件。
-d : 后面可以接日期,也可以使用 --date=“日期或时间”
-m : 仅修改mtime。
-t : 后面可以接时间,格式为 [YYMMDDhhmm]
注:如果touch后面接一个已经存在的文件,则该文件的3个时间(atime/ctime/mtime)都会更新为当前时间。若该文件不存在,则会主动建立一个新的空文件。
[root@web10 ~]# touch install.log
[root@web10 ~]# stat install.log
File: “install.log”
Size: 33386 Blocks: 80 IO Block: 4096 一般文件
Device: fd00h/64768d Inode: 7692962 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2012-07-13 16:21:50.000000000 +0800
Modify: 2012-07-13 16:21:50.000000000 +0800
Change: 2012-07-13 16:21:50.000000000 +0800
ls
同样,使用ls ,查看到的结果也一样。
[root@web10 ~]# ls -l --time=ctime install.log
-rw-r–r-- 1 root root 33386 07-13 16:21 install.log
[root@web10 ~]# ls -l --time=atime install.log
-rw-r–r-- 1 root root 33386 07-13 16:21 install.log
[root@web10 ~]# ls -l install.log
-rw-r–r-- 1 root root 33386 07-13 16:21 install.log
单独查看三个时间的操作
除了可以通过stat来查看文件的mtime,ctime,atime等属性,也可以通过ls命令来查看,具体如下:
ls -lc filename 列出文件的 ctime (最后更改时间)
ls -lu filename 列出文件的 atime(最后存取时间)
ls -l filename 列出文件的 mtime (最后修改时间)
下面再看一个和touch不相关的例子:
[root@web10 ~]# cp /etc/profile .;ll --time=atime profile ;ll --time=ctime profile
cp:是否覆盖“./profile”? y
-rw-r–r-- 1 root root 1344 07-13 16:24 profile
-rw-r–r-- 1 root root 1344 07-13 16:25 profile
因为我之前运行过这个命令一次,所以会出现覆盖,不过这个覆盖出的好,刚才让我们看到了atime和ctime的时间的差别。
我们再回到touch利用touch修改文件时间:
1. 同时修改文件的修改时间和访问时间
touch -d “2010-05-31 08:10:30” install.log
2. 只修改文件的修改时间
touch -m -d “2010-05-31 08:10:30” install.log
3. 只修改文件的访问时间
touch -a -d “2010-05-31 08:10:30” install.log
下面再给一个rootkit木马常用的伎俩。就是把后一个文件的时间修改成和前一个相同。
touch -acmr /bin/ls /etc/sh.conf
另外touch还支持像date命令一样参数修改文件时间:
[root@web10 ~]# touch -d “2 days ago” install.log ; ll install.log
-rw-r–r-- 1 root root 33386 07-11 16:35 install.log
最后总结下常用的文件操作与时间的关系:
1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。
2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vim后保存文件。ls -l列出的时间就是这个时间。
3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/csdn_immortal/article/details/86677496/