Episode 35 — Linux Fundamentals: Files, Users, and Groups
At the heart of Linux is its filesystem hierarchy, which follows a well-defined standard that assigns purpose to each directory. The root directory, represented by a single forward slash, is the anchor from which everything branches. System binaries reside under /bin and /sbin, configuration files under /etc, variable data under /var, and user home directories under /home. Temporary files live in /tmp, device references appear in /dev, and mounted filesystems connect under /mnt or /media. This structure creates both order and predictability; a seasoned administrator can guess where any file belongs on a system they have never seen before. Consistent hierarchy also simplifies backups, permissions, and automation, as every component knows where to find its dependencies.
Files in Linux are not just entries in directories—they are managed by a deeper structure called inodes. An inode is a data record that holds metadata about a file: ownership, permissions, size, timestamps, and the physical location of data blocks on disk. Each file name in a directory simply points to an inode number, meaning the name is an alias, not the file itself. This separation allows multiple names—known as hard links—to reference the same underlying file content. Understanding inodes clarifies why deleting a file name does not necessarily free space until all its references disappear. It also explains how symbolic links differ: they point to another name rather than the inode directly. Inodes embody Linux’s pragmatic engineering—small, self-contained structures that track identity and integrity simultaneously.
The permission model in Linux flows directly from this inode structure. Every file and directory has three distinct categories of access control: user, group, and others. Each category can have read, write, and execute privileges, represented numerically as four, two, and one respectively. A file mode of seven-five-five, for example, grants full rights to the owner but only read and execute permissions to everyone else. This system keeps authorization simple and composable, allowing complex environments to be managed with minimal ambiguity. The execute bit’s meaning varies by object—granting command execution for files and traversal for directories—reminding users that permissions are not symbolic abstractions but functional boundaries.
User accounts and groups form the human face of this permission model. Each account possesses a unique numeric identifier called a U I D, and every group has a corresponding G I D. These identifiers, not the usernames or group names, determine access in practice. The mapping between names and numbers lives in /etc/passwd and /etc/group, while encrypted authentication data resides in /etc/shadow, readable only by privileged processes. Separating human-readable names from numerical identifiers allows consistency even when files move across systems. Groups make collective management possible; granting access to a shared project folder can be done once at the group level rather than repeatedly per user. Identity, in Linux, is a cooperative construct—defined by both individual attributes and group affiliations.
Package management systems represent the next level of structured control, handling the installation, update, and removal of software components. Depending on distribution, tools such as apt, dnf, yum, or zypper interact with repositories—curated collections of signed packages that ensure authenticity. Each package includes metadata describing dependencies, version numbers, and post-installation scripts. Centralized management prevents the “dependency hell” once common in early Unix environments and allows security teams to audit which versions of software are deployed. Regular updates delivered through these repositories maintain both functionality and safety, reinforcing the idea that software integrity is an ongoing service rather than a one-time setup.
Persistent background processes, or daemons, form the service layer of Linux. Their management has evolved through multiple generations—from traditional init scripts to modern systems such as systemd or upstart. These frameworks handle starting, stopping, and monitoring daemons, ensuring dependencies are met and processes restart if they fail. Service definitions specify execution context, resource limits, and logging behavior. Security-conscious administrators tighten these definitions to restrict privileges, confine filesystem access, or isolate services in namespaces. A stable service ecosystem depends as much on supervision and recovery as on initial launch, making service management a cornerstone of operational reliability.
Logging underpins observability, turning activity into structured record. Linux typically uses syslog or journald to collect messages from the kernel, daemons, and user applications. Log rotation utilities ensure that storage stays within bounds, compressing or archiving older entries on schedule. Transport mechanisms forward logs to central collectors for correlation and long-term retention. Understanding where logs live—such as /var/log/messages, /var/log/auth.log, or the journal database—enables quick diagnosis of incidents and audit reconstruction. Without proper logging, even a well-secured system remains opaque, leaving administrators blind to both success and failure.
The networking stack in Linux follows the same modularity that defines the rest of the system. Interfaces represent connections, whether physical or virtual, and each can carry one or more IP addresses. The kernel routes packets based on tables accessible through commands like ip route, while name resolution translates hostnames via /etc/hosts and the resolver configuration in /etc/resolv.conf. Tools such as ss and netstat show active connections, ports, and listening services. Because Linux underpins much of modern network infrastructure, mastering these basics allows professionals to troubleshoot connectivity, enforce firewalls, and understand traffic patterns from first principles rather than guesswork.
Mastering these fundamentals makes Linux far less mysterious. The filesystem hierarchy provides order, inodes preserve identity, permissions enforce fairness, and users embody accountability. Processes and services animate the environment, logs provide memory, and networking and storage connect it to the wider world. Each piece is designed to be simple in isolation and powerful in combination—a philosophy that has endured for decades because it works. Once you understand how files, users, and groups interlock, Linux stops feeling like a maze of commands and starts revealing itself as a coherent, disciplined ecosystem where every action has a place and every rule a reason.