Hard Link vs Symbolic Link: How Do They Differ?

In classical Unix-like file systems, hard links and symbolic links are two distinct mechanisms for referencing files. A hard link creates an additional directory entry that points directly to the underlying inode of a file, whereas a symbolic link is a separate, special file that stores a text pathname pointing to another file or directory. Understanding how each interacts with inodes, deletion, and file system boundaries is essential for managing files and directories effectively.

In a traditional file system, a file's data and metadata (such as permissions, ownership, and timestamps) are stored in an inode, which is identified by a unique inode number. A directory is simply a mapping between human-readable filenames and inode numbers.

When you create a hard link, you are adding a new filename that maps to the exact same inode number as the original file. Both the original name and the hard link have equal status; neither is the "primary" file. The inode maintains a link count that tracks how many directory entries point to it.

Key characteristics of hard links include:

  • Shared inode: All hard links to a file share the same inode number, permissions, and data blocks.
  • Deletion behavior: Deleting one hard link only removes that directory entry and decrements the inode's link count. The file's data remains intact until the link count reaches zero and no processes have the file open.
  • File system limitation: Hard links cannot span across different file systems or partitions because inode numbers are only unique within a single file system.
  • Directory restriction: Most operating systems forbid creating hard links to directories to prevent circular references in the directory tree.

A symbolic link (also known as a symlink or soft link) is an independent file with its own inode. Instead of pointing to the target's inode, the symbolic link's data block contains the pathname (either relative or absolute) of the target file or directory.

When an application accesses a symbolic link, the operating system reads the stored pathname and resolves it to the target.

Key characteristics of symbolic links include:

  • Separate inode: A symbolic link has its own inode number and its own file type, distinct from the target it references.
  • Broken (dangling) links: If the target file is moved, renamed, or deleted, the symbolic link remains, but it becomes a broken link because the pathname it points to no longer exists.
  • Cross-file-system support: Because symbolic links store a pathname rather than an inode number, they can point to files or directories on different file systems, partitions, or network mounts.
  • Directory linking: Symbolic links can freely point to directories as well as regular files.

Key Differences at a Glance

Feature Hard Link Symbolic Link
Target Points directly to an inode Points to a pathname
Inode Shares the target's inode Has its own distinct inode
Target Deleted Data remains accessible via remaining links Link becomes broken (dangling)
Cross-File-System Not allowed Allowed
Link to Directories Generally not allowed Allowed

When to Use Each

Use a hard link when you want multiple filenames on the same file system to refer to the exact same file data without duplicating storage, and you want the data to persist even if one of the filenames is removed. Use a symbolic link when you need to link across different file systems, link to a directory, or create a shortcut that clearly indicates it is a reference to another location.