← Back to Home

2026-1-8

What I Worked On

I spent all day yesterday further reviewing the bootloader process and got lost in it. I still don’t understand all of it, but I suspect that if I move on in my studies, things will become more clear.

I’ve decided that updating the website every day is too daunting, and it’s probably best left to the weekends. I’ll write my entries as I go along, but uploading everything daily is simply too time-consuming for my studies.

I’m also pasting this here so I can review it later, because Shevek made it easy to memorize:

Firmware (BIOS/UEFI)
  └─ logs to firmware interfaces

Bootloader (GRUB)
  └─ logs to screen / serial
  └─ LOADS kernel + initramfs
  └─ JUMPS to kernel entry point
       ← bootloader logging ENDS here

Kernel (early init)
  └─ logs via early printk
  └─ initializes memory, scheduler, drivers
  └─ mounts initramfs as temporary root

initramfs (/init)
  └─ logs via kernel facilities
  └─ prepares real root filesystem

systemd (PID 1)
  └─ logs to journald

There. Hopefully I can reference this whenever I’m feeling lost.

I download and begin the root_directory_explorer and I’m totally unimpressed. But I proceed anyway for the mental discipline. I answer the questions to make sure my own knowledge is on par—which is always lacking. I paste important notes to remember here. The first question asks me to name 10 top-level directories and their contents. I’ll copy and paste it here for memorization, and I’ll be making flash cards so it’s etched into my mind:

Directory Purpose
/binEssential user command binaries required for basic system operation and recovery.
/sbinCritical system administration binaries used for booting, repair, and maintenance.
/etcSystem-wide configuration files and service configuration directories.
/usrUserland applications, libraries, and shared read-only resources.
/varVariable data that changes during runtime (logs, caches, spools, databases).
/homePersonal directories for non-root users and their data.
/rootHome directory for the root user, isolated from /home.
/bootKernel images, bootloader files, and initramfs needed to start the system.
/devDevice nodes representing hardware and virtual devices as files.
/procVirtual filesystem exposing live kernel and process information.
/sysVirtual filesystem exposing kernel objects, drivers, and device attributes.
/tmpTemporary files intended for short-term use; often cleared on reboot.
/runVolatile runtime state (PID files, sockets) available early in the boot process.

I move on to the next mission. It requests that I compare my real directory to the virtual one. I attempt to do so, but the lab comes to a screeching halt when I can’t even look at the virtual directory contents of /proc. I take screenshots and send them to Shevek. He provides a less-than-elaborate explanation.

OK. What are the questions Shevek asks? I can at least take direction from those:

I’ll copy and paste my answers here for my own personal review:

Why /proc and /sys are called “virtual” filesystems
/proc and /sys are called virtual filesystems because they are not backed by data stored on disk. Instead:

/proc

/sys

In both cases: the filesystem is an interface, not storage.

What /dev represents
/dev contains device nodes, which are special files that act as interfaces to hardware and virtual devices.

Examples:

Modern systems typically manage /dev dynamically using udev, so device files appear and disappear as hardware changes.

Why /run exists and why it is typically tmpfs
/run exists to store volatile runtime state that must be available early in the boot process. It contains:

Why not /var/run?

Why tmpfs?

Therefore: /run is typically mounted as tmpfs to provide early, clean, volatile runtime storage.

One-line exam answers

The lab Shevek made me is dry and uninteresting compared to what I had hoped for. But I know enough to know the real value of the lab lies in the questions it asks.

Section three asks:

I have no idea. I ask Shevek to elaborate:

What kinds of things live in /etc (and why they are usually text)
/etc contains system-wide configuration files that define how the system and its services are supposed to behave. These include:

They are usually plain text because:

In short: /etc describes system intent and policy, not runtime state.

What kinds of things live in /var (and why they change frequently)
/var contains variable data that is created and modified as the system runs. These include:

They change frequently because:

In short: /var records what the system is doing and has done.

Two examples you saw on your machine

One-line exam contrast: /etc holds static, human-readable configuration, while /var holds dynamic data that changes during normal system operation.

I could go back and have Shevek make me another interactive sandbox, but that would distract from the reality of what needs to happen. I need to know what questions I should be asking.

In mission four it asks:

Why /usr is not “user home” (historical meaning)
/usr historically meant “Unix System Resources,” not “user.” Originally:

User home directories were never intended to live there; they were placed in /home. In short: /usr holds system-provided software, not user data.

Practical difference between /bin and /usr/bin on modern systems
Historically:

On modern distros using merged-usr:

The distinction remains for compatibility, documentation, and bootstrapping concepts. Exam-safe phrasing: On merged-usr systems, /bin and /usr/bin reference the same binaries.

What sbin is for
sbin contains system administration binaries intended primarily for the root user. Historically:

On merged-usr systems, /sbin is typically a symlink to /usr/sbin.

Where shared libraries typically live
Shared libraries live under /lib* and /usr/lib*, depending on architecture:

On merged-usr systems, /lib* are symlinks into /usr/lib*. In short: libraries live alongside the binaries that depend on them, primarily under /usr/lib*.

Mission five states:

In notes/mission5_special.txt, explain:

Again, I have no context for answering any of these, but their answers are invaluable as a compass for what to focus on:

/tmp vs /var/tmp (lifetime expectations)

When /opt is appropriate
/opt is intended for optional, third-party, or vendor-supplied software that does not integrate cleanly into the system package layout (e.g., /opt/vendor/app/).

What /mnt and /media are typically used for

What /srv is intended for
/srv holds data served by system services (e.g., /srv/www). Configuration stays in /etc; logs go in /var.

As I revisit this information, I have the sudden realization that I will probably be doing this over and over again. I cannot expect to completely understand the system just yet, no matter how hard I try, because there is no context for the information. I will forever be going back and forth.

It is incredibly frustrating to have that realization, but with it comes the fortitude to persist.

The next lab is process_top_ps_proc_sandbox.zip. I have high hopes for it, because Shevek’s sandboxes for commands are often helpful in understanding the tool—even if they don’t always work as intended or hoped.

Skills Learned

Notes / Next Steps

Shevek's Daily Haiku

Files fade by design, Others speak while never stored— Kernel answers now.

Todays Sandboxes