Jump to content

ln (Unix)

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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 systemUnix, Unix-like, IBM i
PlatformCross-platform
TypeCommand
Licensecoreutils: 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]

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:

  • -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 ignored

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. ^ a b 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. ^ a b "GNU Coreutils: ln invocation". gnu.org. Free Software Foundation, Inc. Retrieved 7 August 2015.
  5. ^ a b 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. ^ a b 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.