Files, File Systems & Descriptors
Paths, files, directories, metadata, permissions, offsets; the descriptor table; how a path becomes blocks on storage; inodes on Unix-style systems.
A filename is a directory entry that points at a file object; the object has metadata, permissions and blocks, and it can outlive — or have several — names.
A descriptor is a small integer indexing a per-process table whose entries point at system-wide open file descriptions (offset, flags) which in turn point at file objects — and on Linux sockets, pipes, timers and epoll instances are descriptors too.
A file system turns a path into directory lookups, metadata, and a map from byte ranges to storage blocks, tracks which blocks are free, and uses journaling or copy-on-write so that a crash halfway through an operation does not leave garbage.
On Unix-style file systems the inode is the file: a fixed-size record holding mode, owner, size, timestamps, link count and the block map — everything except the name, which lives in directories that point at it by number.