What is the difference between a hard link and a symbolic link?
Hard links and symbolic links are two different methods to refer to a file in the hard drive. These methods are part of the filesystem that organizes what file is what and where. A hard link is essentially a synced carbon copy of a file that refers directly to the inode of a file. Symbolic links on the other hand refer directly to the file which refers to the inode, a shortcut. In order to understand how symbolic and hard links work, we will need to go over what are inodes.
What is a hard link?
A hard link is a direct reference to a file via its inode. You can also only hardlink files and not directories. By using a hardlink, you can change the original file’s contents or location and the hardlink will still point to the original file because its inode is still pointing to that file. There is no referencing to the original file. In addition, hardlinks can only refer to files within the same volume otherwise symbolic links will be needed. To make a hard link of a file, you will require the ln command and refer to the source file before naming what the hard link will be named. Here is an example of how a hard link named test 2 will be made.
First made the test file before making hard link test2
The file test should be completely empty and I will add “Hello” to it via the hard link.
Typing in Hello into the file test via test2
Opening test 2 with Hello in it
The change from the hardlink is reflected in the original file
As seen in the photos above, I have changed the original file via the hard link by adding “Hello”. By opening the original file, the word “Hello” is already there. We can further make sure the files are referring to the same inode by using the ls -i command.
test and test2 have the exact same inode.
Now what will happen if we copy over a similar file called test from a different folder into this folder? For this experiment we will change the folder name from ‘test’ to ‘test folder’.
Here we can see that the cp command does not change the inode value of the original value but mv does. We have copied over a file from the parent directory into ‘testfolder’ and the inode value has not changed. It is only when you move over a file and replace the file that the inode value changes.
What are symbolic links?
Symbolic links are essentially shortcuts that reference to a file instead of its inode value. This method can be applied to directories and can reference across different hard disks/volumes. Since the symbolic link is referring to the original file and not its inode value, then replacing the original file into a different folder will break the symbolic link, or create a dangling link.
Making a symbolic link. Note the link has an arrow pointing to the original file in its filename
Since the symbolic link is a link that directs to the original file, changing the symboliclink should change the original file.
Changed the link hello_sym
The change is reflected in the original file
A quick ls -i check shows they have different inodes
What will break a symbolic link is when the original file is moved to a different file or deleted.
Moving the original file to a different folder broke the link
Opening the link shows the link is broken
So symbolic links can be seen as a static link to the last known location of the original file. The link should work even if you replace the original file with a different file with the same name.