Visualized path difference between hard link and symbolic link references
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 an inode?
The inode is a database that describes the file/directory attributes such as metadata and the physical location on the hard drive. They are essentially the numerical equivalent of a full address. With an inode, the OS can retrieve information about the file such as permission privileges and the physical location of the data on the hard drive to access the file. Should a file be moved from one folder to another, the file will be moved to a different location on the hard drive and its inode value will change with it automatically. This will be important for hard links. Speaking of hard links?.
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 test2Opening test 2 with Hello in itThe 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_symThe change is reflected in the original fileA 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 linkOpening 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.
Made a new file hello with new contentsThe link is now working againContents of the link shows the contents of the new file