A symbolic link – or often just sym-link – is a pointer or shortcut to where the actual file lives on a filesystem. What does it take to create a symbolic link?

The ln command actually describes it pretty well:

“Make links between files”

The manual

When should you create a symbolic link is a question I am often asked.

While creating a symbolic link can be really useful, it’s not often understood when or why we even do this.

Put simply, say you have a directory on a shared volume but need to refer to it as a local directory. Perhaps you need to store your ~/.ssh/ directory on a shared volume during a CI/CD build for example.

What is the syntax?

ln -s source_file destination_file

In our example from before, we could get the job done by using the following:

ls -s /mnt/volume_name/.ssh_shared ~/.ssh

This would make the /mnt/volume_name/.ssh_shared directory available at our user’s .ssh directory.

What the manual says about syntax:

       ln [-Ffhinsv] source_file [target_file]
       ln [-Ffhinsv] source_file ... target_dir
       link source_file target_file

Bonus content

Symlinks are a fantastic solution if you need to have duplicate files or folders on a machine for any reason whatsoever. Using symlinks allows you to change one of the instances and have all the referenced files update automatically.

This is because there is really only one true source.

With our example from this tutorial, if we list the file with the l flag, it shows us that the file in our directory actually refers to its original source of /etc/apache2/users.

$ ls -l ~/src/apache_project/users

lrwxr-xr-x  1 ao ... ~/src/apache_project/users -> /etc/apache2/users

As we see above, it’s easy to tell if you have any symbolic links lying around.