Wednesday, 10 August 2011

Linux symbolic (soft) and hard links

Inodes are associated with precisely one directory entry at a time. However, with hard links it is possible to associate multiple directory entries with a single inode. To create a hard link use ln command as follows:
# ln /root/file1 /root/file2
# ls -l

Above commands create a link to file1.
Symbolic links refer to:
A symbolic path indicating the abstract location of another file.
Hard links refer to:
The specific location of physical data.

Hard link vs. Soft link in Linux or UNIX

  • Hard links cannot links directories
  • Cannot cross file system boundaries
Soft or symbolic links are just like hard links. It allows to associate multiple filenames with a single file. However, symbolic links allows:
  • To create links between directories
  • Can cross file system boundaries
These links behave differently when the source of the link is moved or removed.
  • Symbolic links are not updated.
  • Hard links always refer to the source, even if moved or removed.

How do I create symbolic link?

You can create symbolic link with ln command:
$ln -s /path/to/file1.txt  /path/to/file2.txt
$ls -ali
Above command will create a symbolic link to file1.txt.

Task: Symbolic link creation and deletion

Let us create a directory called foo, enter:
$mkdir foo
$cd foo
Copy /etc/resolv.conf file, enter:
$cp /etc/resolv.conf   .
View inode number, enter:
$ls -aliSample output:
total 152
1048600 drwxr-xr-x   2 ram ram   4096 2011-07-20 10:19 .
1015809 drwxrwxrwt 220 root  root  143360 2011-07-20 10:19 ..
1048601 -rwxr-xr-x   1 ram ram    259 2011-07-20 10:19 resolv.conf
Now create soft link to resolv.conf, enter:
$ln -s resolv.conf   alink.conf

Sample output:
total 152
1048600 drwxr-xr-x   2 ram ram   4096 2011-07-20 10:24 .
1015809 drwxrwxrwt 220 root  root  143360 2011-07-20 10:19 ..
1048602 lrwxrwxrwx   1 ram ram     11 2011-07-20 10:24 alink.conf -> resolv.conf
1048601 -rwxr-xr-x   1 ram ram    259 2011-07-20 10:19 resolv.conf
The reference count of the directory has not changed (total 152). Our symbolic (soft) link is stored in a different inode than the text file (1048602). The information stored in resolv.conf is accessible through the alink.conf file. If we delete the text file resolv.conf, alink.conf becomes a broken link and our data is lost:
$rm resolv.conf
$ls -ali
If alink.conf was a hard link, our data would still be accessible through alink.conf. Also, if you delete the soft link itself, the data would still be there.

No comments:

Post a Comment