Symbolic links are a powerful, ubiquitous feature across most Unix-like operating systems, including Linux. Often referred to as "symlinks", they act as advanced shortcuts that reference and mimic other files or directories.
In this comprehensive guide, we will unpack everything you need to know about symbolic links – from what they are under the hood to real-world use cases where they shine.
Grab a coffee and let‘s symlink!
What Exactly Are Symbolic Links?
At the simplest level, a symbolic link is a special type of file that points to another file or directory.
To visualize it, think of a symlink as an advanced shortcut. But unlike Windows shortcuts with .lnk
extensions, symlinks work at the filesystem level in Linux.
When you interact with a symbolic link, the operating system transparently redirects all operations to the source file that the symlink points to.
For example, consider this directory structure:
/home
└── user
├── file.txt
└── filelink (symbolic link to file.txt)
Here filelink
symbiotically references file.txt
. If you open, edit, delete or append to filelink
– you are actually modifying file.txt
because they share an abstraction via the symlink.
But under the hood symlinks have no contents of their own. They occupy only the space to store the path to their source file.
This linking allows great power and flexibility. Next we‘ll explore the dual symlink types available in Linux.
Soft Links vs Hard Links
There are two varieties of symbolic links supported by the Linux kernel – soft and hard links. They differ in their structure and capabilities:
Soft Links
– Soft links contain a text path pointing to the source file.
-
If the source file is moved or deleted, the symlink breaks.
-
Soft links can reference files & directories across different filesystems.
-
Created in Linux using the
ln -s
command.
Hard Links
-
Hard links are mirror copies that directly reference the source inode.
-
Hard links are not broken if the original file is moved or deleted.
-
Hard links are constrained to their source filesystem.
-
Created using the
ln
command without flags.
Conceptually, think of soft links as filesystem shortcuts and hard links as clones.
Now that we understand their core differences, when should each be used?
Common Use Cases for Symbolic Links
With great power comes great responsibility. The versatility of symlinks enables some brilliant use cases – but they can also shoot you in the foot if misused.
Here are some of the most popular and practical applications of symbolic links:
Centralizing Config Files
Application config files are littered across the Linux filesystem by default. Symlinks are perfect for organizing them in one location:
ln -s /etc/apache2/apache2.conf ~/configs/apache2.conf
ln -s /etc/ssh/sshd_config ~/configs/sshd.conf
Now all configs can be edited from ~/configs/
rather than hunting them down!
Linking Application Binaries
Need a particular app to be on your path but don‘t want to move it from /opt
, /usr/local
or another dedicated application directory? Symlink it into /usr/bin
!
sudo ln -s /opt/app/program /usr/bin/program
Now you can run the program directly without the full path.
Merging File Trees
Symlink entire directory structures to merge them without data duplication:
ln -s /media/storage/documents /home/user/Documents
Great for linking mounts and external drives.
There are many other excellent uses for symlinks – synchronized dotfiles, TOP level binds, augmented $PATHs, mocked testing dirs… but we‘ve run short on time.
Now let‘s dig deeper and understand how symlinks actually work at a filesystem level.
Under the Hood – The Linux Inode Structure
…(continued)