15%

Save 15% on All Hosting Services

Test your skills and get Discount on any hosting plan

Use code:

Skills
Get Started
25.12.2024

Creating and Removing Symbolic Links in Linux

Symbolic links — commonly known as symlinks or soft links — are among the most powerful and versatile tools available to Linux users and system administrators. Rather than duplicating data, a symlink acts as a lightweight pointer to another file or directory, enabling efficient file management, cleaner directory structures, and seamless path redirection. Whether you are managing a production server, organizing a development environment, or administering a VPS Hosting instance, mastering symbolic links will dramatically improve your operational efficiency.

This comprehensive guide covers everything you need to know about creating and removing symbolic links in Linux — including syntax, practical examples, troubleshooting broken symlinks, and real-world use cases.

A symbolic link is a special type of file that contains a reference — or pointer — to another file or directory path. It functions similarly to a shortcut in Windows: when you access a symlink, the operating system transparently redirects you to the target location without duplicating any actual data.

Linux supports two distinct types of file links, and understanding the difference is essential:

FeatureHard LinksSymbolic Links (Soft Links)
ReferencesInode (raw disk data)File path
Cross-filesystem support❌ No✅ Yes
Works with directories❌ No✅ Yes
Survives target deletion✅ Yes❌ No (becomes broken)
File sizeSame as originalTiny (stores path only)
  • Hard links directly reference the underlying data on disk and share the same inode as the original file. They cannot span different filesystems or partitions.
  • Symbolic links (soft links) reference a file path rather than the data itself. They can cross filesystem boundaries and link to directories, but if the target is deleted or moved, the symlink becomes broken (also called a dangling symlink).

For most administrative and development tasks, symbolic links are the preferred choice due to their flexibility.

Symlinks offer a range of practical benefits that make them indispensable for both developers and system administrators:

  • Efficient file management — Reference the same file or directory from multiple locations without creating redundant copies.
  • Path redirection — Change the target of a link without modifying the applications or scripts that rely on it.
  • Disk space savings — Symlinks store only a path string, consuming negligible disk space.
  • Simplified directory navigation — Create short, memorable aliases for deeply nested directory structures.
  • Version management — Easily switch between application versions by updating a single symlink rather than reconfiguring multiple services.
  • Centralized configuration — Point multiple environments to a single configuration file, ensuring consistency across your infrastructure.

These advantages are particularly valuable when managing web servers, application stacks, or shared hosting environments. If you are running websites on Shared Web Hosting, symlinks can help you organize document roots, shared assets, and configuration files without wasting storage.

Basic Syntax

The ln command with the -s flag is used to create symbolic links:

ln -s [target] [link_name]

Parameter breakdown:

ParameterDescription
lnThe link creation command
-sSpecifies a symbolic (soft) link
[target]The existing file or directory you want to link to
[link_name]The name and path of the new symbolic link

> Best practice: Always use absolute paths for the target when creating symlinks. Relative paths can cause broken links if the symlink is accessed from a different working directory.

Suppose you have a configuration file located at /home/user/documents/example.txt and you want to access it quickly from your home directory:

ln -s /home/user/documents/example.txt ~/example_link.txt

This creates a symlink named example_link.txt in your home directory that transparently points to the original file. Any reads or writes to example_link.txt will be applied to the actual file at /home/user/documents/example.txt.

Symlinking directories works exactly the same way. For example, to create a convenient link to your web root directory:

ln -s /var/www ~/www_link

You can now navigate to ~/www_link as if it were /var/www. This is especially useful for web administrators who frequently access document roots on servers running Dedicated Servers with multiple virtual hosts.

If a symlink already exists at the destination and you need to update its target, use the -f (force) flag combined with -s:

ln -sf /new/target/path ~/link_name

This atomically replaces the existing symlink with a new one pointing to the updated target — no need to manually delete the old link first.

To create a symlink inside a specific directory rather than the current working directory, specify the full destination path:

ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf

This is the standard pattern used by Nginx and Apache to enable or disable virtual host configurations — a technique every Linux administrator should know.

You can create symlinks in a loop using bash to handle bulk operations:

for file in /source/directory/*; do
    ln -s "$file" /destination/directory/
done

This is useful for linking shared libraries or assets across multiple project directories.

Removing a symlink is straightforward. Crucially, deleting a symlink never affects the original target file or directory — only the pointer itself is removed.

Option 1: Using the rm Command

The most common method to remove a symlink:

rm ~/example_link.txt

> ⚠️ Important: If you are removing a symlink to a directory, do not add a trailing slash. Using rm ~/www_link/ may cause unexpected behavior or attempt to delete the contents of the target directory. Always use rm ~/www_link (without the trailing slash).

The unlink command is purpose-built for removing a single file or symlink:

unlink ~/example_link.txt

unlink is safer than rm for symlink removal because it only operates on a single entry and does not accept flags like -r (recursive), reducing the risk of accidental data loss.

Feature`rm``unlink`
Removes symlinks✅ Yes✅ Yes
Removes regular files✅ Yes✅ Yes
Recursive deletion (-r)✅ Yes (dangerous)❌ No
Safer for symlinks⚠️ Use carefully✅ Preferred

To verify a symlink and confirm its target, use ls -l:

ls -l ~/example_link.txt

Sample output:

lrwxrwxrwx 1 user user 34 Oct 2 12:34 example_link.txt -> /home/user/documents/example.txt

Key indicators in the output:

  • The l at the beginning of the permissions string (lrwxrwxrwx) indicates a symbolic link.
  • The -> arrow shows the symlink's target path.
  • The file size (e.g., 34) represents the character length of the target path string, not the size of the target file.

For scripts and automation, readlink is the preferred tool to retrieve a symlink's target:

readlink ~/example_link.txt
# Output: /home/user/documents/example.txt

Use readlink -f to resolve the full, canonical absolute path (following all intermediate symlinks):

readlink -f ~/example_link.txt

A symlink becomes broken (or "dangling") when its target file or directory is deleted, renamed, or moved. Broken symlinks can cause application errors, failed deployments, and confusing debugging sessions.

To locate all broken symlinks in the current directory and its subdirectories:

find . -xtype l

To search a specific directory (e.g., /var/www):

find /var/www -xtype l

Once identified, you can delete all broken symlinks in one command:

find /path/to/directory -xtype l -delete

> ⚠️ Always review the list of broken symlinks before using -delete to avoid unintended removals.

To fix a broken symlink by pointing it to a new valid target:

ln -sf /new/valid/target ~/broken_link_name

1. Web Server Virtual Host Management

Web servers like Apache and Nginx use symlinks to manage enabled sites. Configurations are stored in sites-available and symlinked into sites-enabled. Enabling or disabling a site is as simple as creating or removing a symlink — no file duplication required.

2. Application Version Management

When deploying multiple versions of an application, symlinks allow zero-downtime version switching:

ln -sf /opt/app/v2.5.1 /opt/app/current

All services point to /opt/app/current. Switching versions requires updating just one symlink.

3. SSL Certificate Management

SSL certificate files are often symlinked from a central certificate store to individual application directories. This ensures that when a certificate is renewed (e.g., via Let's Encrypt), all linked applications automatically use the updated certificate. If you need to secure your domains, explore SSL Certificates for your infrastructure.

4. Shared Library Management

Developers use symlinks to reference shared libraries across multiple projects, avoiding code duplication and ensuring consistent dependency versions.

5. Log File Management

System administrators symlink log directories to centralized logging volumes or network-attached storage, making log aggregation and rotation significantly easier to manage.

6. Domain and Email Configuration

When managing multiple domains on a single server, symlinks help organize configuration files for each Domain Registration and associated Email Hosting setup, keeping your server structure clean and maintainable.

Common Mistakes and How to Avoid Them

MistakeConsequenceSolution
Using relative paths for targetsBroken symlinks when accessed from different directoriesAlways use absolute paths
Adding trailing slash when removing directory symlinksMay delete target directory contentsUse rm link_name without trailing slash
Forgetting -s flag with lnCreates a hard link instead of a symlinkAlways include -s for symbolic links
Not verifying symlinks after creationSilent misconfigurationsAlways run ls -l or readlink after creating a symlink
Leaving broken symlinks in productionApplication errors and failed deploymentsRegularly audit with find -xtype l
# Create a symlink to a file
ln -s /path/to/target /path/to/link_name

# Create a symlink to a directory
ln -s /path/to/target/directory /path/to/link_name

# Overwrite an existing symlink
ln -sf /path/to/new/target /path/to/link_name

# Remove a symlink (using rm)
rm /path/to/link_name

# Remove a symlink (using unlink)
unlink /path/to/link_name

# Verify a symlink and its target
ls -l /path/to/link_name

# Get the target path of a symlink
readlink /path/to/link_name

# Find all broken symlinks in a directory
find /path/to/directory -xtype l

# Remove all broken symlinks in a directory
find /path/to/directory -xtype l -delete

Conclusion

Symbolic links are a fundamental and indispensable feature of Linux system administration. They enable efficient file management, flexible path redirection, seamless version switching, and clean directory organization — all without duplicating a single byte of data. With just three core commands — ln, rm, and unlink — you can manage complex file relationships across directories and filesystems with precision and confidence.

Whether you are a developer organizing shared project resources, a system administrator managing web server configurations, or a DevOps engineer handling application deployments, mastering symlinks will make your Linux workflows faster, cleaner, and more maintainable.

For administrators looking for a robust environment to put these skills into practice, VPS Hosting from AlexHost provides full root access, SSD-backed storage, and flexible Linux environments — giving you complete control to manage your files, symlinks, and server configurations exactly the way you need.

15%

Save 15% on All Hosting Services

Test your skills and get Discount on any hosting plan

Use code:

Skills
Get Started