LN(1) — UNIX Programmer’s Manual
NAME
ln − make links
SYNOPSIS
ln [ −s ] [ −i | −f ] sourcename [ targetname ]
ln [ −s ] [ −i | −f ] sourcename1 [ sourcename2 ... ] targetdirectory
DESCRIPTION
A link is a directory entry referring to a file; the same file (together with its size, all its protection information, etc.) may have several links to it. There are two kinds of links: hard links and symbolic links.
By default ln makes hard links. A hard link to a file is indistinguishable from the original directory entry; any changes to a file are effective independent of the name used to reference the file. Hard links may not span file systems and may not refer to directories.
The −s option causes ln to create symbolic links. A symbolic link contains the name of the file to which it is linked. The referenced file is used when an open(2) operation is performed on the link and is relative to the directory containing the link. A stat(2) on a symbolic link will return the linked-to file; an lstat(2) must be done to obtain information about the link. The readlink(2) call may be used to read the contents of a symbolic link. Symbolic links may span file systems and may refer to directories or even to non-existent files.
Given one or two arguments, ln creates a link to an existing file sourcename. If targetname is given, the link has that name; targetname may also be a directory in which to place the link; otherwise it is placed in the current directory (thus targetname defaults to “.”). If only the directory is specified, the link will be made to the last component of sourcename.
Given more than two arguments, ln makes links in targetdirectory to all the named source files. The links made will have the same name as the files being linked to.
OPTIONS
The following options are supported:
−s Make a symbolic link rather than a hard link.
−f If the target link already exists remove it before creating the link. If this option is not used an error will be reported and the link will not be created.
−i Ask the user before creating each link. The name of the link is printed on the standard output and the user is prompted for a yes or no. If the response (read from the standard input) starts with a “y” the link is created, removing the target first if it already exists, otherwise this link is skipped.
−V Support the System V ln semantics when the target exists. If the target is writable or the target is a symbolic link which cannot be resolved the command behaves as though the −f option was given - the target is unlinked and (if this succeeds) the link is created. Otherwise (the target is read-only or is a symbolic link referring to a read-only file) the command behaves as though the −i option was given - the user is asked whether the target should be removed. If the standard input of the command is not a terminal the command behaves as though the −f flag was given.
WARNING
The BSD semantics for ln allow it to be used to manage semaphores. To do this ln is used to create a link to an existing file (or, indeed, a symbolic link with any value). If the link succeeds the shell script which executed it has claimed the semaphore. If the link fails (because the link already exists) the semaphore is already held by another process. To release the semaphore the process simply removes the link.
This works because the ln command creates a link atomically. With the System V semantics this is no longer the case - the command will remove an existing link.
SEE ALSO
ln(1v), rm(1), cp(1), mv(1), link(2), readlink(2), stat(2), symlink(2).
4th Berkeley Distribution — Revision 1.3 of 11/10/90