ln (Unix)
Original author(s) | AT&T Bell Laboratories |
---|---|
Developer(s) | Variousopen-sourceandcommercialdevelopers |
Initial release | November 3, 1971 |
Operating system | Unix,Unix-like,IBM i |
Platform | Cross-platform |
Type | Command |
License | coreutils:GPLv3+ |
Theln
command is a standardUnix commandutility used to create ahard linkor asymbolic link(symlink) to an existing file or directory.[1]The use of a hard link allows multiplefilenamesto be associated with the samefilesince a hard link points to theinodeof a given file, the data of which is stored ondisk.On the other hand, symbolic links are special files that refer to other files byname.[2]
Theln
command by default creates hard links, and when called with thecommand lineparameterln -s
creates symbolic links.[3]Mostoperating systemsprevent hard links todirectoriesfrom being created since such a capability could disrupt the structure of afile systemand interfere with the operation of other utilities.[4]Theln
command can however be used to create symbolic links to non-existent files.[2]
Versions
[edit]ln
appeared in Issue 2 of theX/OpenPortability Guidelines.[5]The version ofln
bundled inGNUcoreutilswas written by Mike Parker and David MacKenzie.[6]
The command is available as a separate package forMicrosoft Windowsas part of theUnxUtilscollection ofnativeWin32portsof common GNU Unix-like utilities.[7]Thelncommand has also been ported to theIBM ioperating system.[8]
Links
[edit]Links allow more than one filename to refer to the same file as in the case of ahard linkor act aspointersto a filename as in the case of asoft link.Both hard links and soft links can be created by theln
command. Specifically,
- Hard links,also known simply as links, are objects that associate the filename with theinode,and therefore the file contents itself.[1]A given file on disk could have multiple links scattered through thedirectory hierarchy,with all of the links being equivalent since they all associate with the sameinode.[9]Creating a link therefore does not copy the contents of the file but merely causes another name to be associated with the same contents. Each time a hard link is created, alink counterthat is a part of theinode structuregets incremented; a file is not deleted until its reference count reaches zero.[1][10]However, hard links can only be created on the samefile system;this can prove to be a disadvantage.[11]
- Symbolic linksare special files which, when encountered during pathname resolution, modify thepathname resolutionto be taken to the location which the symbolic link contains. The content of the symbolic link is therefore the destinationpathstring, which can also be examined using the
readlink
command line utility.[12]The symbolic link may contain an arbitrary string which does not refer to the location of an existing file. Such a symbolic link will fail until a file is created at the location which is contained by the symbolic link. By contrast, a symbolic link to an existing file will fail if the existing file is moved to a different location (or renamed).[9]
Specification
[edit]Theln
utility on systems compliant with theSingle Unix Specificationis specified in the Shell and Utilities (XCU) document, which forms a part of the Single Unix Specification.[13]A mostly identical document is part ofPOSIX.[5]
The specification describes two ways of invoking theln
utility. Specifically,
- In the "single file" invocation the
ln
utility creates a new hard link (directory entry) for the source file specified by thesource_file
operand at the destination path specified by thetarget_file
operand. However, if the-s
option is specified, a symbolic link is created. ln[-fs][-L|-P]source_filetarget_file
- In the "multiple file" invocation the
ln
utility creates a new hard link (directory entry), or if the-s
option is specified, a symbolic link, for each file specified by thesource_file
operand, at a destination path in an existing directory named by operandtarget_dir
. ln[-fs][-L|-P]source_file_1source_file_2...target_dir
- In the "single file" invocation the
The specification also specifies the command line options that must be supported:
-f
Force existing destination pathnames to be removed to allow the link.-L
For eachsource_file
operand that names a file that is a symbolic link, create a hard link to the file referenced by the symbolic link.-P
For eachsource_file
operand that names a file that is a symbolic link, create a (hard) link to the symbolic link itself.-s
Create symbolic links instead of hard links. If the -s option is specified, the -L and -P options are silently ignored.- If more than one of the mutually-exclusive options
-L
and-P
is specified the last option specified determines the behavior of the utility. - 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 will be used as the default.
If neither target file nor target directory are specified, links will be created in the currentworking directory.
See also
[edit]References
[edit]- ^abcKernighan, Brian W.; Pike, Rob (1984).The Unix programming environment.Englewood Cliffs, N.J.: Prentice-Hall. p.59.ISBN013937681X.
- ^ab"GNU Coreutils: ln invocation".gnu.org.Free Software Foundation, Inc.Retrieved7 August2015.
- ^"ln - The Open Group Base Specifications Issue 7".pubs.opengroup.org.The IEEE and The Open Group.Retrieved7 August2015.
- ^"Why are hard links not allowed to directories in UNIX/Linux?".unix.stackexchange.com.Retrieved7 August2015.
- ^abThe Single UNIX Specification,Version 4 fromThe Open Group – Shell and Utilities Reference,
- ^LinuxGeneral CommandsManual –
- ^"Native Win32 ports of some GNU utilities".unxutils.sourceforge.net.
- ^IBM."IBM System i Version 7.2 Programming Qshell"(PDF).IBM.Retrieved2020-09-05.
- ^abLoosemore, Sandra; Stallman, Richard M.; McGrath, Roland; Oram, Andrew; Drepper, Ulrich.The GNU C Library Reference Manual(PDF).Free Software Foundation, Inc. p. 392.Retrieved7 August2015.
- ^"Speaking UNIX: It is all about the inode".ibm.com.IBM developerWorks.Retrieved7 August2015.
- ^Bovet, Daniel P.; Cesati, Marco (2005).Understanding the Linux Kernel(3rd ed.). Boston, MA: Safari Tech Books Online. p. 14.ISBN0596005652.
- ^"readlink(1) - Linux man page".linux.die.net.Retrieved7 August2015.
- ^"The Single UNIX Specification, Version 4 - Overview".unix.org.unix.org.Retrieved7 August2015.