A journal file moves from active to archived on rotation, then an archived file can be removed by vacuum.

The systemd journal needs an explicit retention contract

The systemd journal stores messages with structured metadata in journal files. That makes service output searchable without first inventing a parser for every application’s text format. Keeping those messages for a useful period is a separate requirement. Storage location, size policy, rotation, and forwarding determine which evidence remains available when an incident is investigated later. ...

October 26, 2027 · 5 min · XB Field Notes
Three identical unread writes can yield one modify notification. An overflow signal means event history was dropped; a rescan recovers current state, not the missing sequence.

Inotify reports changes, but it is not a complete history

Inotify delivers Linux filesystem notifications through an instance with registered watches and a readable event queue. Each record identifies a watch, event mask, and possibly a name and move cookie. This can avoid repeatedly checking unchanged paths, but the stream is not an unlimited audit log. Correct consumers interpret notifications as evidence that relevant state may need to be inspected again. ...

October 13, 2027 · 5 min · XB Field Notes
Directory entries source and alias both point to one inode. An in-place write through either name changes the shared bytes; neither name is intrinsically the original.

Hard links share an inode until a name is replaced

A hard link adds another directory entry referring to an existing file. Neither name is intrinsically the original: both identify the same inode within its filesystem. File content, ownership, permissions, and link count belong to that shared object. A filename is a way to reach it, so changes to directory entries must be distinguished from changes to the file itself. ...

October 10, 2027 · 5 min · XB Field Notes
Two calendar ticks start overlapping copies of seventy-second work.

Cron repeats on the calendar

Cron launches commands at matching calendar times without inherently waiting for earlier invocations. Seventy-second work scheduled every minute can therefore overlap. Treat triggering, concurrency, and successful completion as separate responsibilities. The illustrative lanes show the next calendar trigger arriving before a seventy-second invocation ends. A shared nonblocking lock makes the later invocation record a skip; it does not provide exactly-once effects. The source’s prior measurements were not rerun. Read fields as calendar selections A user crontab entry contains minute, hour, day of month, month, day of week, then command. Asterisks select all field values. A minute step such as */15 selects values within each hour, not fifteen minutes since completion. Steps that unevenly divide a field’s range can produce unequal boundary gaps. ...

September 30, 2027 · 7 min · XB Field Notes
A name-then-open race is contrasted with exclusive atomic creation returning an owned file descriptor.

Create temporary files atomically in a trusted location

A shared temporary directory is a namespace other users may also write to, not a guarantee that every file inside is public. File permissions still control content access. The dangerous assumption is that choosing a pathname gives your process ownership of whatever already occupies it. Create a new object atomically and keep using the returned handle instead of trusting a predictable name. ...

September 26, 2027 · 5 min · XB Field Notes
TERM targets group G: A exits using its default disposition while B ignores TERM and survives. C is outside the group and is not targeted. These are the article fixture outcomes.

Process groups select signal recipients, not a family tree

A process group is a kernel-maintained set of processes identified by a process group ID, or PGID. It provides a target for operations such as delivering a signal to a job. Parent-child relationships and group membership are separate: related processes can occupy different groups, and a group’s leader does not need to remain alive for other members to continue belonging to it. ...

September 24, 2027 · 5 min · XB Field Notes
A link containing the relative text data resolves to first/data while in first, then to second/data when moved to second. The containing directory supplies the resolution base.

A symbolic link stores a path, not a permanent target identity

A symbolic link is a filesystem object containing a target pathname. Following the link resolves that pathname at the time of the operation; it does not bind the link permanently to the target’s inode. This distinction explains why links can cross filesystem boundaries, become dangling, or start reaching a different object even though their stored target text has not changed. ...

August 3, 2027 · 5 min · XB Field Notes
In the historical article example, a shell remains at soft/hard 32/64. Its first child changes its own values to 48/64; its second child still inherits 32/64. Changes do not propagate back to the parent.

Set file limits in the process that starts the workload

A shell’s ulimit builtin changes resource limits for that shell and the processes it subsequently starts. For file descriptors, RLIMIT_NOFILE has a current soft value and a hard ceiling. Understanding where those values are inherited is essential when a terminal reports a generous limit but an independently managed service still fails to open files or accept connections. ...

July 19, 2027 · 5 min · XB Field Notes