如何获得在猛砸/ Debian的文件创建日期/时间?(How to get file creatio

2019-07-19 19:13发布

我使用的是在Debian GNU / Linux的6.0猛砸。 是否有可能获取文件的创建日期/时间? 不修改日期/时间。 ls -lh a.txtstat -c %y a.txt都仅得到修改时间。

Answer 1:

不幸的是你的任务将不会在一般的可能,由POSIX标准定义有存储每个文件的只有3个不同的时间值(见基本定义4.8节文件时间更新 )

每个文件都有三个不同的关联的时间戳:最后的数据访问时间,最后修改数据的时间,时间的文件状态上次更改。 这些值在文件特性结构struct stat中返回,如在在<sys / stat.h> 。

编辑:由于在下面的评论中提到的,这取决于使用的元数据可能包含文件创建日期的文件系统。 但要注意的信息存储一样,是非标准。 这取决于它可能会导致移动到另一个文件系统的可移植性问题,在实际情况中使用的某种方式存储它反正。



Answer 2:

ls -i file #output is for me 68551981
debugfs -R 'stat <68551981>' /dev/sda3 # /dev/sda3 is the disk on which the file exists

#results - crtime value
[root@loft9156 ~]# debugfs -R 'stat <68551981>' /dev/sda3
debugfs 1.41.12 (17-May-2010)
Inode: 68551981   Type: regular    Mode:  0644   Flags: 0x80000
Generation: 769802755    Version: 0x00000000:00000001
User:     0   Group:     0   Size: 38973440
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 76128
Fragment:  Address: 0    Number: 0    Size: 0
 ctime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
 atime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013
 mtime: 0x526931d7:1697cce0 -- Thu Oct 24 16:42:31 2013
**crtime: 0x52691f4d:7694eda4 -- Thu Oct 24 15:23:25 2013**
Size of extra inode fields: 28
EXTENTS:
(0-511): 352633728-352634239, (512-1023): 352634368-352634879, (1024-2047): 288392192-288393215, (2048-4095): 355803136-355805183, (4096-6143): 357941248-357943295, (6144
-9514): 357961728-357965098


Answer 3:

mikyra的答案是good.The其实就跟他说什么。

[jason@rh5 test]$ stat test.txt
  File: `test.txt'
  Size: 0               Blocks: 8          IO Block: 4096   regular empty file
Device: 802h/2050d      Inode: 588720      Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  500/   jason)   Gid: (  500/   jason)
Access: 2013-03-14 01:58:12.000000000 -0700
Modify: 2013-03-14 01:58:12.000000000 -0700
Change: 2013-03-14 01:58:12.000000000 -0700

如果您想验证至极文件首次创建,您可以通过附加的系统日期当您创建一系列的文件结构的文件名。



Answer 4:

请注意,如果你有安装与noatime的性能方面的原因你的文件系统,那么的atime可能会显示创建时间。 鉴于在一个巨大的性能提升noatime的结果(通过消除对每一个文件的读取时间,磁盘写入),它可能是一个明智的配置选项也给你你想要的结果。



Answer 5:

创建日期/时间一般存储。 所以,不,你不能。



Answer 6:

LS小号menus.xml

94490个menus.xml这里数94490代表的inode

然后做一个:

DF -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg-root   4.0G  3.4G  408M  90% /
tmpfs                 1.9G     0  1.9G   0% /dev/shm
/dev/sda1             124M   27M   92M  23% /boot
/dev/mapper/vg-var    7.9G  1.1G  6.5G  15% /var

要找到根“/”文件系统的安装点,因为该文件menus.xml是“/”是“的/ dev /映射器/ VG-根”

debugfs -R 'STAT <94490>' 的/ dev /映射器/ VG-根

输出可以是如下面的一个:

debugfs -R 'STAT <94490>' 的/ dev /映射器/ VG-根

debugfs 1.41.12 (17-May-2010)
Inode: 94490   Type: regular    Mode:  0644   Flags: 0x0
Generation: 2826123170    Version: 0x00000000
User:     0   Group:     0   Size: 4441
File ACL: 0    Directory ACL: 0
Links: 1   Blockcount: 16
Fragment:  Address: 0    Number: 0    Size: 0
ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
atime: 0x5266e47b -- Wed Oct 23 09:47:55 2013
mtime: 0x5266e438 -- Wed Oct 23 09:46:48 2013
Size of extra inode fields: 4
Extended attributes stored in inode body: 
  selinux = "unconfined_u:object_r:usr_t:s0\000" (31)
BLOCKS:
(0-1):375818-375819
TOTAL: 2

在这里你可以看到创建时间:

ctime: 0x5266e438 -- Wed Oct 23 09:46:48 2013


Answer 7:

你可以找到创建时间-又名出生时间-使用统计和也匹配使用find。
我们有这些文件显示最后修改时间:

$ ls -l --time-style=long-iso | sort -k6
total 692
-rwxrwx---+ 1 XXXX XXXX 249159 2013-05-31 14:47 Getting Started.pdf
-rwxrwx---+ 1 XXXX XXXX 275799 2013-12-30 21:12 TheScienceofGettingRich.pdf
-rwxrwx---+ 1 XXXX XXXX  25600 2015-05-07 18:52 Thumbs.db
-rwxrwx---+ 1 XXXX XXXX 148051 2015-05-07 18:55 AsAManThinketh.pdf

为了找到使用发现如下一个特定时间范围内创建的文件。
显然,文件系统知道文件的诞生时间:

$ find -newerBt '2014-06-13' ! -newerBt '2014-06-13 12:16:10' -ls 
20547673299906851  148 -rwxrwx---   1 XXXX XXXX   148051 May  7 18:55 ./AsAManThinketh.pdf
1407374883582246  244 -rwxrwx---   1 XXXX XXXX   249159 May 31  2013 ./Getting\ Started.pdf


我们可以证实这一点使用统计:

$ stat -c "%w %n" * | sort
2014-06-13 12:16:03.873778400 +0100 AsAManThinketh.pdf
2014-06-13 12:16:04.006872500 +0100 Getting Started.pdf
2014-06-13 12:16:29.607075500 +0100 TheScienceofGettingRich.pdf
2015-05-07 18:32:26.938446200 +0100 Thumbs.db


统计手册页解释%重量:

%w     time of file birth, human-readable; - if unknown


Answer 8:

作为@mikyra解释,创建日期时间不存储。

上述所有方法都不错,但如果你想快速得到的只是最后的修改日期,您可以键入:

ls -lit /path

-t选项你列出/按上次修改日期odered路径上的所有文件。



Answer 9:

如果你真的想实现,你可以使用文件观察家像inotifywait 。

你看一个目录,并保存了在目录之外的单独文件文件创建信息。

while true; do
  change=$(inotifywait -e close_write,moved_to,create .)
  change=${change#./ * }
  if [ "$change" = ".*" ]; then ./scriptToStoreInfoAboutFile; fi
done

由于没有创建时间存储,您可以根据inotify的构建自己的系统。



Answer 10:

从引https://unix.stackexchange.com/questions/50177/birth-is-empty-on-ext4/131347#131347 ,以下shell脚本将努力获得创建时间:

get_crtime() {
   for target in "${@}"; do
       inode=$(stat -c %i "${target}")
       fs=$(df "${target}"  | tail -1 | awk '{print $1}')
       crtime=$(sudo debugfs -R 'stat <'"${inode}"'>' "${fs}" 2>/dev/null | grep -oP 'crtime.*--\s*\K.*')
       printf "%s\t%s\n" "${target}" "${crtime}"
   done
}


Answer 11:

甚至更好:

lsct () 
{ 
    debugfs -R 'stat <'`ls -i "$1" | (read a b;echo -n $a)`'>' `df "$1" | (read a; read a b; echo "$a")` 2> /dev/null | grep --color=auto crtime | ( read a b c d;
    echo $d )
}

LSCT的/ etc

周三07月20日19时25分48秒2016



Answer 12:

要添加到您的阿森纳另一个窍门是以下几点:

$ grep -r "Copyright" /<path-to-source-files>/src

一般来说,如果一个人改变一个文件就应该要求在“版权”的功劳。 检查日期,文件名,贡献者和联系人的电子邮件结果。

例如grep的结果:

/<path>/src/someobject.h: * Copyright 2007-2012 <creator's name> <creator's email>(at)<some URL>>


文章来源: How to get file creation date/time in Bash/Debian?