Skip to main content

ln command

ln command in linux is used to create links between files or directories. Links allow you to reference the same file from multiple locations. There are two types of links: hard links and soft (symbolic) links.

Usage: ln [OPTION]... [-T] TARGET LINK_NAME

  • OPTION: Flags which enhances the ln abilities.
  • TARGET: file or directory you want to link to.
  • LINK_NAME: name of the new link.

Examples

  • Creating a hard link

    A hard link is a direct reference to the same data on disk as the original file. By default, ln creates hard links.

    $ ln original.txt hardlink.txt
    • Creates a hard link named hardlink.txt pointing to original.txt.
    • Both names point to the same file data and deleting one doesn’t affect the other.
    • Hard links share the same inode (inode is a file data identifier).
    • They only work within the same filesystem.
    • If original.txt is deleted, hardlink.txt still accesses the data.
  • Creating a symbolic (soft) link

    A symbolic link (symlink) is a pointer to the original file’s path, like a shortcut. Use the -s (symbolic) option to create a symbolic link.

    $ ln -s original.txt symlink.txt
    • Creates a symbolic link named symlink.txt pointing to original.txt`.
    • If original.txt is deleted, symlink.txt becomes a broken link.
    • Symlinks can point to files or directories across filesystems.
    • They store a path, not the data itself.
    • Use ls -l to see symlinks (e.g., symlink.txt -> original.txt).
  • Linking a directory

    Symbolic links are commonly used for directories (hard links to directories are rarely allowed).

    $ ln -s /home/user/docs /home/user/docs_shortcut
    • Creates a symlink docs_shortcut pointing to the docs directory.
  • Forcing overwrite

    If the link name already exists, ln will fail unless you use -f (force) to overwrite it.

    $ ln -sf original.txt symlink.txt
    • Overwrites an existing symlink.txt with a new symbolic link to original.txt.
  • Preventing overwrites

    Use -n (no-dereference) with symlinks to treat an existing symlink as a file, not its target.

    $ ln -snf newfile.txt symlink.txt
    • Replaces symlink.txt without affecting its original target.
$ ln --help
Usage: ln [OPTION]... [-T] TARGET LINK_NAME
or: ln [OPTION]... TARGET
or: ln [OPTION]... TARGET... DIRECTORY
or: ln [OPTION]... -t DIRECTORY TARGET...
In the 1st form, create a link to TARGET with the name LINK_NAME.
In the 2nd form, create a link to TARGET in the current directory.
In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
Create hard links by default, symbolic links with --symbolic.
By default, each destination (name of new link) should not already exist.
When creating hard links, each TARGET must exist. Symbolic links
can hold arbitrary text; if later resolved, a relative link is
interpreted in relation to its parent directory.

Mandatory arguments to long options are mandatory for short options too.
--backup[=CONTROL] make a backup of each existing destination file
-b like --backup but does not accept an argument
-d, -F, --directory allow the superuser to attempt to hard link
directories (note: will probably fail due to
system restrictions, even for the superuser)
-f, --force remove existing destination files
-i, --interactive prompt whether to remove destinations
-L, --logical dereference TARGETs that are symbolic links
-n, --no-dereference treat LINK_NAME as a normal file if
it is a symbolic link to a directory
-P, --physical make hard links directly to symbolic links
-r, --relative create symbolic links relative to link location
-s, --symbolic make symbolic links instead of hard links
-S, --suffix=SUFFIX override the usual backup suffix
-t, --target-directory=DIRECTORY specify the DIRECTORY in which to create
the links
-T, --no-target-directory treat LINK_NAME as a normal file always
-v, --verbose print name of each linked file
--help display this help and exit
--version output version information and exit

The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable. Here are the values:

none, off never make backups (even if --backup is given)
numbered, t make numbered backups
existing, nil numbered if numbered backups exist, simple otherwise
simple, never always make simple backups

Using -s ignores -L and -P. Otherwise, the last option specified controls
behavior when a TARGET is a symbolic link, defaulting to -P.