ln | |
---|---|
![]() Example usage of ln utility | |
Original author(s) | AT&T Bell Laboratories |
Developer(s) | Various open-source and commercial developers |
Initial release | November 3, 1971 |
Operating system | Unix, Unix-like, IBM i |
Platform | Cross-platform |
Type | Command |
License | coreutils: GPLv3+ |
ln
is a shell command for creating a link file to an existing file or directory. [1] By default, the command creates a hard link, but with the -s
command line option, it creates a symbolic link. [2] Most systems disallow a hard link to a directory since such links could disrupt the structure of a file system and interfere with the operation of other utilities. [3] The command can create a symbolic link to non-existent file. [4]
The command appeared in Issue 2 of the X/Open Portability Guidelines. [5] The version in GNU Core Utilities was written by Mike Parker and David MacKenzie. [6] The command is available in Windows via UnxUtils [7] and has been ported to IBM i. [8]
A link allows more than one path to refer to the same file.
A hard link is a directory entry that refers to a file's inode (an internal reference). A file can have multiple hard links – each referring to the same inode. [9] Creating a hard link does not copy the contents of the file; but merely causes another name to be associated with the same content. When a hard link is created for a file, a counter in its inode is incremented, and removing a hard link results in decrementing the counter. A file is not deleted (to allow reusing its storage space) until its reference count reaches zero. [1] [10] A hard link can only refer to an object on the same file system. [11]
A symbolic link refers to another file by its path (a symbolic reference). [4] When encountered during pathname resolution, modify the pathname resolution to be taken to the location which the symbolic link contains. The content of a symbolic link is the target path, which can also be examined via the readlink
command. [12] A symbolic link may specify a path that does not refer to an existing file. Resolving such a symbolic link will fail until a file is created at its specified path. Also, a symbolic link to an existing file will fail to resolve if the file is moved. [9]
Per the Single Unix Specification, the ln
command is specified in the Shell and Utilities (XCU) document. [13] POSIX includes a similar specification. [5]
If neither target file nor target directory are specified, links are created in the current working directory.
The specification indicates command line options that must be supported:
-f
(force) Clobbers an existing file if the output path specifies an existing file-L
If a source operand specifies a symbolic link, create a hard link to the link's target file-P
If a source operand specifies a symbolic link, create a hard link to the symbolic link file-s
Create symbolic links instead of hard links; causes -L
and -P
to be silently ignoredIf more than one of the mutually-exclusive options -L
and -P
is specified, the last option specified determines the resulting behavior.
If the -s
option is not specified and neither a -L
nor a -P
option is specified, the implementation defines which of the -L
and -P
options is used by default.
The command creates a new link to the path indicated by source
; stored at the path indicated by target
. The syntax is as follows:
ln [-fs] [-L|-P] source target
The command creates a new link to each file specified by the source_#
operands; stored in an existing directory indicated by target_dir
.
ln [-fs] [-L|-P] source_1 source_2 ... target_dir
The following creates a hard link to file foo called bar.
ln foo bar
The following creates a symbolic link to file foo called bar.
ln -s foo bar