Ln (Unix)

Last updated
ln
Original author(s) AT&T Bell Laboratories
Developer(s) Various open-source and commercial developers
Initial releaseNovember 3, 1971;53 years ago (1971-11-03)
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]

Contents

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]

Use

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.

Options

The specification indicates command line options that must be supported:

If 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.

Single file invocation

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 

Multiple file invocation

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 

Examples

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

See also

References

  1. 1 2 Kernighan, Brian W.; Pike, Rob (1984). The Unix programming environment . Englewood Cliffs, N.J.: Prentice-Hall. p.  59. ISBN   013937681X.
  2. "ln - The Open Group Base Specifications Issue 7". pubs.opengroup.org. The IEEE and The Open Group. Retrieved 7 August 2015.
  3. "Why are hard links not allowed to directories in UNIX/Linux?". unix.stackexchange.com. Retrieved 7 August 2015.
  4. 1 2 "GNU Coreutils: ln invocation". gnu.org. Free Software Foundation, Inc. Retrieved 7 August 2015.
  5. 1 2 ln   Shell and Utilities Reference, The Single UNIX Specification , Version 5 from The Open Group
  6. ln(1)    Linux General Commands Manual
  7. "Native Win32 ports of some GNU utilities". unxutils.sourceforge.net.
  8. IBM. "IBM System i Version 7.2 Programming Qshell" (PDF). IBM . Retrieved 2020-09-05.
  9. 1 2 Loosemore, Sandra; Stallman, Richard M.; McGrath, Roland; Oram, Andrew; Drepper, Ulrich. The GNU C Library Reference Manual (PDF). Free Software Foundation, Inc. p. 392. Retrieved 7 August 2015.
  10. "Speaking UNIX: It is all about the inode". ibm.com. IBM developerWorks. Retrieved 7 August 2015.
  11. Bovet, Daniel P.; Cesati, Marco (2005). Understanding the Linux Kernel (3rd ed.). Boston, MA: Safari Tech Books Online. p. 14. ISBN   0596005652.
  12. "readlink(1) - Linux man page". linux.die.net. Retrieved 7 August 2015.
  13. "The Single UNIX Specification, Version 4 - Overview". unix.org. unix.org. Retrieved 7 August 2015.