Creating Symlinks on Linux
Creating Symlinks on Linux
A symbolic link, also called a soft link, or a symlink, is a special file on a Linux system, that points to another file or folder on the system. These are a rough equivalent to a Windows shortcut, on a Linux system.
Difference between Symlinks and Shortcuts
A symlink does not act as a pointer to a different file, or a folder, unlike a shortcut. A symlink acts as if the object is actually there.
For example, we want to sync a folder to dropbox, but we don't want to move it to dropbox. Creating a shortcut would make dropbox refer to that file location, and hence if we access it on another system it would fail. But with a symlink, Dropbox thinks the file is present there, and syncs the folder contents, giving us access even on other systems.
Applications of Symlinks
- Memory efficient shortcuts. Execute the same application from various folders, but consumes only a few bytes to make a symlink.
- Moving of data, or applications to another drive, without disrupting work.
Creating Symlinks
To create a symlink from the command line, the basic command format is as follows.
ln -s <path to file/folder> <path of link>**ln**, is the link command. -s is used to specify that our link is symbolic and/or soft. By default **ln** creates only hard links, so we need to remember to specify the -s flag. After that in order, is the source file/folder, and then the destination of the shortcut.
Symlinking a file
To symlink a file, for example, the .bashrc file in your **~** directory, to a .termrc file in the **Documents/** directory, we run the following.
ln -s .bashrc Documents/.termrcTo check if a file is a symlink, running the command
ls -l Documents/.termrcIf the first column is an l, it means it is a link.

Symlinking a folder
To symlink a folder, for example, to access ~/.local/bin/ (user local executables) in ~/Documents/projects/, we would run the following.
ln -s ~/.local/bin/ ~/Documents/projects/lbin
Removing Symlinks
Symbolic links can be unlinked in two manners. One is using **unlink** command.
Unlinking a Symlink
**unlink** has the following syntax.
unlink <path to link>This will delete the link if the process is successful. A thing to remember is, even if the symlink is for a folder, we do not add the trailing '/', because Linux assumes it to be a directory, and unlink can't delete directories.

Deleting a symlink
Since a symlink is nothing but a special file on a Linux filesystem, it can be removed in the same a Linux file can. By using **rm**. Just like with **unlink**, the trailing '/' is not to be added if the symlink is that to a folder.
The syntax to **rm** (remove) a symlink is as follows.
rm Documents/projects/lbin
The benefit of using **rm** over **unlink** is that you can simultaneously delete multiple links using **rm**.
Finding and Deleting broken Links
Sometimes there are too many links to keep track of, and we have modified our files various times, and we end up with dangling/broken links, due to missing files, or renamed folders, and other such causes. To handle this, we can find all broken links using the handy **find** program on Linux. **find** is a Linux utility that can search for symbolic links, and delete them as well, out of many other things.
To search for broken symlinks, use the command
find . -maxdepth 1 -xtype l -print # Max Depth to be used to find links, only in current folder, without recursive search
find . -maxdepth 1 -xtype l -delete # Delete after confirmation of files using -printHence, for example, the following commands were used to make a symlink and then move the original file, we get.
ln -s abc.cpp acbd
ll acbd # Check on link
mv abc.cpp a.cpp
ll acbdWe can see that the file acbd, is now a broken link. To search and remove it, we use the **find** command and -delete flag.

Conclusion
This tutorial covered how to use the **ln** command, with the -s flag to create soft/symbolic links, and how to handle those links, using **unlink**, and **rm**. It also covers how to find any broken links due to mishaps, and delete them.










