我在 Linux Mint 21 上,我有一个 EXT4 文件系统
文件系统功能: has_journal ext_attr resize_inode dir_index filetype Needs_recovery extent 64bit flex_bg稀疏_superlarge_file巨大_file dir_nlink extra_isizemetadata_csum
我打开了一个文件 my_test:
touch my_test
stat my_test
File: my_test
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 831h/2097d Inode: 54 Links: 1
Access: 2023-12-17 22:26:37.610635694 +0100
Modify: 2023-12-17 22:26:37.610635694 +0100
Change: 2023-12-17 22:26:37.610635694 +0100
Birth: 2023-12-17 22:26:37.610635694 +0100
然后用nano编辑它
nano my_test
stat my_test
File: my_test
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: 831h/2097d Inode: 54 Links: 1
Access: 2023-12-17 22:27:32.207040986 +0100
Modify: 2023-12-17 22:27:48.387162937 +0100
Change: 2023-12-17 22:27:48.387162937 +0100
Birth: 2023-12-17 22:26:37.610635694 +0100
你看到出生日期一模一样,然后我用 libre writer 打开它,编辑一些内容并保存
stat my_test
File: my_test
Size: 17 Blocks: 8 IO Block: 4096 regular file
Device: 831h/2097d Inode: 55 Links: 1
Access: 2023-12-17 22:29:06.259760565 +0100
Modify: 2023-12-17 22:29:06.259760565 +0100
Change: 2023-12-17 22:29:06.267760627 +0100
Birth: 2023-12-17 22:29:06.251760503 +0100
出生日期改变了 - 你看到有一个新的索引节点 - 为什么?
壳:
echo "hello" > my_test
保留出生日期
为什么 libre office writer 或 xed 更改出生日期,
这使得出生日期的整体意义变得毫无用处
他们是否使用了与文件系统功能相同的错误动态库?或者是什么?
答案1
比 don_crissti 的优秀更精确一点评论这解释了这种情况:
具有复杂文件类型编写器的程序倾向于写入临时文件,然后将临时文件重命名为原始名称,自动用新保存的文件替换它。
这有两个优点
- 如果您有一个错误导致程序在保存过程中崩溃,则原始版本保持不变(希望这不是您需要的“功能”)
- 原始文件名下任何时候都不会存在“半完整”文件。这对于在文件更改时自动更新文件的程序(例如,文件管理器的预览)有很大的不同。
但你是对的,这使得ctime
文件的 变得无关紧要。至少在 libreoffice 中,您会发现在“文件属性”对话框中,仍然保存了原始创建时间 - 但它保存在文件本身中,而不是作为文件属性。