What is File System and How they work?
In this post I will mostly explore linux file system and its directory structure but In order to explore linux file system first we need to understand what’s a file system and how do they work?. In simple words, A filesystem is way in which files are named and logically placed in the computer for storage and retrieval. Without a filesystem, information placed in a storage medium would be one large body of data with no way to tell where it begins or stops and this is one of the reasons why having a file system is important as it keeps the data organized and makes it easier for the computer to retrieve the data.
A file system consists of two or three layers, sometimes these layers are explicitly separated, and sometimes the functions are combined.
Logical File System: This layer is responsible for interaction with user applications such as providing with an
apithat allows functions such as
READ.These functions passes through this layer for processing. The logical file system also contains metadata of the file and directory for instance you can run
ls -la -hto see file metadata such as
etc. if the program doesn’t have access to a file or directory then this layer will throw an error. This layer provides
VFS(Virtual File System): This is an optional layer but you can think of VFS as a layer on the top of real file system or an interface between the kernel and a concrete file system. This allows you to access files across different filesystems. For example Windows can access Linux filesystem and vice versa without having to know which filesystem is being accessed.
Physical File System: This layer is concerned with how physical blocks are being written or read. It handles memory management and buffering. It handles physical placement of the blocks in specific location of the storage medium. In simple words this layer decides where on the hard drive your files are supposed to be saved and how space should be saved by efficiently placing the files in the right location. Last but not least this layer mostly interacts with device drivers which allows saving on the storage medium such as HDD or SSD.
Linux File System.
After understanding how a filesystem works now I will be covering specifically linux file system and its directory structure, explaining how the data is stored and kept in linux. Linux supports many other filesystems such as
btrfs and many more. It supports around 100 types of filesytems and even the old ones but the most common filesystem among linux distributions is
The Directory Structure.
In Linux and its many other distributions, A directory is structured in a tree like hiearchy system. Linux directory structure is well defined and documented in the FHS (File Hiearchy Standard). FHS is maintained by the Linux Foundation and its followed by major linux distributions.
/ is the top of the filesystem (basically it contains everything that is required or used by the OS).
/ ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib ├── lost+found ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/bin ├── snap -> /var/lib/snapd/snap ├── srv ├── sys ├── tmp ├── usr └── var 20 directories, 0 files
As you can see how root directory represented using (
/) contains everything.
Note: You can also think of directory as file that holds bunch of addresses to other files.
I will be covering each directory separately explaining what each directory holds and represents.
This directory is called
binaries as this holds all the programs that live in our machine. For example here’s what a
bin/ directory might look like and it mostly contains
➜ ~ tree -L 1 /bin -C | tail -n 20 ├── znew ├── zonetab2pot.py ├── zoom -> /opt/zoom/ZoomLauncher ├── zramctl ├── zresample ├── zretune ├── zsh ├── zsh-5.8 ├── zsoelim -> soelim ├── zstd ├── zstdcat -> zstd ├── zstdgrep ├── zstdless ├── zstdmt -> /usr/bin/zstd ├── zvbi-atsc-cc ├── zvbi-chains ├── zvbid └── zvbi-ntsc-cc
This directory contains all the files required by the kernel at the time of boot and our bootloader also resides in this directory.
/boot ├── grub ├── initramfs-linux-fallback.img ├── initramfs-linux.img ├── initramfs-linux-lts-fallback.img ├── initramfs-linux-lts.img ├── intel-ucode.img ├── lost+found ├── vmlinuz-linux └── vmlinuz-linux-lts
As you can see
grub is also present in the
This directory contains the system binaries that are required for the system adminstration.
This directory contains all the devices and each device is represented with a file. This only represents devices attached to the system. For example your disk might show up as
dev/sda and partition might show up as
dev/sda1. This folder is usually accesed by the drivers and applications.
This directory is known as
edit to configure but it was also known as
et cetera as you can read here more about the history of
etc/ directory name.
etc/ directory is where all your configs are stored for software used by the system. For example ,package manager such as
etc/ holds the
config of your package manager.
➜ ~ tree -L 1 /etc | grep "pacman" ├── pacman.conf
This directory is also known as
libraries and it contains all the libraries that are required to boot the system and used by different applications to perform different functions.
media & mnt/
This directory contains the mounted drives. For example this is where you will find an another mounted drive such as
External HDD or
SSD. If you are mounting things manually use the
mnt/ directory and
media/ is where your
OS will automatically mount.
This drive contains all the manually installed software usually from the vendor.
Note: Some software installed from package manager might also live here
➜ ~ tree -L 1 /opt /opt ├── Simplenote ├── sublime_text_3 └── zoom
For example you can see
In this directory you will mostly find files which contains the information of the hardware and even the running processes in the system. Each process is represented by a directory in
spotifyd (spotify daemon) represented as a process in
➜ ~ ps aux | grep "spotifyd" hackerm+ 98147 0.0 0.1 365184 13324 ? Ssl 07:15 0:00 /usr/bin/spotifyd --no-daemon
➜ ~ tree -L 1 /proc | grep "98147" ├── 98147
This folder is basically considered as the
home/ folder of the
root user and it is only accessed by the user with root permission.
This is a fairly new folder and different linux distributions use this in different ways. This folder is basically mounted as temporary filesystem (tmpfs) as this folder is wiped when the system is rebooted or shutdown and it contains programs required early in the boot procedure.
➜ ~ tree -L 1 /run /run ├── credentials ├── cups ├── dbus ├── dhcpcd ├── dmeventd-client ├── media ├── mount ├── mysqld ├── named ├── NetworkManager ├── nscd ├── openvpn-client ├── user ├── utmp └── wpa_supplicant
This is also known as
service directory and this is where all the files stored that are accessed by external users when using
Its also known as the system folder and this folder contains files that interact with the kernel. This directory is created when the system boots up.
➜ ~ tree -L 1 /sys /sys ├── block ├── bus ├── class ├── dev ├── devices ├── firmware ├── fs ├── hypervisor ├── kernel ├── module └── power
This directory is known as temporary directory where files are stored by the applications that can be stored during a session. For example a word processor like libreoffice might store temporarily if the program crashes or system reboots.
This directory contains shareable, read-only files, including executable binaries and libraries, man files, and other types of documentation.
This directory contains files or directories that are expected to grow and that’s why its know as
variable folder. For example you can find logs of
emailboxes and etc.
Home directory is the storage for user files. Each user has a subdirectory in /home. This is where you will find application settings as hidden directories for example browser cache
.cache/ and this is where your dotfiles live.
I have been using linux for more than 4 years now and as a linux user I have always been intrigued to explore the linux file system and its directory structure. This posts aims towards high level explanation of how filesystem works,linux file system and its directory structure. I do not intend to go over in detail about a specific filesystem such as
ext4 but that’s a topic for my another blog post.
I hope you enjoyed reading this post and got to learn something new. If you think I missed anything you can always DM on twitter or EMAIL ME. Last but not least I would love to hear your thoughts.