this post was submitted on 21 Apr 2025
31 points (89.7% liked)

Linux

53682 readers
595 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 6 years ago
MODERATORS
 

Screenshot showing how the directory last-modified timestamp changes each time a file underneath it is added, renamed and then removed.

I'm currently working on a build tool, which does caching based on the last-modified timestamp of files. And yeah, man, I was prepared for a world of pain, where I'd have to store a list of all files, so I could tell when one of them disappears.
I probably would've also had to make up some non-existent last-modified timestamp to try to pretend I know when that file got deleted. I figured, there's no way to ask the deleted file when it got deleted, because it doesn't exist anymore.

Thank you, to whomever had that smart idea to design it like that. I can just take the directory last-modified timestamp now, if it's the highest value.
In fact, my implementation accidentally does this correct already. That's how I found out. 🫠

you are viewing a single comment's thread
view the rest of the comments
[–] jdnewmil 17 points 1 week ago (1 children)

It is not recursive though. A directory is a special kind of inode that enumerates file inode numbers and when that list changes then the contents of that "directory inode" change. But if /home/user/.bashrc is deleted then the timestamp for /home will not be affected because the timestamps are associated with inodes rather than directory entries (assuming no symbolic links are involved).

https://www.redhat.com/en/blog/inodes-linux-filesystem https://en.wikipedia.org/wiki/inode

[–] [email protected] 6 points 1 week ago

Yeah, good point. It also doesn't update when the content of a file changes. So, in order to detect a change in a directory, you have to walk all the files and sub-directories and the directory itself to get the last-modified timestamp for each of them. Then determine the highest last-modified and compare it to what you measured in a previous run. If they differ, a change happened.