Skip to main content
Explain

What is Symbolic Links in Linux? How to Create Symbolic Links?

This detailed tutorial tells you what are symbolic links, how to create a symbolic links and other important things associated with symlinks.

Abhishek Prakash

Warp Terminal

A symbolic link, also known as a symlink or a soft link, is a special type of file that simply points to another file or directory just like shortcuts in Windows. Creating symbolic link is like creating alias to an actual file.

If you try to access the symbolic link, you actually access the target file to which the symlink points to. Changes performed on the content of the link file change the content of the actual target file.

If you use the ls command with option -l, this is what a symbolic link looks like:

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

In most Linux distributions, the links are displayed in a different color than the rest of the entries so that you can distinguish the links from the regular files and directories.

Soft Link displayed in different color

Symbolic links offer a convenient way to organize and share files. They provide quick access to long and confusing directory paths. They are heavily used in linking libraries in Linux.

Now that you know a little about symbolic links, let’s see how to create them.

To create a symbolic link to target file from link name, you can use the ln command with -s option like this:

ln -s target_file link_name

The -s option is important here. It determines that the link is soft link. If you don’t use it, it will create a hard link. I’ll explain the difference between soft links and hard links in a different article.

To know which real file the link actually points to, use the realpath command:

realpath link_name

There are other ways to follow a soft link to its source file but realpath is the easiest.

How to Follow Symbolic Links in Linux
You got a symbolic link and wondering about the actual source file? Here’s how to follow symlinks in Linux.

There is no special command for deleting symlinks in Linux. You can use the same rm command that you use for deleting files and directories.

rm link_name

Deleting the link won't delete the source file it links to.

You can delete multiple symbolic links in one command as well:

rm link1 link2

There is also an unlink command. But unlike the impression its name gives, the unlink command is not specifically used for deleting links. It can remove files and folders and links, of course. However, it has certain limitations that make rm command a better choice even for deleting links.

💡
If you want to list symbolic links using the find command, you can use the -type l option.

Symbolic links could be confusing at times therefore you should keep note of a few things.

That’s the whole purpose of the links after all. You access the target file by accessing the link. You can make changes to the target file through the links. Let’s see with example.

I have a file prog.py in newdir/test_dir. It has the following attributes:

-rw-r--r-- 1 abhishek abhishek 163 Apr 13 15:07 newdir/test_dir/prog.py

Now, I’ll create a soft link to this file in my present directory:

ln -s newdir/test_dir/prog.py link_prog

Here are the attributes of the newly created link:

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

Notice the l (it’s L, not one) at the beginning of the line? If you are familiar with the file permissions in Linux, you would know that the ‘l’ signifies link and thus it tells you that this file is actually a link. To refresh your memory, – means file, and d means directory.

Now if I use this link to change the content or the attributes, the same will be reflected in the target file. For example, I am using touch command on the soft link and you’ll notice that it changes the timestamp of the target file.

touch link_prog 

ls -l newdir/test_dir/prog.py 

-rw-r--r-- 1 abhishek abhishek 163 Jul  2 10:04 newdir/test_dir/prog.py

How would you know if the link points to file or a directory? You cannot know that until you follow the path and access the target file itself.

Yes, that’s totally possible. This is why you should be careful while creating soft links in Linux. The target file to which you are linking doesn’t need to exist. You won’t get any error or warning for creating link to a file/directory that does not exist.

You’ll get error only when you try to access the target file, either through the link or on its own. The ls command will still work though.

ln -s non_existant_dir link_dir
less link_dir
link_dir: No such file or directory

Did you notice the file permission on the symbolic link? The symlinks are always created with 777 permission (rwxrwxrwx). For regular file, this would mean that anyone can access the file. But that’s not the case for the links.

lrwxrwxrwx 1 abhishek abhishek 23 Jul  2 08:51 link_prog -> newdir/test_dir/prog.py

If the file permissions on the links were treated as it is, any user could create a symlink to a secure file and access it freely. That would be a major security issue. Thankfully, that doesn’t happen. Because the permission on the target files matter, not the permission on links.

You may use the chmod command to change the permission on the link but it will change the permission of the linked file, not the link itself.

You can make a symbolic link that points to another link and so on. This is called chained symbolic link. It’s better to avoid them as it creates more confusion.

Well, that’s it. I presume you have a better knowledge of the soft links now and you know how to create symbolic links in Linux. You may read about the symlinks command that can help you find broken symlinks in Linux and manage them easily.

How to Find Broken Symlinks in Linux
This quick tip teaches you various ways to find all the broken symlinks in Linux command line. You’ll also learn to manage those broken soft links.

If you have questions or suggestions, please leave a comment below.

Abhishek Prakash