ln (Unix)

{{Short description|Unix file management utility}}

{{Lowercase title}}

{{Infobox software

| name = ln

| logo =

| screenshot = Ln-example-command.gif

| screenshot size =

| caption = Example usage of {{code|ln}} utility

| author = AT&T Bell Laboratories

| developer = Various open-source and commercial developers

| released = {{Start date and age|1971|11|3}}

| latest release version =

| latest release date =

| operating system = Unix, Unix-like, IBM i

| platform = Cross-platform

| genre = Command

| license = coreutils: GPLv3+

| website =

}}

The {{code|ln}} command is a standard Unix command utility used to create a hard link or a symbolic link (symlink) to an existing file or directory.{{cite book|last1=Kernighan|first1=Brian W.|last2=Pike|first2=Rob|title=The Unix programming environment.|date=1984|publisher=Prentice-Hall|location=Englewood Cliffs, N.J.|isbn=013937681X|page=[https://archive.org/details/unixprogramminge0000kern/page/59 59]|url-access=registration|url=https://archive.org/details/unixprogramminge0000kern/page/59}} The use of a hard link allows multiple filenames to be associated with the same file since a hard link points to the inode of a given file, the data of which is stored on disk. On the other hand, symbolic links are special files that refer to other files by name.{{cite web|title=GNU Coreutils: ln invocation|url=https://www.gnu.org/software/coreutils/manual/html_node/ln-invocation.html|website=gnu.org|publisher=Free Software Foundation, Inc.|access-date=7 August 2015}}

The {{code|ln}} command by default creates hard links, and when called with the command line parameter {{code|ln -s}} creates symbolic links.{{cite web|title=ln - The Open Group Base Specifications Issue 7|url=http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html|website=pubs.opengroup.org|publisher=The IEEE and The Open Group|access-date=7 August 2015}} Most operating systems prevent hard links to directories from being created since such a capability could disrupt the structure of a file system and interfere with the operation of other utilities.{{cite web|title=Why are hard links not allowed to directories in UNIX/Linux?|url=http://unix.stackexchange.com/questions/22394/why-hard-links-not-allowed-to-directories-in-unix-linux?rq=1|website=unix.stackexchange.com|access-date=7 August 2015}} The {{code|ln}} command can however be used to create symbolic links to non-existent files.

Versions

{{code|ln}} appeared in Issue 2 of the X/Open Portability Guidelines. The version of {{code|ln}} bundled in GNU coreutils was written by Mike Parker and David MacKenzie.{{man|1|ln|ManKier}}

The command is available as a separate package for Microsoft Windows as part of the UnxUtils collection of native Win32 ports of common GNU Unix-like utilities.{{Cite web|url=http://unxutils.sourceforge.net/|title=Native Win32 ports of some GNU utilities|website=unxutils.sourceforge.net}} The {{Mono|ln}} command has also been ported to the IBM i operating system.{{cite web |title=IBM System i Version 7.2 Programming Qshell |language=en |author=IBM |website=IBM |author-link=IBM |url=https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/rzahz/rzahzpdf.pdf?view=kc |access-date=2020-09-05 }}

Links

Links allow more than one filename to refer to the same file as in the case of a hard link or act as pointers to a filename as in the case of a soft link. Both hard links and soft links can be created by the {{code|ln}} command. Specifically,

  1. Hard links, also known simply as links, are objects that associate the filename with the inode, and therefore the file contents itself. A given file on disk could have multiple links scattered through the directory hierarchy, with all of the links being equivalent since they all associate with the same inode. 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, a link counter that is a part of the inode structure gets incremented; a file is not deleted until its reference count reaches zero.{{cite web|title=Speaking UNIX: It is all about the inode|url=http://www.ibm.com/developerworks/aix/library/au-speakingunix14/|website=ibm.com|publisher=IBM developerWorks|access-date=7 August 2015}} However, hard links can only be created on the same file system; this can prove to be a disadvantage.{{cite book|last1=Bovet|first1=Daniel P.|last2=Cesati|first2=Marco|title=Understanding the Linux Kernel|date=2005|publisher=Safari Tech Books Online|location=Boston, MA|isbn=0596005652|page=14|edition=3rd}}
  2. Symbolic links are special files which, when encountered during pathname resolution, modify the [http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13 pathname resolution] to be taken to the location which the symbolic link contains. The content of the symbolic link is therefore the destination path string, which can also be examined using the {{code|readlink}} command line utility.{{cite web|title=readlink(1) - Linux man page|url=http://linux.die.net/man/1/readlink|website=linux.die.net|access-date=7 August 2015|ref=ReadlinkMan}} 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).{{cite book|last1=Loosemore|first1=Sandra|last2=Stallman|first2=Richard M.|last3=McGrath|first3=Roland|last4=Oram|first4=Andrew|last5=Drepper|first5=Ulrich|title=The GNU C Library Reference Manual|publisher=Free Software Foundation, Inc|page=392|url=https://www.gnu.org/software/libc/manual/pdf/libc.pdf|access-date=7 August 2015}}

Specification

The {{code|ln}} utility on systems compliant with the Single Unix Specification is specified in the Shell and Utilities (XCU) document, which forms a part of the Single Unix Specification.{{cite web|title=The Single UNIX Specification, Version 4 - Overview|url=http://www.unix.org/version4/overview.html|website=unix.org|publisher=unix.org|access-date=7 August 2015}} A mostly identical document is part of POSIX.{{man|1|ln|SUS}}

The specification describes two ways of invoking the {{code|ln}} utility. Specifically,

::In the "single file" invocation the {{code|ln}} utility creates a new hard link (directory entry) for the source file specified by the {{code|source_file}} operand at the destination path specified by the {{code|target_file}} operand. However, if the {{code|-s}} option is specified, a symbolic link is created.

::

ln [-fs] [-L|-P] source_file target_file

::In the "multiple file" invocation the {{code|ln}} utility creates a new hard link ([http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_130 directory entry]), or if the {{code|-s}} option is specified, a symbolic link, for each file specified by the {{code|source_file}} operand, at a destination path in an existing directory named by operand {{code|target_dir}}.

::

ln [-fs] [-L|-P] source_file_1 source_file_2 ... target_dir

The specification also specifies the command line options that must be supported:

::{{code|-f}} Force existing destination pathnames to be removed to allow the link.

::{{code|-L}} For each {{code|source_file}} operand that names a file that is a symbolic link, create a hard link to the file referenced by the symbolic link.

::{{code|-P}} For each {{code|source_file}} operand that names a file that is a symbolic link, create a (hard) link to the symbolic link itself.

::{{code|-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 {{code|-L}} and {{code|-P}} is specified the last option specified determines the behavior of the utility.

::If the {{code|-s}} option is not specified and neither a {{code|-L}} nor a {{code|-P}} option is specified, the implementation defines which of the {{code|-L}} and {{code|-P}} options will be used as the default.

If neither target file nor target directory are specified, links will be created in the current working directory.

See also

References

{{Reflist|30em}}