In this tutorial, you’ll learn how to make multiple file names reference the same file using hard links and symbolic, also called “soft” links. The two common ways of creating multiple names that point to the same file in Linux are:

  • Creating a soft link (symbolic link) to the file
  • Creating a hard link to the file.
<img alt="" data-ezsrc="https://kirelos.com/wp-content/uploads/2020/02/echo/hard-and-soft-links-linux.png" data-ez ezimgfmt="rs rscb4 src ng ngcb4 srcset" src="data:image/svg xml,”>

Working with Soft link (Symbolic link)

A soft link is a special type of file that points to an existing file or directory. It can be used to link two files on different file systems. A soft link can point to a special file as well.

The ln -s command is used to create a soft link. Let’s consider an example:

In the following example, the ln -s command is used to create a new soft link for the existing file /tmp/file1.txt that will be named to /tmp/file2.txt:

$ echo "Hello from file1" > /tmp/file1.txt
$ ln -s /tmp/file1.txt /tmp/file2.txt

Confirm by listing the files:

$ ls -l /tmp/file1.txt /tmp/file2.txt
-rw-------. 1 jkmutai jkmutai 17 Feb  4 22:37 /tmp/file1.txt
lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb  4 22:38 /tmp/file2.txt -> /tmp/file1.txt

You can see the first character of the long listing for /tmp/file2.txt is l instead of -. This indicates that the file is a soft link and not a regular file. (A d would indicate that the file is a directory.)

Check the contents of the symbolic link file.

$ cat /tmp/file2.txt
Hello from file1

For directory, use:

ln -s /dir /dir2

If you delete the original regular file, the soft link will still point to missing file – a “dangling soft link.”

Working with Hard Links

Every file in Linux starts with a single hard link. By creating a new hard link to a file, you are creating another name that points to that same data.

The new hard link acts exactly like the original file name. It is hard to tell the difference between the new hard link and the original name of the file. You use the ln command to create a hard link – Another name that points to an existing file.

$ echo "Hello World from Hard Link" >/tmp/hello1.txt
$ ln /tmp/hello1.txt  /tmp/hello2.txt 

Where:

  • /tmp/hello1.txt is a path to the existing file
  • /tmp/hello2.txt is the hard link that you want to create.

Use the ls -i option to ls list the files’ inode number. If the inode numbers are the same, the files are hard links pointing to the same data.

$ ls -li /tmp/hello1.txt  /tmp/hello2.txt
2591191 -rw-------. 2 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello1.txt
2591191 -rw-------. 2 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello2.txt

--- Let's add third file and recheck ---
$ ln /tmp/hello1.txt  /tmp/hello3.txt 
$ ls -li /tmp/hello1.txt  /tmp/hello2.txt /tmp/hello3.txt 
2591191 -rw-------. 3 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello1.txt
2591191 -rw-------. 3 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello2.txt
2591191 -rw-------. 3 jkmutai jkmutai 27 Feb  5 08:16 /tmp/hello3.txt

All hard links referencing the same file have the same:

  • link count
  • access permissions
  • user and group ownerships
  • time stamps
  • file content

Compare with ones for Soft link:

$ ls -li /tmp/file1.txt /tmp/file2.txt /tmp/file3.txt
2442008 -rw-------. 1 jkmutai jkmutai 17 Feb  4 22:37 /tmp/file1.txt
2442949 lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb  4 22:38 /tmp/file2.txt -> /tmp/file1.txt
2601927 lrwxrwxrwx. 1 jkmutai jkmutai 14 Feb  5 08:24 /tmp/file3.txt -> /tmp/file1.txt

Key difference between Soft link and Hard link

  • A hard link points a name to data on a storage device
  • A soft link points a name to another name, that points to data on a storage device

Have a happy Linux time and check our Hot deals to learn more.

Hot Deals for Learning materials available now

For Linux books to buy, check:

Best Linux Books for starters and experts

LPIC-1 and LPIC-2 reference books

RHCSA and RHCE Books to read