当前位置: 技术问答>linux和unix
linux下怎样或得文件创建日期??难道就或得不了吗?
来源: 互联网 发布时间:2016-07-22
本文导语: linux下 文件系统有fat32的和ext3的。我现在用lstat获得stat结构体,但是里面没有文件的创建时间。我现在想把最早创建的文件删除。不知道大家都用什么办法搞定的啊?我用st_mtime,不行啊?如果我删除了一个文件夹下...
linux下 文件系统有fat32的和ext3的。我现在用lstat获得stat结构体,但是里面没有文件的创建时间。我现在想把最早创建的文件删除。不知道大家都用什么办法搞定的啊?我用st_mtime,不行啊?如果我删除了一个文件夹下面的一些文件。下次在进行删除的时候,这个文件的st_mtime就变了。我想用文件的创建时间进行删除。现在卡在这里了痛苦的很啊。
|
如果你的文件被操作了。。。是不可能看出文件的创建时间的,除非你用了其他选项。。。。你这种情况我只能建议你读取mtime
|
在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。
但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。
与文件相关的几个时间:
1。访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。
2。修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。
3。状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。
查看文件的详细的状态、准确的修改时间等,可以通过stat命令+文件名。比如:
# stat nohup.out
File: `nohup.out'
Size: 8306 Blocks: 32 IO Block: 4096 regular file
Device: 802h/2050d Inode: 820136 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2007-05-28 10:28:59.492016424 -0400
Modify: 2006-11-16 09:04:03.000000000 -0500
Change: 2007-05-28 10:27:44.074481632 -0400
说明:Access访问时间。Modify修改时间。Change状态改变时间。
但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。
与文件相关的几个时间:
1。访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。
2。修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。
3。状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。
查看文件的详细的状态、准确的修改时间等,可以通过stat命令+文件名。比如:
# stat nohup.out
File: `nohup.out'
Size: 8306 Blocks: 32 IO Block: 4096 regular file
Device: 802h/2050d Inode: 820136 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2007-05-28 10:28:59.492016424 -0400
Modify: 2006-11-16 09:04:03.000000000 -0500
Change: 2007-05-28 10:27:44.074481632 -0400
说明:Access访问时间。Modify修改时间。Change状态改变时间。
|
I节点表占用若干个磁盘块,它几乎与标准Unix的I节点表相同。每个I节点占128个字节,读入缓冲区后存放在Struct ext2_inode 中。
Struct ext2_node
{
u16 i_mode; /*文件模式*/
u16 i_uid; /*文件主用户标识符*/
u_32 i_size; /*文件大小*/
u_32 i_atime /*最佳访问文件时间*/
u_32 i_stime; /*文件创建时间*/
u_32 i_mtime; /*文件最近修改时间*/
u_32 i_dtime; /*文件删除时间*/
u16 i_links_count; /*文件连接计数*/
u16 i_gid; /*文件主的用户组标识符*/
u32 i_blocks; /*文件的总块数*/
u32 i_flag; /*文件标志*/
u32 i_blocd[EXT2_N_BLOCKS]; /*文件地址块索引表*/
u32 i_file_acl; /*文件访问控制表*/
u32 i_dir_acl; /*目录访问控制表*/
…
}
貌似很多都只有最后修改时间。
http://topic.csdn.net/t/20050201/15/3768730.html
Struct ext2_node
{
u16 i_mode; /*文件模式*/
u16 i_uid; /*文件主用户标识符*/
u_32 i_size; /*文件大小*/
u_32 i_atime /*最佳访问文件时间*/
u_32 i_stime; /*文件创建时间*/
u_32 i_mtime; /*文件最近修改时间*/
u_32 i_dtime; /*文件删除时间*/
u16 i_links_count; /*文件连接计数*/
u16 i_gid; /*文件主的用户组标识符*/
u32 i_blocks; /*文件的总块数*/
u32 i_flag; /*文件标志*/
u32 i_blocd[EXT2_N_BLOCKS]; /*文件地址块索引表*/
u32 i_file_acl; /*文件访问控制表*/
u32 i_dir_acl; /*目录访问控制表*/
…
}
貌似很多都只有最后修改时间。
http://topic.csdn.net/t/20050201/15/3768730.html
|
[root@RHEL4_U5 ~]# stat test.sh
File: `test.sh'
Size: 23 Blocks: 16 IO Block: 4096 regular file
Device: 803h/2051d Inode: 375591 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-06-16 09:35:41.000000000 +0800
Modify: 2009-06-16 09:33:49.000000000 +0800
Change: 2009-06-16 09:33:49.000000000 +0800
用stat命令不就得出来了
File: `test.sh'
Size: 23 Blocks: 16 IO Block: 4096 regular file
Device: 803h/2051d Inode: 375591 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2009-06-16 09:35:41.000000000 +0800
Modify: 2009-06-16 09:33:49.000000000 +0800
Change: 2009-06-16 09:33:49.000000000 +0800
用stat命令不就得出来了
|
呵呵 干脆你专门为 创建带文件创建日期的功能 写一个小shell
每产生一个文件 就把 文件路径 当前创建日期 给记录到log file里。。。
每产生一个文件 就把 文件路径 当前创建日期 给记录到log file里。。。
|
看起来用 ls -l --time=ctime 可以取到文件创建时间:
[root@ache tmp]# ls -l --time=ctime a.c
-rw-r--r-- 1 root root 140 2009-05-22 12:37 a.c
[root@ache tmp]# ls -l --time=atime a.c
-rw-r--r-- 1 root root 140 2009-06-03 20:15 a.c
[root@ache tmp]# ls -l --time=access a.c
-rw-r--r-- 1 root root 140 2009-06-03 20:15 a.c
[root@ache tmp]# ls -l --time=use a.c
-rw-r--r-- 1 root root 140 2009-06-03 20:15 a.c
[root@ache tmp]# ls -l --time=status a.c
-rw-r--r-- 1 root root 140 2009-05-22 12:37 a.c
[root@ache tmp]#
|
ext2、ext3 没有记录创建时间。
你可以安装 fedora 11,用 ext4
你可以安装 fedora 11,用 ext4
/*
* Structure of an inode on the disk
*/
struct ext4_inode {
__le16 i_mode; /* File mode */
__le16 i_uid; /* Low 16 bits of Owner Uid */
__le32 i_size_lo; /* Size in bytes */
__le32 i_atime; /* Access time */
__le32 i_ctime; /* Inode Change time */
__le32 i_mtime; /* Modification time */
__le32 i_dtime; /* Deletion Time */
__le16 i_gid; /* Low 16 bits of Group Id */
__le16 i_links_count; /* Links count */
__le32 i_blocks_lo; /* Blocks count */
__le32 i_flags; /* File flags */
union {
struct {
__le32 l_i_version;
} linux1;
struct {
__u32 h_i_translator;
} hurd1;
struct {
__u32 m_i_reserved1;
} masix1;
} osd1; /* OS dependent 1 */
__le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */
__le32 i_generation; /* File version (for NFS) */
__le32 i_file_acl_lo; /* File ACL */
__le32 i_size_high;
__le32 i_obso_faddr; /* Obsoleted fragment address */
union {
struct {
__le16 l_i_blocks_high; /* were l_i_reserved1 */
__le16 l_i_file_acl_high;
__le16 l_i_uid_high; /* these 2 fields */
__le16 l_i_gid_high; /* were reserved2[0] */
__u32 l_i_reserved2;
} linux2;
struct {
__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
__u16 h_i_mode_high;
__u16 h_i_uid_high;
__u16 h_i_gid_high;
__u32 h_i_author;
} hurd2;
struct {
__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
__le16 m_i_file_acl_high;
__u32 m_i_reserved2[2];
} masix2;
} osd2; /* OS dependent 2 */
__le16 i_extra_isize;
__le16 i_pad1;
__le32 i_ctime_extra; /* extra Change time (nsec